Перенос C -кода из Windows в Unix: системные вызовы, сталкивающиеся с именем функций

#c #namespaces #system-calls

#c #пространства имен #системные вызовы

Вопрос:

Я переношу некоторый грубый C -код для Windows в Linux, который использует функции с именами «открыть» и «закрыть» внутри каждого класса… Очень плохой стиль, или? К счастью, в Windows это не было проблемой, поскольку их системные вызовы называются по-разному.

Когда я пытаюсь вызвать системные вызовы open () или close (), я получаю некоторую ошибку компилятора о «нет соответствующей функции для вызова class: open()». Я не могу переименовать все наши функции с именами «class::open» и «class::close» во всем коде, и мне приходится использовать open() и close (), поскольку я работаю с последовательными портами.

Итак, мой вопрос: как я могу сообщить компилятору, какой open я имею в виду? Как я могу избежать или скрыть пространство имен класса в C ?

Комментарии:

1. Какой компилятор вы используете в Linux?

Ответ №1:

Вы можете использовать ::open для ссылки на open в глобальном пространстве имен.

Комментарии:

1. Спасибо! Вы были первыми, поэтому я отмечаю ваш ответ — но это была близкая гонка!

Ответ №2:

Вы можете использовать оператор разрешения области видимости для указания глобальных вариантов ::open и ::close .

Ответ №3:

Вызов ::open() вызовет глобальную функцию, то есть системный вызов.