int func(struct x{int a;}y);
int main()
{
}
上面的代碼給出了在C++
錯誤以下錯誤:類型可能無法在參數類型被定義
而在C其運行細跟警告,意味着在C類型可被限定在參數列表
因此下面的代碼應該給redefination錯誤在C類型定義
int func(int a,int a);
int main()
{
}
的疑問:爲什麼上面的代碼在C++中
錯誤給錯誤:多參數命名爲
int func(struct x{int a;}y);
int main()
{
}
上面的代碼給出了在C++
錯誤以下錯誤:類型可能無法在參數類型被定義
而在C其運行細跟警告,意味着在C類型可被限定在參數列表
因此下面的代碼應該給redefination錯誤在C類型定義
int func(int a,int a);
int main()
{
}
的疑問:爲什麼上面的代碼在C++中
錯誤給錯誤:多參數命名爲
由於參數名稱在其參數列表中的範圍內,因此參數具有相同的名稱兩次是錯誤的。我認爲很明顯,有兩個參數具有相同的名稱是沒有用的?
// Explain why you want to have them say "int a, int a"
int func(int a, int b);
在C中,允許在參數類型列表中定義結構類型的內容。標籤標識符具有原型範圍或塊範圍(當函數是一個定義時)並且沒有鏈接,這意味着它不同於在原型之外聲明的結構或塊,其標籤標識符具有文件範圍。你不能從它的內部遞歸調用這樣的函數。
int func(struct x{int a;} y) {
func(y); // fine (the call, not the endless recursion)
}
注意,這僅適用於該func
中的定義相同翻譯單位中發生的呼叫。如果另一個編譯單元聲明的功能和結構如下,這完全是罰款,該函數將可以調用(您需要確保上述聲明不可見,否則會發生衝突,因爲兩個點的x
表示不同類型)。
struct x {int a;};
int func(struct x y);
在這兩個翻譯單元,即使x
是不同類型的(因爲它們是不同的翻譯單元),該類型是兼容,這是對參數類型唯一重要的東西。
您不僅可以定義在參數列表中的結構,而且在功能
struct x {int a;} func(void) {
return (struct x){ 0 };
}
這也只適用於C的返回類型部分沒有這樣的事情被允許在C++中。
我不確定你在做什麼。但是,如果func
需要採取struct x
類型,然後的參數的函數 -
struct x
{
// ....
};
int func(struct x obj) ;
int func(int a, int b) ; // Notice that the second parameter is changed
// from a to b. Both the parameters cannot have
// the same name
好吧,你正試圖定義一個結構作爲函數參數的一部分。如果存在這種可能性,那麼該定義將侷限於該功能。在調用該函數時如何傳遞參數,因爲結構x
在除func
之外的其他地方都不可見。
我不確定。但如果你問爲什麼這樣的錯誤,而在此之前它是關於在第一種情況下C++中的語法這是典型的類型定義,這是不是在C不允許類型定義
...還是我理解這個問題
懷疑這不是至少兩個不同的問題嗎? – 2011-04-02 22:49:09