2016-04-19 6 views
-4

最近、私の学校テストのためのC++プログラムがあります。#{0}と混同して宣言します。

#include<iostream.h> 
#define convert(p,q) p+2*q 

void main() 
{ 
int a,b,result; 
cin>>a>>b; 
result=convert(a,b); 
cout<<result; 
} 

これは正しく動作します。

私は{}内のp + 2 * qを入れると、それは私にエラー与える: "関数mainで表現構文を()"

今、私はちょうど出力する前に結果を宣言するときに、このような:

int result =変換(a、b);

これは機能します。なぜ、どうしてですか?

+0

これはなぜ問題ではないのですか?問題は{}です。 – Rahul

+1

ああ、問題を引き起こす実際のコードを投稿できますか? –

+0

問題を再現する最小限の例を示します。 – user2079303

答えて

2

コンパイラの不満が理解できない場合は、マクロを使用しないでください。これはあなたのコードは、マクロが展開されたときのように見えるものであるあなたは、余分な{}

result={a+2*b} 

を入れて、これは前に同じライン

int result={a+2*b} 

上の宣言と同じように見えるものであるとき、 C++ 11標準では、前者は構文エラーです。 C++ 11以降では、一時的なのはcopy-list-initializationです(構文(10)を参照)。

後者はaggregate initializationです。

+0

C++ 11の最初の行は問題ありませんか? – user463035818

+0

@ tobi303はい、私はC++ 11以降の構文が何を意味しているのかを述べました。 – user2079303

関連する問題