[英]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.