Очень загадочная / случайная ошибка C WDK STL 7: iosfwd(202): ошибка C2144: синтаксическая ошибка

#c #winapi #windows-7 #stl #wdk

#c #winapi #windows-7 #stl #wdk

Вопрос:

У меня есть следующий тривиальный файл с именем Temp.cpp :

 #include <string>
int main() { return 0; }
  

и я пытаюсь скомпилировать ее с помощью следующей командной строки в среде бесплатной сборки Windows XP, используя WDK 7.1:

 cl.exe /Iincapicrtstl70 /Iinccrt C:Temp.cpp
  

и я получаю действительно случайные ошибки, такие как:

 Microsoft (R) 32-bit C/C   Optimizing Compiler Version 15.00.30729.207 for 80x86

C:WinDDK7600.16385.1incapicrtstl70iosfwd(202) :
    error C2144: syntax error : 'int' should be preceded by ';'
  

Ошибка исчезает, если я использую stl60 вместо stl70 , но это не решает проблему.

В чем причина проблемы?


Обновление: Я попытался удалить и установить WDK снова, но ничего не изменилось. 🙁


Обновление 2: Хорошо, по-видимому, ошибка проявляется в самом файле заголовка: _SCL_INSECURE_DEPRECATE является причиной. Кто-нибудь знает, как правильно ее отключить? (Если я просто закомментирую строки, я получу еще кучу ошибок, касающихся кучи других макросов.)

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

1. Забавно, я попытался выполнить поиск WDK stl70 errors и угадайте, что появилось на первом месте в Google.. эта чертова штука становится быстрее с каждым днем. o_O

2. @Xeo: Черт возьми, да, это довольно чудовищно 🙂

3. VC 7.0 — один из худших компиляторов всех времен. :-(Текущая версия 10.0 SP1.

4. не уверен, в чем собственно проблема, но разве вам не обязательно иметь return in main ?

5. @Andrey: вам не нужно иметь return in main() в C .

Ответ №1:

Нашел ответ сам, изменив заголовки и проверив guess’n’checking:

Мне нужно _STL70_ определить.

Ответ №2:

Что cl.exe вы улавливаете? Если у вашего path более старый компилятор (VC6), предшествующий компилятору WDK, вы ожидаете этих ошибок. VC6 не может скомпилировать STL, поставляемый с VC7

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

1. Нет, это правильный вариант. Я использовал пункт меню Пуск (Наборы драйверов Windows-> Среды сборки -> Windows XP-> и т.д.), И я на 100% уверен, что это правильный компилятор / компоновщик. У меня даже не установлен VC6, ха-ха.

2. Компилятор VC6 также поставляется со старыми WDK.

3. Нет; Монитор процесса сообщает мне, что я открываю правильные компиляторы, файлы и все остальное. (В моем PATH также нет никаких компиляторов.)

4. @Mehrdad: просто чтобы все точно знали, с каким компилятором имеет дело, вставьте в вопрос строку логотипа / баннера, которую компилятор выводит в качестве первой строки вывода.

Ответ №3:

по-видимому, ошибка проявляется в самом файле заголовка: _SCL_INSECURE_DEPRECATE является причиной. Кто-нибудь знает, как правильно ее отключить?

Если у вас возникли проблемы с _SCL_INSECURE_DEPRECATE , попробуйте установить:

 /D_SCL_SECURE_NO_DEPRECATE
  

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

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

1. Ага, уже пробовал это. Нет, это не помогло, хотя спасибо. : И нет, я использую полностью правильный компилятор, я даже переустановил его. Я убежден, что проблема определенно не такого рода; это просто проблема с флагами / макросами.