1. ホーム
  2. c-preprocessor

[解決済み] 定義マクロのプラグマ

2022-10-07 13:20:07

質問

pragmaステートメントを他のステートメントと一緒にマクロに埋め込む方法はありますか?

のようなことを実現しようとしています。

#define DEFINE_DELETE_OBJECT(type)                      \
    void delete_ ## type_(int handle);                  \
    void delete_ ## type(int handle);                                                \
    #pragma weak delete_ ## type_ = delete_ ## type

ブーストソリューション(waveを除く)が存在すれば大丈夫です。

どのように解決するのですか?

c99やc++0xを使用している場合、pragma演算子があり、次のように使用します。

_Pragma("argument")

と同じ意味です。

#pragma argument

ただし、マクロで使用することができます(c99 標準の 6.10.9 節、または c++0x 最終委員会草案の 16.9 を参照してください)。

例えば

#define STRINGIFY(a) #a
#define DEFINE_DELETE_OBJECT(type)                      \
    void delete_ ## type ## _(int handle);                  \
    void delete_ ## type(int handle);                   \
    _Pragma( STRINGIFY( weak delete_ ## type ## _ = delete_ ## type) )
DEFINE_DELETE_OBJECT(foo);

の中に入れると gcc -E となります。

void delete_foo_(int handle); void delete_foo(int handle);
#pragma weak delete_foo_ = delete_foo
 ;