Как включить комментарии в стиле С++ в gcc при отключении ANSI?
Это только что появилось как вопрос, на котором я работал, поэтому немного поработал, и ответ - ExpertExchange. Поэтому я передаю вам первоначальный вопрос, Манчунг:
У меня есть проект, написанный в чистом C, который будет использоваться во встроенной системе. Итак, я использую чистый C, чтобы свести к минимуму размер кода.
Когда я компилирую проект, я использую флаг -ansi, чтобы убедиться, что код соответствует стандарту ANSI. Однако нижняя сторона использования этого ansi-флага заключается в том, что мне разрешено использовать только комментарии стиля C (/* comments */). Это дает мне головную боль, когда мне нужно использовать вложенные комментарии.
Итак, мой вопрос: какие переключатели/флаги можно использовать, чтобы позволить мне использовать комментарии в стиле C++ (//комментарии), одновременно поддерживая проверку ANSI?
Которая в значительной степени суммирует мой вопрос тоже.
Ответы
Ответ 1
В последних выпусках gcc, -ansi
документируется как те же, что и -std=c89
. Новый синтаксис комментариев доступен только с C99-стандартом, поэтому -std=c99
разрешит его.
Существует также -std=gnu89
, что совпадает с -std=c89
, но разрешает все расширения gcc (включая синтаксис комментария в стиле С++, который был расширением GNU задолго до его добавления в стандарт).
Также посмотрите на флаг -pedantic
, который может дать вам некоторые полезные предупреждения.
Литература:
Ответ 2
Если вы хотите использовать комментарии стиля С++ только потому, что хотите комментировать блоки и получить головную боль о вложенности /*... */, вы можете использовать эту технику:
#if 0
... code ...
#endif
который также будет выполнять эту работу.
Ответ 3
Вы можете использовать препроцессор -lang-c-С++ для комментариев как в режиме ANSI, так и в стиле С++.
gcc -Wp,-lang-c-c++-comments -c source.c
Ответ 4
Если вы используете -ansi
только для проверки совместимости, самым простым может быть подготовка цели script или makefile, которая копирует полное исходное дерево в папку ansi при исправлении//комментариев. В pseudo- bash:
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 после каждой фиксации и отправляет вам отчет об этом.
Ответ 5
Я боюсь написания какой-то утилиты комментариев-перезаписи (как предлагает Лютер Блиссетт), возможно, это ваш единственный вариант. В современных версиях gcc отсутствует какой-либо флаг компилятора или CLI, который будет включать комментарии стиля С++ при использовании -ansi
или -std=c89
.
Возможно, вы сможете достичь того, чего хотите, приблизившись к нему под другим углом. Вы можете скомпилировать с помощью -std=c99
и использовать флаги компилятора, чтобы отключить не относящиеся к C99 расширения, которые вам не нужны (не зная больше о том, почему именно вам требуется соответствие ANSI, я не могу рекомендовать определенные флаги).
Ответ 6
Вы можете автоматически создать копию источника с комментариями и использовать их в своей программе.
например. это выглядит многообещающим
Ответ 7
gcc -x cpp
заставит файлы обрабатываться как файлы С++, не переименовывая их.
Ответ 8
C имеет комментарии по стилю С++ уже почти десять лет, возможно, вам следует обновить?