Как включить комментарии в стиле C ++ в gcc, не отключая ANSI? - PullRequest
19 голосов
/ 10 ноября 2008

Это просто вопрос о том, где я работал, поэтому я немного покопался и получил ответ ExpertsExchange. Итак, я передаю вам вопрос оригинального вопроса, Маньчжун:

У меня есть проект, написанный на чистом C, который должен использоваться во встроенной системе. Итак, я использую чистый C, чтобы минимизировать размер кода.

Когда я компилирую проект, я использую флаг -ansi, чтобы убедиться, что код соответствует стандарту ANSI. Однако недостатком использования этого флага ANSI является то, что мне разрешено использовать только комментарии в стиле C (/ * comments * /). Это вызывает головную боль, когда мне нужно использовать вложенные комментарии.

Итак, мой вопрос: какие переключатели / флаги я могу использовать, чтобы разрешить мне использовать комментарии (// комментарии) в стиле C ++, сохраняя при этом включенную проверку ANSI?

Что в значительной степени подводит итог и моего вопроса.

Ответы [ 7 ]

26 голосов
/ 10 ноября 2008

В последних выпусках gcc, -ansi задокументировано как то же самое, что и -std=c89. Новый синтаксис комментариев доступен только для стандарта C99, поэтому -std=c99 позволит это сделать.

Существует также -std=gnu89, что совпадает с -std=c89, но разрешает все расширения gcc (включая синтаксис комментариев в стиле C ++, который был расширением GNU задолго до того, как он был добавлен в стандарт).

Также посмотрите на флаг -pedantic, который может дать вам несколько полезных предупреждений.

Ссылки:

19 голосов
/ 10 ноября 2008

Если вы хотите использовать комментарии в стиле C ++ только потому, что вы хотите закомментировать блоки и получить головную боль от вложенности / * ... * /, вы можете использовать эту технику:

#if 0
... code ...
#endif

, который на самом деле также сделает эту работу.

14 голосов
/ 10 ноября 2008

Вы можете использовать -lang-c-c ++ - препроцессор комментариев, чтобы иметь как режим ANSI, так и комментарии в стиле C ++.

gcc -Wp,-lang-c-c++-comments -c source.c
3 голосов
/ 22 июля 2010

Если вы используете -ansi только для проверки совместимости, тогда проще всего будет подготовить сценарий или цель make-файла, которая копирует полное дерево исходных текстов в папку «ansi», исправляя // комментарии. В псевдо-баш:

SRC=main.c blip.c blip.h
cp makefile ansi-src/
for F in $SRC do
# does not handle // in string literals or /**/ comments!
sed 's/\/\/.*//g' < $F >ansi-src/$F
done
cd ansi-src
make CFLAGS=-ansi

Если ваш SCC поддерживает это, его также можно преобразовать в коммит-хук, который автоматически строит код на выделенном компьютере в режиме ANSI после каждой фиксации и отправляет вам отчет об этом по почте.

0 голосов
/ 11 октября 2010

Вы можете автоматически создать копию исходного кода с удаленными комментариями и использовать ее в своей программе.

например. это выглядит многообещающе

0 голосов
/ 27 июля 2010

Боюсь, что сценарий какой-нибудь утилиты для перезаписи комментариев (как предполагает Лютер Блиссетт) может быть единственным вариантом здесь. В современных версиях gcc, кажется, нет какого-либо флага компилятора или параметра CLI, который включит комментарии в стиле C ++ при использовании -ansi или -std=c89.

Возможно, вы сможете достичь того, чего хотите, подойдя к нему под другим углом. Вы можете скомпилировать с -std=c99 и использовать флаги компилятора, чтобы отключить специфичные для C99 расширения, которые вам не нужны (не зная, почему именно требуется соответствие ANSI, я не могу рекомендовать конкретные флаги).

0 голосов
/ 10 ноября 2008

C имеет комментарии в стиле C ++ уже почти десять лет, может быть, вам стоит обновить?

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