3

CPU の影響を受けやすいアプリケーションがあり、関数呼び出しを最小限に抑えたいと考えています。私は次のようなものを書きたい:

#ifdef condition        
#define f(a,b) ff(a,b)   
#define f(a) ff(a)    
#endif    

しかし、コンパイラは f が複数回定義されていると見なします。使いたかった__VAR_ARGS__のですが、上記の例bではenumタイプです。それを行う適切な方法はありますか、または名前を に変更f(a,b) する必要がありf2(a,b)ますか?

定義を明確にするために、アクティブな場合は、ファイル/標準出力に出力するデータを処理する関数への呼び出しを追加します。そうでない場合、それらは空の行に置き換えられます。私の意見では、この方法はコードサイズを改善し、マクロは私のようINFO(object->contents)に単一行のキーワードであるためです。より読みやすいと思います。WARN("message")また、やのようなものを追加できれば便利WARN("value is",obj->printvalue())でした。

また、そのトリックを行うと思いますinline(以下の回答から)。

4

3 に答える 3

3

私の最初の推測は、間違った領域で最適化しているということです。この場合、優れたコンパイラは最適化します。コードを難読化すると、コンパイラによる難読化が難しくなります。

于 2013-06-10T11:36:35.400 に答える
0

C ++の本から答えを見つけました:
マクロ名はオーバーロードできません:
#define PRINT(a ,b ) cout <<(a )<<(b )
#define PRINT (a ,b ,c ) cout <<(a )<<(b )<<(c ) /* trouble?: redefines, does not overload */

于 2013-06-10T11:38:27.910 に答える