Как отключить ключевое слово интерфейса в Visual C ++ Express 2008? - PullRequest
6 голосов
/ 18 ноября 2008

Я собираю устаревший код C здесь, и есть много переменных и членов структуры с именем "interface", но VC2008 express жалуется на это, вы знаете, как отключить это?

Я уже изменил настройки, чтобы компилировать код только как код на Си, но на это не влиял.

Ответы [ 5 ]

5 голосов
/ 25 марта 2011

Проблема в том, что MS # определяет интерфейс для структуры так, чтобы

interface Name {...}

может использоваться в коде COM c ++. (objbase.h: 199: #define interface __STRUCT__)

Просто #undef interface после включения Windows.h ..

4 голосов
/ 18 ноября 2008

Если вы пытаетесь скомпилировать разумно переносимый код C, возможно, стоит отключить расширения языка Microsoft (/ Za в командной строке, Свойства конфигурации> C / C ++> Язык в VS) и посмотреть, скомпилируется ли тогда код.

4 голосов
/ 18 ноября 2008

Do

#define interface QQInterface

перед вашим кодом (например, в заголовочном файле), таким образом, везде, где используется интерфейс ключевого слова, компиляторы видят «QQInterface», который не является ключевым словом. Если весь код включает это определение, вы не получите ошибок компилятора или компоновщика.

1 голос
/ 18 ноября 2008

"interface" a не должен быть ключевым словом в C или ISO C ++. Это является ключевым словом в Managed Extensions для C ++, поэтому, я думаю, где-то в вашей конфигурации вы все еще говорите ему о создании кода для .NET. Убедитесь, что везде установлено «нативный код»

Однако вполне возможно, что вы НЕ МОЖЕТЕ установить его в Native Code в редакции Express. Это всего лишь предположение, но оно разумно, учитывая позиционирование MS редакций Express / Standard / Pro.

ОБНОВЛЕНИЕ: не обращайте внимания на последний абзац. MSFT настаивает на том, что вы можете создавать собственные приложения Win32 с VisualC ++ Express: http://www.microsoft.com/express/vc/

0 голосов
/ 24 сентября 2012

Я столкнулся с подобной проблемой при компиляции кода C ++, который включал заголовочный файл dbus. Поскольку в dbus есть несколько функций, в которых он использует «интерфейс» в качестве имени параметра I / P, который является ключевым словом C ++, я получил следующую ошибку: error: expected ',' or '...' before 'struct'.

Когда я попробовал это:

#ifdef interface 
#undef interface 
#endif 

это решило проблему. Не уверен, что использование связывания dbus C ++ было бы лучше. В любом случае, я не использовал dbus, просто имел удаленную зависимость от одного из заголовков dbus, это решение просто отлично работало !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...