エラー、バグ、質問 - ページ 2864 1...285728582859286028612862286328642865286628672868286928702871...3185 新しいコメント fxsaber 2020.10.05 10:59 #28631 Andrey Khatimlianskii:では、なぜうまくいかないのでしょうか? もっとも、このやり方ではどこにも通用しない。右側のVALUEが未定義であるような代入が行われているからです。 #define VALUE (VALUE*2) Vladimir Simakov 2020.10.05 11:04 #28632 fxsaber:このやり方は、おそらくどこでも通用しないでしょう。右側のVALUEが未定義のまま代入が行われているため。 他人のマクロ置換を変えるのは悪ですしね。これがあらかじめ定義された環境マクロであれば、なおさらです。プロジェクトの すべてのファイルが組み立てられた後、オーバーライドするマクロが最終的にどこになるかは重要ではありません。自分で_VALUEマクロを定義した方が良い。 fxsaber 2020.10.05 11:08 #28633 Vladimir Simakov: そう、そして他人のマクロ置換を変更することは悪なのです。 この悪がなければ、こうは ならなかったのです。 Valeriy Yastremskiy 2020.10.05 11:12 #28634 Vladimir Simakov: 他人のマクロ置換を変更するのは悪ですし。特に、定義済みの環境マクロであればなおさらです。プロジェクトのすべてのファイルが組み立てられた後、最終的にどこにマクロのオーバーライドが表示されるかは問題ではありません。自分で_VALUEマクロを定義した方がいい。グローバル変数に VALUEの値を代入し、それを掛け合わせて最終的な定義に代入する方法が使えないのはなぜか、教えてください。 Vladimir Simakov 2020.10.05 11:36 #28635 Valeriy Yastremskiy: グローバル変数 にVALUEを代入し、それを掛け合わせて最終的なdefineに代入することができないのはなぜか、お伺いします。 できますが、その場合、マクロ代入の意味がなくなります(コード内の値を代入する)。コンパイラがconst型をc++のconstexpr型に変換してくれることを願うばかりです。 しかし、それ以外は、はい、できます。 #ifdef MACROS const int gValue=2*VALUE; #undef VALUE #define VALUE gValue #endif fxsaber 2020.10.05 11:38 #28636 Vladimir Simakov:でも、それなら、はい、できますよ。 それだとうまくいかないんです。 void Func( int = VALUE ) {} Vladimir Simakov 2020.10.05 11:50 #28637 fxsaber:これでは使えません。 もう一度、constexprにお願いして、こんな風に作ってみましょう。 constexpr auto x = 100; void Foo(int _x = x) { std::cout << _x<<std::endl; } int main() { Foo(); return 0; } Andrey Khatimlianskii 2020.10.05 11:59 #28638 fxsaber:このやり方は、おそらくどこでも通用しないでしょう。このような代入が行われているため、右側のVALUEが定義されていないところ。 どうやら、私はコンパイラの仕組みを全く理解していないようです。文字列は順次解析していくイメージです。だから、右側に未定義の値はない。 #define VALUE 10 // VALUE = 10 #define TMP VALUE // TMP = 10 #undef VALUE // VALUE = EMPTY #define VALUE (TMP*2) // TMP = 10, следовательно VALUE = 20 fxsaber 2020.10.05 12:00 #28639 Andrey Khatimlianskii:どうやら、私はコンパイラの仕組みを全く理解していないようです。弦楽器は順次解析していくイメージです。だから、右側に未定義の値はない。 テキスト置換のようにトップダウンで動作します。すなわち、"TMP "は "VALUE "に置き換わる。 Vladimir Simakov 2020.10.05 12:05 #28640 Andrey Khatimlianskii:どうやら、私はコンパイラの仕組みを全く理解していないようです。弦楽器は順次解析していくイメージです。だから、右側に未定義の値はない。 コンパイラーではなく、プリプロセッサーです) #define VALUE (TMP*2) になる。 #define VALUE (VALUE*2) であり、VALUEは未定義である。 1...285728582859286028612862286328642865286628672868286928702871...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
では、なぜうまくいかないのでしょうか?
もっとも、このやり方ではどこにも通用しない。右側のVALUEが未定義であるような代入が行われているからです。
このやり方は、おそらくどこでも通用しないでしょう。右側のVALUEが未定義のまま代入が行われているため。
そう、そして他人のマクロ置換を変更することは悪なのです。
この悪がなければ、こうは ならなかったのです。
他人のマクロ置換を変更するのは悪ですし。特に、定義済みの環境マクロであればなおさらです。プロジェクトのすべてのファイルが組み立てられた後、最終的にどこにマクロのオーバーライドが表示されるかは問題ではありません。自分で_VALUEマクロを定義した方がいい。
グローバル変数 にVALUEを代入し、それを掛け合わせて最終的なdefineに代入することができないのはなぜか、お伺いします。
できますが、その場合、マクロ代入の意味がなくなります(コード内の値を代入する)。コンパイラがconst型をc++のconstexpr型に変換してくれることを願うばかりです。
しかし、それ以外は、はい、できます。
でも、それなら、はい、できますよ。
それだとうまくいかないんです。
これでは使えません。
このやり方は、おそらくどこでも通用しないでしょう。このような代入が行われているため、右側のVALUEが定義されていないところ。
どうやら、私はコンパイラの仕組みを全く理解していないようです。文字列は順次解析していくイメージです。だから、右側に未定義の値はない。
どうやら、私はコンパイラの仕組みを全く理解していないようです。弦楽器は順次解析していくイメージです。だから、右側に未定義の値はない。
テキスト置換のようにトップダウンで動作します。すなわち、"TMP "は "VALUE "に置き換わる。
どうやら、私はコンパイラの仕組みを全く理解していないようです。弦楽器は順次解析していくイメージです。だから、右側に未定義の値はない。
コンパイラーではなく、プリプロセッサーです)
になる。
であり、VALUEは未定義である。