我在C11標準中發現的所有不完整類型都是不完整的數組類型。我想知道是否有非數組不完整類型。是否有非數組不完整類型?
回答
僅供參考,什麼是不完整的,完整?
在一個翻譯單元內的各個點的對象類型可以是 不全(缺少足夠的信息來確定該類型的對象的大小)或完整(具有足夠的信息)。 C11§6.2.51
除了潛在struct
,union
,數組和總是void
,enum
暫時不全,因爲它們的尺寸是不完整的,直到}
。枚舉類型是不完整的,直到
}
之後立即終止列舉器聲明列表,並在此後完成。 C11§6.7.2.24
int main() {
enum ee1 { a1 = 0, b1 = sizeof(int), c1 };
printf("%zu\n", sizeof(enum ee1)); // OK
// error: invalid application of 'sizeof' to incomplete type 'enum ee2'
// v--------------v
enum ee2 { a2 = 0, b2 = sizeof(int), c2 = sizeof(enum ee2) }; // Bad
printf("%zu\n", sizeof(enum ee2)); // OK
}
此外
結構,聯合或枚舉類型的所有聲明具有相同範圍並使用相同的標籤聲明相同的類型。不管在同一翻譯單元中是否存在標籤或類型的其他聲明,類型在定義內容的列表的緊接大括號之後不完整,並且之後完成。 §6.7.2.34
是的,void
也是一個不完整的類型,它可以從來沒有是完整的。
此外,如其他答案中所述,未知內容(即前向聲明)的結構或聯合聲明也是不完整的類型。請記住,一旦它被成員聲明(定義內容),就會變成完整的類型。
要添加,引用C11
,章§6.2.5/ P1
[...]在一個翻譯單元內的各個點的對象類型可以是 不完整的(缺乏足夠的信息來確定大小該類型的對象)或 完整(具有足夠的信息)。
P19,
的
void
類型包括一個空的一組值;它是不完整的對象類型, 無法完成。
和,P22,
未知大小的數組類型是一個不完整的類型。對於該類型的標識符,通過在稍後的聲明中指定大小(使用內部或外部鏈接)完成。未知內容的結構或聯合類型(如(6.7.2.3)中所述)是一種不完整類型,對於該類型的所有聲明,通過在相同範圍內聲明相同的結構或聯合標籤及其定義的內容。
的struct
或union
前向聲明沒有其內容的一種定義也是不完整類型
從C standard的部分6.2.5:
未知大小的數組類型是不完整的類型。對於該類型的標識符,通過在稍後的聲明中指定大小(使用內部或外部鏈接)完成。 結構或 未知內容的聯合類型(如6.7.2.3中所述)是不完整類型的 。對於所有類型的聲明, 通過在同一範圍內聲明相同的結構或聯合標籤及其定義內容 完成。
不完整類型是描述標識符的類型,但缺少確定標識符大小所需的信息。 「不完整類型」可以是
其結構類型,其成員尚未指定。
一個聯合類型,其成員您尚未指定。
其維數尚未指定的數組類型。
void類型是一個不完整的類型不能完成
- 1. GCC:數組類型有不完整的元素類型?
- 2. 錯誤:數組類型具有不完整的元素類型
- 3. 數組類型具有不完整的元素類型
- 4. 數組類型具有不完整的元素類型?
- 5. C錯誤數組:數組類型具有不完整的元素類型。
- 6. 參數有不完整的類型
- 7. C++非類型模板參數:typedef是整型還是整型?
- 8. 基類有不完整類型
- 9. 數組元素有不完整的類型
- 10. 「數組類型的元素類型不完整」是什麼意思?
- 11. Ç編譯錯誤:數組類型具有不完整的元素類型
- 12. 數組類型具有不完整的結構iocb元素類型
- 13. GCC錯誤:數組類型具有不完整的元素類型
- 14. 結構選項錯誤:數組類型具有不完整的元素類型
- 15. C:數組類型中的錯誤具有不完整的元素類型
- 16. C錯誤:數組類型具有不完整的元素類型
- 17. C++這是一個不完整類型?
- 18. 數組的結構 - 數組具有不完整的元素類型(在C中)
- 19. 完整類型爲C:C11標準中的不完整類型
- 20. 是否有完整的MIME類型/頭文件列表?
- 21. 變量有不完整的類型'QPrinter'
- 22. yacc - 字段有不完整的類型
- 23. 錯誤:字段有不完整類型
- 24. 字段有不完整的類型C++
- 25. 場具有不完整的類型
- 26. 場「permission_type具有不完整的類型
- 27. 不完整類型的靜態字段 - 是否合法?
- 28. QTimer不完整類型
- 29. wxWidgets wxSpinCtrl不完整類型
- 30. Akka完整參數類型
正向聲明中的struct –
'void'是一個不完整的類型,無法完成。 –