min
がすでにマクロとして定義されている場合、std::min
に電話する方法を教えてください。minがマクロとして定義されているときにstd :: min()を呼び出す方法は?
答えて
(std::min)(x,y)
min
周りの括弧はマクロ展開を防ぎます。これはすべての関数マクロで機能します。
指令の後にコードに#undef min
を使用してください。
#include <...> // bad header that defines `min` macro
#ifdef min
#undef min
#endif
// rest f code.
補遺:あなたはその後min
マクロの値を保持する必要がある場合、あなたはいくつかのコンパイラの非ポータブルソリューションを使用して、一時的にその定義を無効にすることができます。例えば、MicrosoftのC++コンパイラはと思われるpush_macro
pragmaを持っています。
ああ、私は本当にそれをすることはできません。なぜなら何らかの理由でマクロに依存する可能性があるすべてのことを後悔してしまうからです。実際の解決策ではなく、むしろ貧弱なハックです。 :\ – Mehrdad
@Mehrdad:マクロとしての 'min'は、まずはハックです。それを避けるのがベストです。本当にマクロが必要な場合は、「MIN」という名前のものや、衝突しないものを使用してください。 – hammar
@Mehrdad:一時的に無効にするための解決策を掲載しました。しかし、マクロが定義されている場合、テキスト置換はプリプロセッサによって行われ、コンパイラに置き換えられているように、言語が明確に述べているので、ポータブルな解決策はありません。関数の最小値とマクロの最小値を区別するために使用できるC++言語構造はありません。 –
Windowsでは、ウィンドウヘッダーを含める前にNOMINMAX
を定義する必要があります。これは、プリコンパイル済みヘッダーの先頭に配置することをお勧めします。 More info here
あなたは、マクロ定義を避けることができるかもしれない:最初の場所(いずれかのような問題のあるヘッダを含む#define NOMINMAX
又は類似または回避するように構成することによって) に定義を避ける
#undef
これらのオプションを使用できない場合やそれらを使用したくない場合は、括弧を適切に使用して関数型マクロを呼び出すことを避けることができます。
#include <algorithm>
#include <stdio.h>
#define min(x,y) (((x) < (y)) ? (x) : (y))
int main()
{
printf("min is %d\n", (std::min)(3, 5)); // note: the macro version of `min` is avoided
}
これはポータブルであり、私はそれを行うために他の方法をいくつ見つけC.
の暗い、初期の頃から取り組んできました:
方法1:
using std::min;
min(a, b); // uses either the macro or the function (don't add side effects!)
方法2:
#ifndef BOOST_PREVENT_MACRO_SUBSTITUTION
#define BOOST_PREVENT_MACRO_SUBSTITUTION
#endif
...
std::min BOOST_PREVENT_MACRO_SUBSTITUTION(a, b)
- 1. 関数std :: minをstd :: minのコピーに渡すことができません。
- 2. std :: min/std :: maxをテンプレートコンパレータとして使用
- 3. Linuxカーネル `min`マクロ
- 4. 定義された値をシェル内のループとして呼び出す方法
- 5. サブ定義されていないエラー:別のシートでマクロを呼び出す
- 6. Maxとminは
- 7. なぜmin属性がngChangeを呼び出すのですか?
- 8. CでLDBL_MAX/MINを定義する
- 9. MIN/MAXビジュアルスタジオで動作しないマクロ
- 10. マクロが呼び出されたワークシートに戻る方法は?
- 11. JavaScriptの下に定義されている変数を呼び出す方法
- 12. libC++のstd :: minについてのダングリングリファレンスがありません
- 13. C++はstd :: minとstd :: maxの下でstd :: optionalの動作を標準化していますか?
- 14. tabBarController:shouldSelectViewController:デリゲートが設定されているときに呼び出されない
- 15. アプリが開いているときを知る方法(onCreateが呼び出されていないとき)
- 16. CSSメディアはmin-widthとmin-device-widthの両方に矛盾しますか?
- 17. 各メンバーのmin()とsecond min()の検索
- 18. Python Min-Max関数 - minおよびmax要素を返す引数としてリストする
- 19. MINとMAXは、指定された項目タイプと品質
- 20. ChartJSでminより小さい値を設定する方法
- 21. MySQL - MIN/MAX値をMIN/MAX値からフェッチする方法
- 22. NameError:関数を呼び出すときに 'loan_tape'という名前が定義されていません
- 23. Jenkinsfileで関数を定義して呼び出す方法は?
- 24. シェフで配列を定義して呼び出す方法は?
- 25. Spacemacsで関数を定義して呼び出す方法は?
- 26. max()とmin()python
- 27. ラジオボタンが選択されているときにMEL関数呼び出しが呼び出される
- 28. クラスのプロパティが設定されているときにメソッドを呼び出す方法はありますか?
- 29. @media min-wdthとmax-widthを使ってコンテナの幅を固定する方法
- 30. 関数が明確に定義されていても「致命的なエラー:呼び出しは未定義の関数に呼び出されます」
無慈悲に、標準的な施設に行ってください。 –