在 Linux C/C++ 開發中,error: expected expression before 'struct' 是常見編譯錯誤,通常源於巨集未定義、巢狀巨集展開異常、或使用保留字導致編譯器無法正確解析語句。以下整理三大典型成因與對策。
<sys/ioctl.h> 標頭檔呼叫 ioctl 並使用 VIDIOC_QUERYCAP 等常數時,若未包含正確標頭檔,巨集未展開導致語法錯誤。
#include <sys/ioctl.h> // 必須包含
錯誤寫法:
#define X =5 // 多餘的 '=' int z = X + 1; // 展開為 int z = =5 + 1; → 語法錯誤
正確寫法:
#define X 5 // 或 #define X (5)
巢狀巨集若內層未定義,同樣會觸發此錯誤,建議以 gcc -E 預處理輸出排查。
錯誤範例:
typedef struct {
int x;
} struct; // 'struct' 為關鍵字,不可作類型別名
解決:改用非保留字名稱,如 MyStruct、Point 等。
#include。=、分號、未閉合括號。struct、class、int 等)命名變數/型別。gcc -E file.c 查看預處理後原始碼,定位錯誤行。