[解決済み] プリプロセッサー指示文の##(ダブルハッシュ)は何を意味しているのですか?
2022-05-18 12:22:28
質問
#define DEFINE_STAT(Stat) \
struct FThreadSafeStaticStat<FStat_##Stat> StatPtr_##Stat;
上の行はUnreal 4から取ったもので、Unrealフォーラムで質問できることは知っていますが、これはここで質問されるに値する一般的なC++の質問だと考えています。
最初の行がマクロを定義していることは理解していますが、私は C++ のプリプロセッサの悪ふざけについてよく知らないので、そこで迷っています。論理的には、バックスラッシュは、次の行に宣言が続くことを意味します。
FThreadSafeStaticStat は少しテンプレートのように見えますが、# があり、C++ では見たことのない構文があります。
これが何を意味するのか、誰か教えてください。Unreal 4 にアクセスできないかもしれないことは理解していますが、構文がわからないのです。
どのように解決するのですか?
##
は連結のためのプリプロセッサー演算子です。
ですから、もしあなたが
DEFINE_STAT(foo)
に置き換わります。
struct FThreadSafeStaticStat<FStat_foo> StatPtr_foo;
のように、コードがコンパイルされる前に
もう一つの例です。 ブログの記事 からの例です。
#include <stdio.h>
#define decode(s,t,u,m,p,e,d) m ## s ## u ## t
#define begin decode(a,n,i,m,a,t,e)
int begin()
{
printf("Stumped?\n");
}
このプログラムは正常にコンパイル・実行され、次のような出力が得られます。
Stumped?
このコードに対してプリプロセッサが起動されたとき。
-
begin
はdecode(a,n,i,m,a,t,e)
-
decode(a,n,i,m,a,t,e)
は次のように置き換えられます。m ## a ## i ## n
-
m ## a ## i ## n
は次のように置き換えられます。main
このように効果的に
begin()
は
main()
.
関連
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】なぜ、サイズ8の初期化されていない値を使用するのでしょうか?
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない