私の古いヘッダーには、0 引数を許可する可変長マクロが含まれています。gcc 4.7.3 を使用して C++11 に対してコンパイルすると、##
トークンは前のコンマを削除していないように見えます。
#define FOOCRO(...) printf("42\n", ## __VA_ARGS__)
int main(){
FOOCRO(); // dumped from gcc -E: printf("42\n",); //comma still in place
return 0;
}
間隔の問題かもしれないと思いましたが、の配置は##
コンマの削除に影響を与えないようです。
編集:
嫌われている機能の誤用の認識に悩まされないように、これはこの質問のために単純化したソースマクロです。
#define LOG(...) Logger::Write(__FILE__,__LINE__, ##__VA_ARGS__)
私はまだ、デバッグ文を挿入するたびにすべてのくだらないことを書く以外に、デバッグを行う「悪」の少ない方法に出くわしていません。