次のコードは、g ++ -std = C++ 11コンパイラによるコンパイルに失敗します。C++で異なる数の引数を持つネストされたマクロを使用する
# include<iostream>
# include<vector>
using namespace std;
# define stlf(x) x.begin(), x.end()
# define repf(it, a, b) for(auto it = a ; it != b ; ++it)
/*
// Also, following alternative fails
# define repf(it, a, b) for(auto it = a ; it != b ; ++it)
# define stlf(x) x.begin(), x.end()
*/
typedef vector<int > vi;
# define pd(x) printf("%d", x);
int main(void){
vi arr(10, -1);
repf(arr, stlf(arr))
pd(arr[i]);
return 0;
}
1.なぜこの出来事はありますか?
2.彼らは、この機能を回避することを、C++プリプロセッサの実装のための実装上の問題だったかもしれない何?
どのようにしてこのようなショートカットを使用できますか?
あなたはこのような「ショートカット」を避けるためにうまくいくでしょう。誰かがあなたのコードを読むのが難しくなります –