В Visual Studio 2005 я пытаюсь скомпилировать файл .c:
int i = 6;
int a[i];
Это не работает, так какому же стандарту соответствует мой компилятор?
В Visual Studio 2005 я пытаюсь скомпилировать файл .c:
int i = 6;
int a[i];
Это не работает, так какому же стандарту соответствует мой компилятор?
Visual Studio поддерживает только C89/90. У них нет поддержки C99. Поэтому вы не можете использовать массивы переменной длины в Visual Studio. Кроме того, Microsoft не планирует добавлять поддержку C99 в свой компилятор C.
wprintf(L"%s\n", "hello");
не работает. Я не могу сразу придумать примеры, но я почти уверен, что существуют серьезные проблемы несоответствия с некоторыми исходными функциями C89 и, возможно, с поведением препроцессора.
- person R.. GitHub STOP HELPING ICE; 24.10.2011
wprintf(L"%s\n", "hello");
работать? Я уверен, что он должен поддерживать либо wprintf(L"%hs\n", "hello");
, либо wprintf(L"%s\n", L"hello");
...
- person Medinoc; 18.06.2013
%hs
является недопустимым спецификатором формата. Второй вариант также неверен. %s
требует в качестве аргумента указатель на строку (массив char
, заканчивающийся нулем), а не указатель на широкую строку.
- person R.. GitHub STOP HELPING ICE; 18.06.2013
%s
всегда означает узкую строку, а не строку той же ширины, что и функция, и для последней нет спецификатора. Коварный и контринтуитивный.
- person Medinoc; 18.06.2013
malloc()
, преимущество которого заключается в том, что он позволяет обнаруживать ошибки распределения. - person Keith Thompson   schedule 24.10.2011