1

gcc バージョン 3.2.4 では複数行のマクロがサポートされていますか (コンパイル可能)。上記の gcc バージョンを使用して、Linux ホストで複数行のマクロを含むソースをビルドしようとしています。複数行のマクロでコンパイル エラーが発生します。

      #define YYCOPY(To, From, Count)       \
      do                    \
     {                  \
       YYSIZE_T yyi;                \
       for (yyi = 0; yyi < (Count); yyi++)  \
         (To)[yyi] = (From)[yyi];       \
     }                  \
      while (0)

それらがサポートされていない場合、マクロを関数またはその他のコンパイラ オプションに変換すると、これを回避できますか?

ありがとうございました。

-広告

4

2 に答える 2

3

マクロを継続するためのバックスラッシュは、標準のプリプロセッサです。バックスラッシュの後に余分なスペースやその他の非表示の文字がないか確認してください。

于 2010-01-20T05:06:18.493 に答える
2

ANSI C 仕様では、コンパイラがこれをサポートする必要があります。具体的には、行が改行の直前のバックスラッシュで終了する場合、プリプロセッサはその行と後続の行を 1 つの論理行として処理することを規定しています。改行は存在しませんでした。プリプロセッサがこれを行わない場合、それは適合するプリプロセッサではありません (より技術的には、標準で呼ばれているトランスレータ) ではありません。

GCC は、ANSI C 標準に可能な限り準拠するよう努めています。はい、行末にバックスラッシュを付けて定義された複数行のマクロをサポートしています。

コンパイラ エラーが発生する理由は別のものです。マクロを正しく使用していません。受け取った正確なエラー メッセージとマクロを呼び出すコードを投稿しないと、何が間違っているのかを判断することはできません。

于 2010-01-20T05:52:08.233 に答える