質問: C言語を書いていると、大量のヘッダーファイルが必要となるので、多重読み込みの混乱を避けるためにインクルードガードが必要となります。 `#pragma once`という標準化されていない方法もあるのですが、移植性のあるやり方としては`#ifndef`~`#define`~`#endif`の流れとなっています。 もちろん特に問題なく使っていたのですが、あるときこんなヘッダーファイルを見つけてしまいました。 ``` /* define_only.h:自分が書いていたやり方 */ #ifndef DEFINE_ONLY_H_INCLUDED #define DEFINE_ONLY_H_INCLUDED /* ヘッダーの中身 */ #endif /* DEFINE_ONLY_H_INCLUDED */ /* define_1.h:新しく見かけたもの */ #ifndef DEFINE_1_H_INCLUDED #define DEFINE_1_H_INCLUDED 1 /* ヘッダーの中身 */ #endif /* DEFINE_1_H_INCLUDED */ ``` インクルードガードに使う記号定数に値を割り当てることで、何かしらのメリットがあるものなのでしょうか。ご存知でしたらお知らせいただければ幸いです。 (2016/05/17 9:48 追記) 見かけた場所というのが、Ruby処理系のヘッダーファイル内です。検索してもインクルードガード以外に使われていなさそうだし、ほぼ全ファイルで1が`#define`されていました。
回答: こんにちは。 記憶が定かではないのですが、大昔のCコンパイラで`#define FOO`のような空定義ができないものがあったような気がします。 そのような古いコンパイラの時代に慣れた人が書いたソースでしたらあり得るかも。 しかし、昔懐かしのLattice Cのアミガ用のマニュアルが有りましたが、これは空定義もサポートしているようですので記憶違いの可能性もあります。(43ページ辺り)