2016-04-19 151 views
-4

我最近得到了一個C++程序,用於我的學校測試。#定義與{}和聲明混淆

#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 = convert(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