[英]Can we modify function prototype inside function?
我在C中聲明如下:
void abcd(int , char);
void main()
{
extern void abcd(char);
abcd (q);
}
是否可以實現這樣的代碼? C將如何允許我們這樣編碼? 函數調用abcd()會將'q'作為char還是整數?
引用同一對象或函數的所有聲明都應具有兼容類型 ; 否則, 行為未定義 。
void abcd(int, char);
是一個外部聲明,表示abcd
將int
和char
作為參數。 它與extern void abcd(char);
不兼容extern void abcd(char);
,它說同一個函數現在只需要一個char
作為參數。
如果我正確讀取標准,這不是約束錯誤,因此編譯器甚至不需要為此生成警告 。 它仍然是破碎和錯誤的。
對不起,我忽略了C而不是C ++標簽(刪除了C ++的東西)。 我認為這應該在C中做:
void abcd_c(char x){};
void abcd_i(int x){};
int main(int argc, char *argv[])
{
#define abcd abcd_c
abcd('t');
abcd('e');
abcd('s');
abcd('t');
#undef abcd
#define abcd abcd_i
abcd(123);
#undef abcd
}
您只需使用#define/#undef
在部分代碼中選擇想要的行為
我相信在C中你不能這樣做。 實際上編譯器甚至都不會“哭”,因為這在語法上是正確的。 但另一方面,這是錯誤的,不會執行。 就個人而言,我非常關注編譯器接受的錯誤但會破壞執行。 一般來說,在這種情況下,您必須使用正確的參數,字符在main之上聲明此函數。 因為C會查找這個特定函數的聲明,但她找不到它。 在C ++中,它很容易,因為你可以重載函數,編譯器只能從參數類型中理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.