19

これは、私が働いていた場所での質問として出てきたばかりなので、少し掘り下げたところ、答えは ExpertsExchange のものです。それでは、最初の質問者であるマンチュンにあなたを引き渡します。

組み込みシステムで使用される純粋な C で書かれたプロジェクトがあります。そのため、純粋な C を使用してコード サイズを最小限に抑えています。

プロジェクトをコンパイルするときは、コードが ANSI 標準に準拠していることを確認するために -ansi フラグを使用します。ただし、この ansi フラグを使用することの欠点は、C スタイルのコメント (/*comments */) しか使用できないことです。これは、ネストされたコメントを使用する必要があるときに頭痛の種です。

それで、私の質問は次のとおりです。ANSI チェックを同時に有効にしたまま、C++ スタイルのコメント (// コメント) を使用できるようにするには、どのスイッチ/フラグを使用できますか?

これは私の質問もかなり要約しています。

4

7 に答える 7

28

gccの最近のリリースでは-ansi、と同じであると文書化されてい-std=c89ます。新しいコメント構文はC99標準でのみ使用できるため、-std=c99許可されます。

-std=gnu89と同じですが、すべてのgcc拡張機能を許可するものもあり-std=c89ます(標準に追加されるずっと前からGNU拡張機能であったC ++スタイルのコメント構文を含む)。

また-pedantic、いくつかの有用な警告を与える可能性のあるフラグも見てください。

参照:

于 2008-11-10T10:31:44.470 に答える
19

ブロックをコメントアウトしたいという理由だけで C++ スタイルのコメントを使用したい場合、および /* ... */ のネストについて頭痛の種になる場合は、次の手法を使用できます。

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

これは実際にも仕事をします。

于 2008-11-10T10:36:55.943 に答える
14

-lang-c-c++-comments プリプロセッサを使用して、ANSI モードと C++ スタイルの両方のコメントを含めることができます。

gcc -Wp,-lang-c-c++-comments -c source.c
于 2008-11-10T10:06:31.993 に答える
3

互換性を確認するためだけに使用する場合-ansi、最も簡単な方法は、スクリプトまたは makefile ターゲットを準備して、// コメントをパッチで取り除きながら、完全なソース ツリーを「ansi」フォルダーにコピーすることです。疑似 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 がサポートしている場合は、これを commit-hook にすることもできます。これは、各コミット後に ANSI モードの専用マシンでコードを自動的にビルドし、それに関するレポートをメールで送信します。

于 2010-07-22T11:51:23.167 に答える
0

残念ながら、ある種のコメント書き換えユーティリティ (Luther Blissett が提案しているように) をスクリプト化することが、ここでの唯一の選択肢かもしれません。-ansigcc の最新バージョンでは、またはが使用されているときに C++ スタイルのコメントを有効にするコンパイラ フラグや CLI オプションはないようです-std=c89

別の角度からアプローチすることで、あなたが望むものを手に入れることができるかもしれません。-std=c99コンパイラ フラグを使用してコンパイルし、不要な C99 固有の拡張機能を無効にすることができる場合があります(正確に ANSI 準拠が必要な理由を詳しく知ることなく、特定のフラグをお勧めすることはできません)。

于 2010-07-26T20:20:16.670 に答える
-2

コメントを取り除いたソースのコピーを自動的に作成し、それをプログラムで使用できます。

たとえば、これは有望に見えます

于 2010-10-11T09:05:21.573 に答える
-7

C には C++ スタイルのコメントが 10 年近くありますが、アップグレードする必要がありますか?

于 2008-11-10T10:04:47.177 に答える