この問題を解決しようとしています:C++ How can I prevent my team developers from using integer version of abs by mistake?マクロを使用してabs
機能をもう使用できなくしました。プリプロセッサ文を使用して標準機能を禁止することはできませんか?
myabs(3);
を含むコードをg ++オプション-Dmyabs=abs
でコンパイルすると、(myabs
はabs
に置き換えられます)、コンパイルされます。
abs(3);
を含むコードをg ++オプション-Dabs=forbidden
でコンパイルするとコンパイルされます...なぜそれが報告されないのですかforbidden
は不明ですか? abs
のように見えますが、前処理中にforbidden
に置き換えられません...なぜですか?
インクルードガードによって保護されている場合は、-include cmathコンパイラ引数を指定して強制的にabsマクロ(未試行)を定義することができます – matt
幸いです: 'abs 'は' math'を含める前に 'forbidden'後ではないので、#undef absを実行する必要があります – jpo38