私は Boost ライブラリのソースコードを見てきましたが、プリプロセッサディレクティブが付加されていない単一のポンド記号がしばしばあることに気付きました。 GCCプリプロセッサのマニュアルと仕様ガイドを読みましたが、何も見つかりません。
(1) #ifndef BOOST_CONFIG_HPP
(2) # include <boost/config.hpp>
(3) #endif
(4) #
(5) #if defined(BOOST_HAS_PRAGMA_ONCE)
(6) # pragma once
(7) #endif
4行目では、ポンド記号の後には何もありません。これにはどんな効果がありますか? Cプリプロセッサ(CPP)仕様で定義されていますか?
Boostはクロスプラットフォームライブラリであるため、CPPはそれを正しく解析するものと想定しています。コード全体でランダムなポンド/ハッシュ記号を使用すると、どのような影響/副作用がありますか?
ライン上の#
自体はまったく効果がありません。審美的な価値のために使われていると思います。
C規格は次のように述べています:
6.10.7 Nullディレクティブ
セマンティクス
フォームの前処理指令
# new-line
効果がありません。
C++標準は同じことを言っています:
16.7 Nullディレクティブ[cpp.null]
フォームの前処理指令
# new-line
効果がありません。
それはソースコードをきれいに見せます、それがすべてです。
ブロック全体がプリプロセッサセクションであることを強調しています。
そして実際、CとC++の両方のプリプロセッサmust行の#
を無視します。
他のリソースに依存するのではなく、常に信頼できるソースを確認してください。 CはISO 9899 :: 2011として標準化されていますが、C++にはISO標準もあります。両方とも受け入れられており、最終草案は短い検索で入手できます。 C標準では 6.10.7 に記載されています(C++にはほぼ同じテキストがあります):
フォームの前処理指令
# new-line
効果がありません。
これはnullディレクティブであり、コア言語の先行表現のない;
はnull statement。
プリプロセッサの場合、書式設定/読みやすさのために、行が意味的に一緒に属していることを強調します。 (セミコロンOTOHは意味的に関連しています)。