[過去ログ] C++相談室 part154 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
346
(6): 2021/01/31(日)13:18 ID:ZnRwde8F(2/13) AAS
>>337
それは問題ではないんだけど、
#define a(x) { int _x = 1; _x = x * 2; printf("%d",_x);}
のようなマクロが有ったとすれば、
int y = 5;
a(y); // 10 と表示される。

int _x = 5;
a(_x); // 2 と表示される。
358
(1): 2021/01/31(日)16:03 ID:fCVb5Gn/(4/11) AAS
>>346
#define a(x) { int z = 1; z = x * 2; printf("%d",z);}
int y = 5; a(y);
int z = 5; a(z);
これと何が違うの?
下線で始まることとは無関係だろ
370
(2): 2021/01/31(日)16:34 ID:ZnRwde8F(5/13) AAS
>>358
命名規約に従って変数名をつけていれば、>>346のマクロはバグらない。
一方、>>358のマクロは、命名規約に従って合法的に定義されたローカル
変数zに対して使ってもバグる。
その違い。
394
(1): 2021/01/31(日)17:58 ID:A8yllSCF(1) AAS
ローカルスコープでも _x が禁止だというなら >>346 のマクロ a 定義内で _x を使っていい理屈もわからんよな。
411: 2021/02/01(月)07:38 ID:LhepLs74(2/3) AAS
として安全に取り扱われる

一方>>346の_xはa(x)が展開された結果が他のプリプロセッサ定義で再置換され得るなら危険
これが起きるかはプリプロセッサの仕様(規格)を見たら白黒付くが
個人的には君子なので危うきには近づかないことに死体、
413: 2021/02/01(月)09:26 ID:5yr9aQzL(1) AAS
>>346
そもそもそのマクロで生成される変数はファイルスコープでないから、そもそも問題外では?

仮にファイルスコープな変数を宣言するようなマクロでも、ユーザが意図せず
415: 2021/02/01(月)11:43 ID:VhfMLcQM(1) AAS
>>346
アホだ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.042s