2011-08-21 136 views
0

可以請人給我解釋一下我究竟做錯了什麼,我收到文件的錯誤意外結束,也缺少函數頭,在此先感謝調試錯誤

static char debug[256]; 

#define DBGPRINT(...)   {sprintf_s(debug, 256, __VA_ARGS__); OutputDebugStringA(debug);} 

#define CHECK_READ(status, str) while(0){                    \ 
            if(0 == status){                 \   
             DBGPRINT("Message %s\n", str);     \ 
             return 0;                  \ 
            }                     \ 
           }                      
int main(){ 

char* str = "hello world"; 
status = 0; 
CHECK_READ(status, str); 

return 0; 
} 

錯誤:

Error line 7 error C2447: '{' : missing function header (old-style formal list?) 
Error line 11 error C2447: '{' : missing function header (old-style formal list?) 
Error line 15 error C2017: illegal escape sequence  
Error line 19 fatal error C1004: unexpected end-of-file found 
+0

儘可能不要在C++中使用宏和原始char *字符串。 –

+0

@dark_charlie:在特定情況下,用同樣緊湊的東西來替換宏將會非常複雜。但是當然,char *字符串是邪惡的。 – Vlad

+0

@Vlad:你的宏是NOOP。它可以很好地替換爲空行。 – Mat

回答

1

好的這裏是真正的答案。

我複製並從上面的代碼粘貼,並且您已經在宏定義行

if(0 == status){    \ WHITESPACE HERE 

對於blackslash作爲續行字符操作的一臺後的空白,它必須是最後一個字符該行,之後沒有空格。現在誰知道這是否是你的實際問題,但與空白我得到了同樣的錯誤,沒有它,我沒有。

+0

最好的,非常感謝你 – yeap

1

在宏定義結束時您還有一個額外的\。所以,你的int main(){行實際上是宏CHECK_READ的一部分:)


編輯:
無尾\的變體編譯以及對ideone:http://ideone.com/pddx0。我聲明status,因爲它沒有在你的代碼中聲明。 (我註釋掉了OutputDebugStringA並用snprintf代替sprintf_s,因爲它們都是微軟專用的,不會在gcc上編譯。)

+0

沒有幫助,同樣的問題:( – yeap

+0

@yeap:請發佈修改後的代碼比 – Vlad

+0

@yeap:和實際的錯誤消息。 – Vlad