1

実際にヘッダーを含める前にヘッダーが存在するかどうかを知らせる、きちんとした Clang 固有の機能を見つけました ( __has_include)。次のようなことを行うために、独自のマクロを考え出そうとしていました。

#define DOES_HEADER_EXIST(_header_)      \
#if !__has_include(_header_)             \
#warning Header not found: _header_      \
#endif

しかし、これはうまくいかないようです。プリプロセッサに 2 つのパスを実行するように要求するようなものなので、これが機能しない理由はわかりますが、間違っているのでしょうか?

4

2 に答える 2

4

プリプロセッサが実際にアクションを実行するプリプロセッサ ディレクティブに展開されるマクロを作成する方法はありません。

特定のマクロは、マクロ パラメーターではないトークンが続く#ifことをコンパイラが許可した場合、不正な形式のディレクティブと見なされる単一の長い行に展開されるため、欠陥があります。#

必要なことを行うには、実際にコードをコンパイルする前に、実行するテストを挿入するプリプリプロセッサが必要です。

于 2013-05-31T20:49:52.580 に答える