#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() вызовет глобальную функцию, то есть системный вызов.