Как комментарии в стиле C ++ по умолчанию обрабатываются в GCC 4.3.3?

Я использую GCC 4.3.3 на 64-разрядной версии Ubuntu 9.04 и получаю ошибки, используя комментарии в стиле C ++ в коде C. Когда я говорю "по умолчанию" в заголовке, я имею в виду просто вызов gcc test.c

Согласно документации GCC 4.3.3 (здесь), это поддерживается ... но все равно у меня есть ошибки.

Эти ошибки исчезли с простым добавлением -std = c99 к моей строке компиляции, так что моя проблема решена. Любопытно, есть ли у экспертов GCC объяснение этому, поскольку мне кажется, что это явное противоречие с документацией.

#include <stdio.h>
// this is a comment

int main( void )
{
   return 0;
}

person Kyle Walsh    schedule 01.11.2009    source источник
comment
Вы можете опубликовать полные ошибки?   -  person pmg    schedule 01.11.2009
comment
Ошибка @pmg: ожидаемый идентификатор или "(" перед токеном "/"   -  person Kyle Walsh    schedule 01.11.2009
comment
Что ж, '/' не является символом комментария в стиле C ++! Должен быть \\. Так что это совсем другая ошибка. Опубликуйте код и журнал ошибок (отредактировав сообщение not в следующем комментарии). Мне кажется, что название сообщения больше не отражает вашу актуальную проблему.   -  person Clifford    schedule 01.11.2009
comment
@ Клиффорд, я полагаю, вы допустили здесь опечатку. Вы ведь не говорите, что строка «// это комментарий» (удаление одинарных кавычек) не оставит комментарий, не так ли? \\, безусловно, не то, как вы начинаете комментировать.   -  person Kyle Walsh    schedule 02.11.2009
comment
@Clifford Re: название вопроса, я сделаю правку для правильного охвата. Спасибо.   -  person Kyle Walsh    schedule 02.11.2009


Ответы (3)


По умолчанию GCC использует стандарт C89 / 90 с расширениями GCC. Строго говоря, по умолчанию он не придерживается какого-либо конкретного стандарта, так как по умолчанию он не будет выдавать никаких диагностических сообщений в ситуациях, когда такие сообщения требуются стандартом. Вам нужно запустить gcc в режиме -ansi -pedantic (возможно, также -Wall), чтобы он соответствовал стандарту. И в этом случае у вас снова будет C89 / 90.

person AnT    schedule 01.11.2009

Возможно, Ubuntu переопределяет значение по умолчанию, что должно быть gnu89. Конечно, я не понимаю этого с моей копией GCC 4.3 (на Debian).

% echo '// foo' | gcc-4.3 -x c -c -
% echo '// foo' | gcc-4.3 -std=gnu89 -x c -c -    
% echo '// foo' | gcc-4.3 -std=c89 -x c -c -    
<stdin>:1: error: expected identifier or '(' before '/' token
person Nicholas Riley    schedule 01.11.2009

Цитата из http://gcc.gnu.org/onlinedocs/gcc/Standards.html#Standards.

По умолчанию, если параметры диалекта языка C не указаны, это -std = gnu89.

И // comments распознаются -std=gnu89

person pmg    schedule 01.11.2009