錯誤:“if”之前的預期表達式 (error: expected expression before ‘if’)


問題描述

錯誤:“if”之前的預期表達式 (error: expected expression before ‘if’)

這是我的代碼,不知道哪裡錯了,什麼是“表達式”?

#define m(smth) (if(sizeof(smth) == sizeof(int)) {printf("%d", (int) smth);} else{puts((char*)smth);})

int main(void) {
    m("smth");
}

這裡是輸出:

/home/roroco/Dropbox/rbs/ro_sites/c/ex/ex2.c: In function ‘main’:
/home/roroco/Dropbox/rbs/ro_sites/c/ex/ex2.c:18:18: error: expected expression before ‘if’
 #define m(smth) (if(sizeof(smth) == sizeof(int)) {printf("%d", (int) smth);} else{puts((char*)smth);})
                  ^
/home/roroco/Dropbox/rbs/ro_sites/c/ex/ex2.c:21:5: note: in expansion of macro ‘m’
     m("smth");
     ^
make[3]: *** [ex/CMakeFiles/ex2.dir/ex2.c.o] Error 1
make[2]: *** [ex/CMakeFiles/ex2.dir/all] Error 2
make[1]: *** [ex/CMakeFiles/ex2.dir/rule] Error 2
make: *** [ex2] Error 2

參考解法

方法 1:

(if(expression) {} else {}) is not valid syntax.

Try

#define m(smth) if(sizeof(smth) == sizeof(int)) {printf("%d", (int) smth);} else{puts((char*)smth);}

方法 2:

You can't enclose a block in C in braces (()) ‑ just remove them, and you should be OK. Also, it probably won't be a bad idea to surround calls to smth with braces:

#define m(smth) if(sizeof(smth) == sizeof(int)) {printf("%d", (int) (smth));} else{puts((char*)(smth));}

(by nwaicaethiAlmoMureinik)

參考文件

  1. error: expected expression before ‘if’ (CC BY‑SA 2.5/3.0/4.0)

#syntax-error #macros #C






相關問題

SQL Server 2008 - 嘗試編輯日期 - 語法錯誤? (SQL Server 2008 - Trying to edit dates - Syntax Error?)

將 Jquery.min 升級到 Jquery.1.9 時出錯 (Error Upgrade Jquery.min into Jquery.1.9)

SyntaxError:無效語法(打印功能) (SyntaxError: invalid syntax (print function))

錯誤:“if”之前的預期表達式 (error: expected expression before ‘if’)

導致 C2061 的用戶創建的標頭:語法錯誤:標識符“類名” (User-Created Header Causing C2061: Syntax Error : Identifier 'classname')

If 語句行收到語法錯誤 (Syntax Error received on If statement line)

語法錯誤:到達了意外的文件結尾。你有一個未關閉的#if (Syntax error: Unexpected end of file reached. You have an unclosed #if)

已經放 } 但錯誤仍然說 } 是預期的? (Already put } but the error still says that } is expected?)

為什麼 Java 不允許在這裡使用三元運算符? (Why doesn't Java allow the use of a ternary operator here?)

我在繪製向量時遇到語法錯誤 (I'm encountering a syntax error while plotting vectors)

我想在 Kotlin 中自定義新按鈕時遇到問題 (I have a problem when I want to customize my new button in Kotlin)

為什麼帶註釋的變量不能是全局的? (Why can't an annotated variable be global?)







留言討論