2

私が遭遇したいくつかのプリプロセッサ マクロには、先頭にアンダースコアを含む名前の引数があります。たとえば、Linux カーネルでは次のようになります。

#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)

これらの引数は、通常のマクロの引数と同じように動作するように見えるので、作成者が各引数名の先頭にアンダースコアを付けることにした理由がわかりません。との連結には何らかの意味がありますか_name、それともアンダースコアは作成者が使用することを選択した単なる規則ですか?

4

1 に答える 1

2

いいえ、特別な意味はありません。これらは通常の識別子です。著者がそのようなアンダースコアを追加することを決定した理由についての私の推測は、これらの属性の構成をより読みやすくすることです。

dev_attr_##_name

よりも読みやすい

dev_attr##name

ただし、 は疑わしいように見えます__ATTR。C では、アンダースコアで始まり、その後に大文字または別のアンダースコアが続く識別子は、実装用に予約されています__ATTRこの場合、2 つのアンダースコアなので、システム マクロであると予想されます。

于 2013-04-29T20:10:26.207 に答える