2010-05-24 46 views
5

GCC喜歡告訴我,我的錯誤消息中缺少說明符限定符列表。什麼是說明符限定符列表?

我知道這意味着我沒有放入正確類型的東西。

但究竟是什麼一個說明符限定符列表?

編輯:

的C語言代碼導致此:

#include <stdio.h> 

int main(int argc, char **argv) { 
    struct { undefined_type *foo; } bar; 
    printf("Hello, world!"); 
} 

給出了從GCC這些錯誤:

Lappy:code chpwn$ gcc test.c 
test.c: In function ‘main’: 
test.c:4: error: expected specifier-qualifier-list before ‘undefined_type’ 
+2

也許你可以展示一行代碼生成錯誤的例子? – 2010-05-24 04:04:44

+1

對於我們這些已經學會了不會犯任何錯誤的人來說,很難猜出你正在犯的錯誤,因此插圖會有很大的幫助。 – 2010-05-24 04:11:21

+1

我添加了一個例子。 – 2010-05-24 04:31:41

回答

5

這是符和限定符:-)說明符的事情的清單如void,char,struct Foo等,並且限定符是關鍵字如constvolatile。定義見this C grammar

在你的情況下,undefined_type還沒有定義,所以解析器將它看作是一個標識符,而不是它所期望的說明符限定符列表。如果你在typedef ... undefined_type;發生之前,那麼undefined_type將成爲一個說明符。

如果您認爲使用上下文無關文法解析C,編譯器處理typedefs等的方式可能會很麻煩。如果我理解正確,它通過潛入符號表操作來遊戲解析器生成器,以便它可以使用上下文來解析源代碼。

相關問題