[英]Function inside function in C
有人請詳細說明這些錯誤: -
void main()
{
int a=5, b=60, func();
printf("\nI am in main-1");
int func(){
printf("\nI am in funct");
return 1;
}
func();
printf("\nI am in main-2");
}
我得到的錯誤是:
我認為C允許嵌套類,因為以下代碼工作正常:
void outerfunc()
{
int func()
{
printf("\nI am in funct");
return 1;
}
func();
}
void main()
{
printf("\nI am in main-1");
outerfunc();
printf("\nI am in main-2");
}
您正在使用GNU C編譯器的擴展,它允許嵌套函數的聲明。 該錯誤來自於以下事實:GCC擴展下的嵌套函數的前向聲明需要添加auto
關鍵字。
int a=20,b=11;
int main()
{
int a=5, b=60;
auto int func(); // <--------- here
func(); // <- call it
printf("\nI am in main-1");
int func(){
printf("\nI am in funct");
return 1;
}
printf("\nI am in main-2");
return 0;
}
有關詳細信息,請參閱http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html 。
ANSI C不允許嵌套函數定義。 你的main函數應該返回int 。
標准C / C ++中不允許嵌套函數 。 如果你想稍后定義它,只需(向前)聲明main()
的func()
。
int main()
{
int a=5, b=60, func();
printf("\nI am in main-1");
int func(); // <---- declare inside main()
printf("\nI am in main-2");
}
int func(){ // <---- define later
printf("\nI am in funct");
return 1;
}
您正在采取的是GCC特定功能 ,它從未成為“適當的”C功能(即ANSI C規范的一部分)。
如果你想使用這個功能,那么我相信你所追求的是:
#include <stdio.h>
int a = 20, b = 11;
int main( int argc, char* argv[] )
{
int a = 5, b = 60;
auto int func( void );
printf("\nI am in main-1");
int func( void )
{
printf("\nI am in funct");
return 1;
}
printf("\nI am in main-2");
return func();
}
您以前的代碼不起作用的原因是嵌套函數沒有鏈接:
嵌套函數始終沒有鏈接。 用extern或static聲明一個是錯誤的。 如果需要在定義之前聲明嵌套函數,請使用auto(這對函數聲明來說毫無意義)。
以上示例因此使用auto
關鍵字。 我也冒昧地修復你的main
聲明:-)
嵌套函數是特定於gcc的擴展 ; 它們並非得到普遍支持。
關於main
的警告, main
的標准簽名是
int main(void)
int main(int argc, char **argv) // or equivalent
實現可以提供額外的簽名(一些編譯器允許環境變量的第三個參數),但這些附加簽名必須由實現記錄; IOW, void main()
只適用於有效的簽名main
,如果你的編譯器的文檔明確地列出了它本身。
如有疑問,請使用上述標准簽名之一。
func
。 如果刪除int
變量聲明中的func()
聲明,它就有效。
C ++不允許將函數包含在其他函數中。
試圖在VS 2010中這樣做:
'funct':本地函數定義是非法的
您需要移動該函數並將其聲明移出main。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.