C中函数内部的函数
任何人请详细说明这些错误:-C中函数内部的函数,c,gcc,nested-function,C,Gcc,Nested Function,任何人请详细说明这些错误:- 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"); } 我得到的错误是: 在函数“main”中: 第8行:错误:“func”的静态
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");
}
我得到的错误是:
- 在函数“main”中:
- 第8行:错误:“func”的静态声明遵循非静态 声明
- 第4行:错误:“func”的上一个声明在这里
- 第3行:警告:“main”的返回类型不是“int”
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");
}
ANSI C不允许嵌套函数定义。主函数应该返回int
func
标准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;
}
intmain()
{
int a=5,b=60,func();
printf(“\nI am in main-1”);
int func();//如果在int
变量声明中删除func()
的声明,则它可以工作。您所考虑的是a,它从来不是“正确的”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();
}
#包括
INTA=20,b=11;
int main(int argc,char*argv[])
{
INTA=5,b=60;
自动整型函数(无效);
printf(“\nI am in main-1”);
int func(void)
{
printf(“\n我在功能中”);
返回1;
}
printf(“\nI am in main-2”);
返回func();
}
以前的代码不起作用的原因是嵌套函数没有链接:
嵌套函数始终没有链接。使用extern或static声明一个链接是错误的。如果需要在定义嵌套函数之前声明该函数,请使用auto(否则对函数声明没有意义)
上面的示例使用了auto
关键字。我还擅自修复了main
声明:-)C++不允许函数包含在其他函数中
在VS 2010中尝试这样做会带来:
'funct':本地函数定义是非法的
您需要将该函数及其声明移到main之外。您使用的是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;
}
inta=20,b=11;
int main()
{
INTA=5,b=60;
auto int func();//嵌套函数是特定于gcc的;它们不受普遍支持
关于main
的警告,main的标准签名是
int main(void)
int main(int argc, char **argv) // or equivalent
一个实现可以提供额外的签名(一些编译器允许环境变量使用第三个参数),但是这些额外的签名必须由实现记录下来如果编译器文档明确列出了main
,则它仅是main的有效签名
如有疑问,请使用上述标准签名之一。void main
arrrrrrrgggggghhhhhh!另外,main()
返回C中的int
,这表明你没有在读一本书,这是一本好书。权威的C图书指南和列表
-@pmg:我总是想知道为什么人们对void main()如此烦恼
。C标准并没有禁止它。@OP-我认为C允许嵌套类,因为下面的代码运行良好
-别想,开始阅读buddy:-)-(至少作为C的GCC“扩展”)显然(从错误消息中可以看出),他使用的是gcc,它实际上有嵌套函数!@justinok,更准确地说,是ANSIC@Oli很公平,但海报上写的是“C”,而不是“ANSI C”。@Oli:OP没有说他使用ANSI-C