У меня есть проблема с компиляцией следующий код:Weird ошибка компиляции в Visual Studio 2008
#include <stdio.h>
#include <limits.h>
int main() {
printf("short: [%d,%d]\n",SHRT_MIN,SHRT_MAX);
printf("int: [%d, %d]\n",INT_MIN, INT_MAX);
printf("long: [%d, %d]\n",LONG_MIN,LONG_MAX);
int aa=017;
printf("%d\n",aa);
return 0;
}
сообщение об ошибке:
1>c:\tic\ex1\ex2\ex2.c(12) : error C2143: syntax error : missing ';' before 'type'
1>c:\tic\ex1\ex2\ex2.c(13) : error C2065: 'aa' : undeclared identifier
Однако сборник для этого нормально:
#include <stdio.h>
#include <limits.h>
int main() {
int aa=017;
printf("short: [%d,%d]\n",SHRT_MIN,SHRT_MAX);
printf("int: [%d, %d]\n",INT_MIN, INT_MAX);
printf("long: [%d, %d]\n",LONG_MIN,LONG_MAX);
printf("%d\n",aa);
return 0;
}
Подумайте, в чем проблема?
Я не уверен, что это ограничение было удалено раньше, чем C99. – GManNickG
C89 (aka C90) требует, чтобы объявления отображались в верхней части блока, но не обязательно работали. Многие компиляторы поддерживают объявления где-либо в качестве расширения, но это определенно не C90. –
Если вы скажете компилятору VC++ скомпилировать код C (а не C++), он по умолчанию будет иметь архаичный профиль C (возможно, старше C89). Просто дайте компилятору компилировать C++, если вы хотите обрезать сгенерированные кодом ключи компилятора use - например, отключение механизма исключения и т. Д. –