たとえば、warning: unnamed struct/union that defines no instances
コンパイラのコマンド ライン オプションではなく、ソース ファイル内の " " を削除するにはどうすればよいでしょうか。
CONST_BUG_ON
コンパイル時に一部の const 値をチェックするために使用するC マクロを定義したいと考えて います。
#define CONST_BUG_ON(e) struct {int a:!(e);}
警告warning: unnamed struct/union that defines no instances
が表示されますが、この場合は実際の問題ではありません。
ありがとうトム・タナー
#define CONST_BUG_ON_3(e, l) struct buggy##l {int a:!(e);}
#define CONST_BUG_ON_2(e, l) CONST_BUG_ON_3(e, l)
#define CONST_BUG_ON(e) CONST_BUG_ON_2(e, __LINE__)
それは良いことですが、まだいくつか問題があります: filea
の 6 行目に CONST_BUG_ON(e) が含まれていて、 filea
が file に含まれていて、 fileb
の 6 行b
目に CONST_BUG_ON(e) が含まれている場合、gcc は再定義エラーを訴えます。__COUNTER__
instade of の使用__LINE__
は完璧かもしれませんが、私の古いコンパイラは をサポートしていません__COUNTER__
。
ありがとうバジル・スタリンケビッチ
#define CONST_BUG_ON(e) do { \
int tab[__builtin_constant_p(e)?1:-1] = {0}; \
if (tab[0]) abort(); } while (0)
これは C ステートメントであり、関数内にのみ配置できます。関数の外で使用したいのです。