使用的typedef如果我想聲明typedef
某種類型,我會去像這樣的語法,在這個例子:函數指針用C
typedef int INT
但是,當我想創造一個typedef
一個功能,我期待下面的語法是一個:
typedef void (*)(int, char) myfunc;
不是正確的一句是:
typedef void (*myfunc)(int, char);
那麼爲什麼第一個不正確?
使用的typedef如果我想聲明typedef
某種類型,我會去像這樣的語法,在這個例子:函數指針用C
typedef int INT
但是,當我想創造一個typedef
一個功能,我期待下面的語法是一個:
typedef void (*)(int, char) myfunc;
不是正確的一句是:
typedef void (*myfunc)(int, char);
那麼爲什麼第一個不正確?
A typedef
看起來完全像「正常」聲明。如果你聲明一個函數指針,它應該是這樣的:
void (*myfunc)(int, char);
因此,typedef
看起來是一樣的,與申報的標識符不參考類型的對象,唯一的區別,但是到了類型別名代替:
typedef void (*myfunc)(int, char);
至於「?爲什麼」 - 好了,因爲語言就是這樣設計的,但我想,一旦你瞭解它瓦特orks,它可以說是最簡單的方法,不要爲typedef
聲明引入不同的語法。這種設計遵循最少意外的原則,以不同的方式處理聲明將不必要的複雜。
因此,規則不是如下: 如果我有一個稱爲類型的類型,我可以使用'typedef類型名稱'創建一個名爲Name的typedef。 但是,規則是: 如果有這樣的聲明_declarator name_我可以通過關鍵字'typedef'轉發delcarator的名稱爲typedef。 –
@BiteBytes是的。 PeterJ的答案顯示了這適用於typedef'ing數組類型。 –
@BiteBytes:在句法上,'typedef'被視爲像'auto'或'extern'這樣的存儲類說明符,即使它具有不同的含義。所以是的,'typedef'的形式是一個正則聲明的形式,只是在其前面加了'typedef'關鍵字。 –
的基本方法來創建函數指針是void (*myfunc)(int, char);
所以要創建一個新的類型,它是一個函數指針作爲參數是 typedef void (*myfunc)(int, char);
,這就是爲什麼它返回void
,並得到int
和char
第一個是不正確的
在function pointer
之前不需要添加(*)
。
但是,當我想創造一個函數的類型定義,我期待 以下語法是一個:
typedef void (*)(int, char) myfunc;
當然你也可以寫你自己的編譯器你自己的語言。
但是C語法就是這樣。
下面是另一個例子:
typedef char foo[10];
看看[這個答案](https://stackoverflow.com/a/30345939/4265352)。它解釋瞭如何讀取C變量和類型聲明。 – axiac
typedef是無關緊要的。這就是你如何定義類型的變量。 – StoryTeller
@StoryTeller這不是一個完全重複的,它會詢問函數指針的聲明語法,而不是* typedef聲明。 –