1. ホーム
  2. c++

[解決済み] C/C++プリプロセッサで、パウンド/ハッシュ記号(#)を1行で記述する目的は何ですか?

2022-05-11 09:05:21

質問

を見てきました。 ブースト ライブラリのソースコードで、しばしばプリプロセッサーディレクティブが付加されていない単一のポンド記号があることに気づきました。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でも正しくパースされるはずだと思います。コード中にランダムなポンド/ハッシュ記号があると、どのような効果/副作用があるのでしょうか?

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

A # を単体で行内に置いても、全く効果がありません。美観のために使われているのでしょう。

C言語規格によると

6.10.7 Null指示文

セマンティクス

という形式のプリプロセッシングディレクティブです。

# new-line

は効果がありません。

C++の規格にも同じことが書いてあります。

16.7 Null指示文[cpp.null]について

という形式のプリプロセッシングディレクティブです。

# new-line

は効果がありません。