疑惑:C语言不允许函数嵌套定义,main函数里面可以么?

mifeixq 2008-08-19 10:55:49
个人理解main也是函数,所以里面也不允许嵌套定义,但是测试确可以

#include <stdio.h>

int main(void)
{
int i;
void f(int i){printf("%d\n",i);}
f(3);
printf("%p\n", &i); //测试SS位置
return 0;
}

这个应该怎么理解呢
~
...全文
3777 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
l676331991 2012-08-20
  • 打赏
  • 举报
回复
C99的特性。
就和Java有Java7,Java8一样。
VC6.0都是什么时代的编译器,大家查一查发布时间,用TC测不是更直接,简直无语?
C语言也在不断更新版本,扩充特性。
lidorje 2011-11-07
  • 打赏
  • 举报
回复
是编译器决定的吧。。
yitugang 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mifeixq 的回复:]

ubuntu cc/gcc
[/Quote]
你的正确答案被淹没在一片口水中。
yeliguo12345 2008-08-21
  • 打赏
  • 举报
回复
支持14楼
synix521 2008-08-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yeliguo12345 的回复:]
支持14楼
[/Quote]
九十度黑 2008-08-21
  • 打赏
  • 举报
回复
估计你用的DEV C++吧?这个和编译器也有关系。
seufl 2008-08-21
  • 打赏
  • 举报
回复
不是标准,是编译器特性
thaij 2008-08-21
  • 打赏
  • 举报
回复
main函数是个特殊的函数,它是程序的入口,当然以嵌套别的function.
在别的函数里是不行的。。。。
mhyx_2008 2008-08-21
  • 打赏
  • 举报
回复
抱歉,我确实没有说清楚。不好意思了...
8楼和14楼说的对。
iamliadai 2008-08-20
  • 打赏
  • 举报
回复
再说一遍 这是gcc世界的扩展语法采用的。
guzhilei1986 2008-08-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hqin6 的回复:]
没意义的问题嘛!
[/Quote]
太乙 2008-08-20
  • 打赏
  • 举报
回复
没意义的问题嘛!
lsd1025 2008-08-20
  • 打赏
  • 举报
回复
VC6.0通不过!
mifeixq 2008-08-20
  • 打赏
  • 举报
回复
本来以前一直认为不应该可以的,不过有人问我,我用linux尝试一下,结果竟然可以……

学C我记得最清楚的一句就是函数不能嵌套定义……

main()不也是函数嘛而且5楼说的也有点问题 main()内定义的函数只能在main()内调用,并不具有文件

作用域

测试代码:
#include <stdio.h>

void outofmain()
{
printf("out of main\n");
}
void test();
int main(void)
{
void inmain()
{
outofmain();
printf("in main\n");
}
inmain();
test();
return 0;

}

void test()
{
inmain();


ERROR: in function test ---undefined reference to inmain
lunarfan 2008-08-20
  • 打赏
  • 举报
回复
标准里是不允许的。
dev c++里的编译不通过a function-definition is not allowed here before '{' token
jinjin666 2008-08-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hqin6 的回复:]
没意义的问题嘛!
[/Quote]
iamliadai 2008-08-19
  • 打赏
  • 举报
回复
gcc扩展语法

加上 -std=c99 -Wall -pedantic 参数,你就可以编出最标准的程序了
mifeixq 2008-08-19
  • 打赏
  • 举报
回复
ubuntu cc/gcc
coverallwangp 2008-08-19
  • 打赏
  • 举报
回复
vc6里面编译不过,lz用的什么编译器?
iamliadai 2008-08-19
  • 打赏
  • 举报
回复 1
扯鸡巴蛋吧,误导大众[Quote=引用 4 楼 mhyx_2008 的回复:]
main()函数是个特殊的函数,它里边可以定义函数。
你不是也没有看见它被调用吗?但它却被执行了,我们只能看到它的定义,它本身是程序的入口。

在main()函数里定义的函数只能在本文件里调用。
在main()函数外定义的函数如果没有加static限定,就可以被外部文件调用。
[/Quote]
加载更多回复(2)

70,011

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧