什麼是不完整的類型和對象類型 in C?另外,你能否提供一些例子?C中的Incomplete Type和Object Type的定義是什麼?
ANSI C99在各個地方都提到了這兩種類型的類別,儘管我發現很難理解它們每個意思的含義(沒有明確定義它們的段落/句子)。
什麼是不完整的類型和對象類型 in C?另外,你能否提供一些例子?C中的Incomplete Type和Object Type的定義是什麼?
ANSI C99在各個地方都提到了這兩種類型的類別,儘管我發現很難理解它們每個意思的含義(沒有明確定義它們的段落/句子)。
讓我們去online C standard (draft n1256):
6.2.5類型
1被確定存儲在對象或函數的返回值的含義用於訪問它的表達式的 類型。 (聲明爲對象的標識符是最簡單的表達式;類型在標識符的聲明中指定。)類型分區爲 對象類型(完全描述對象的類型), 函數類型(描述類型函數)和 不完整類型(描述對象的類型,但缺少確定其大小所需的信息)。 不完全類型的
例子:
struct f; // introduces struct f tag, but no struct definition
int a[]; // introduces a as an array but with no defined size
不能創建不完全類型的實例,但你可以創建的指針和不完全類型的typedef名稱:
struct f *foo;
typedef struct f Ftype;
要關閉不完整的結構類型轉換爲對象類型,我們必須定義結構:
struct f
{
int x;
char *y;
};
謝謝約翰,非常明確的答案! :) – 2010-10-12 19:04:42
我知道的類型有:
下面是一個例子(也鍵盤:http://codepad.org/bzovTRmz)
#include <stddef.h>
int main(void) {
int i;
struct incomplete *p1;
int *p2;
int (*p3)(void);
p1 = NULL; /* p1 is a pointer to a incomplete type */
p2 = &i; /* p2 is a pointer to an object */
p3 = main; /* p3 is a pointer to a function */
return 0;
}
0123可以在另一個翻譯單元中定義(具有確定的大小)。這個翻譯單元只需要指針雖然
感謝您的答案pmg! – 2010-10-12 19:04:58
C99使用_reference type_?真? (如果您有C99規範可用,6.2.5深入討論了C類型系統;它以三個頂級類型類別的定義開始:對象類型,函數類型和不完整類型) – 2010-10-12 18:20:36
我的錯誤是,噸。我會從問題中刪除它。謝謝你的收穫! – 2010-10-12 18:22:18
這就是我所指的部分,但沒有發佈在我的問題中。 ;)6.2.5提到了那些最高級別的類別,但似乎並沒有說「內容是什麼」。函數類型很容易理解,但我仍然對不完整類型和對象類型之間的差異感到困惑。對於不完整類型,「描述對象的類型,但缺乏確定其大小所需的信息」 - 缺少確定其大小所需信息的示例是什麼? – 2010-10-12 18:27:52