在main函数之前为什么不能调用函数???

zcphoenix 2010-04-14 05:23:14
#include <stdio.h>

printf("before main!\n");

int main()
{
return 0;
}

这样为什么编译不过?编译器是怎么处理的?
谢谢!
...全文
957 53 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
IMSIB 2010-04-15
  • 打赏
  • 举报
回复
待学习。。。。。
barbarian110 2010-04-15
  • 打赏
  • 举报
回复
哦哦哦哦哦哦
FoxMessire 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lin98666lin 的回复:]

主函数为入口函数 程序的翻译从主函数开始进行 主函数之前有预编译

入口函数开始的时候才是程序的进行过程,没有进入程序 怎么调用函数
[/Quote]

就是这样的
aleyn 2010-04-15
  • 打赏
  • 举报
回复
从中学到了很多,呵呵
soulzbg 2010-04-15
  • 打赏
  • 举报
回复
main()是老大啊,相当于皇上,没老大的指令下边的太监哪敢随便传旨啊?那是要杀头的!哈哈哈。除非你请的动太上皇啊!当然前提是太上皇得活着!哈哈
zcphoenix 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 49 楼 hpsmouse 的回复:]

引用 47 楼 zcphoenix 的回复:

首先感谢各位热心帮助呵!!
这个问题我可能没有说清楚,main是入口这个我知道,但是大家应该也都知道,其实,程序在进入main之前是执行了很多东西的(调用各种初始化的函数,比如全局对象的构造函数等)。
其实,我是想知道:把一个函数调用写在main前面,为什么不可以?从编译、链接的机制,这个应该都没有问题,最多程序运行的时候,这个函数调用不在……
[/Quote]

谢谢各位!
zcphoenix 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 49 楼 hpsmouse 的回复:]
[/Quote]

说的没错,也许是我理解上的误区!
kinger425 2010-04-15
  • 打赏
  • 举报
回复
main函数才是入口地址,其它的函数通过main调用。
匚匚 2010-04-15
  • 打赏
  • 举报
回复
主函数为入口函数 程序的翻译从主函数开始进行 主函数之前有预编译

入口函数开始的时候才是程序的进行过程,没有进入程序 怎么调用函数
2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 zcphoenix 的回复:]

首先感谢各位热心帮助呵!!
这个问题我可能没有说清楚,main是入口这个我知道,但是大家应该也都知道,其实,程序在进入main之前是执行了很多东西的(调用各种初始化的函数,比如全局对象的构造函数等)。
其实,我是想知道:把一个函数调用写在main前面,为什么不可以?从编译、链接的机制,这个应该都没有问题,最多程序运行的时候,这个函数调用不在main函数里面,执行不到而已吧。
难道C/C++……
[/Quote]
程序执行时,在进入 main 函数之前当然需要做很多事情。这里问题的关键是,在函数外部执行一个函数调用,在 C 语言里面,是没有定义的。

楼主可能习惯以这样一种方式理解 C 语言:一个文件被打开,然后从上到下执行。在许多解释型语言里面,的确是这样的,但是在 C 语言里面不是。C 以函数为程序构成的基本单位,这不仅体现在语法上,也体现在最终生成的程序上。一个个函数堆砌成一个 C 程序,这些函数甚至不需要放在一个文件中编译。在链接的时候,这些函数被包装到一起组成一个程序,而这个包装通常也没有明显的顺序。也就是说,函数是相对独立,各自编译的。在这样一个编译模型里面,你在函数外部写一个函数调用语句,根本什么都不是,编译器也无法知道这个语句应当怎么处理,因为它无法属于任何一个函数。
zcphoenix 2010-04-15
  • 打赏
  • 举报
回复
但是,为什么C++编译器就把这样一个函数调用在进入main函数之前先执行掉呢?
但是,为什么C++编译器就不能把这样一个函数调用在进入main函数之前先执行掉呢?
zcphoenix 2010-04-15
  • 打赏
  • 举报
回复
首先感谢各位热心帮助呵!!
这个问题我可能没有说清楚,main是入口这个我知道,但是大家应该也都知道,其实,程序在进入main之前是执行了很多东西的(调用各种初始化的函数,比如全局对象的构造函数等)。
其实,我是想知道:把一个函数调用写在main前面,为什么不可以?从编译、链接的机制,这个应该都没有问题,最多程序运行的时候,这个函数调用不在main函数里面,执行不到而已吧。
难道C/C++标准规定,觉得你这样写一个函数调用,根本对最终的程序没有意义,所以规定是编译错误吗?但是,为什么C++编译器就把这样一个函数调用在进入main函数之前先执行掉呢?

不知道说清楚没。。。
liutengfeigo 2010-04-15
  • 打赏
  • 举报
回复
编译器只认识 main
xt_xiaotian 2010-04-15
  • 打赏
  • 举报
回复
忽悠一下编译器就可以调用了,如下改写代码:
#include <stdio.h>

int nRet = printf("before main!\n");

int main()
{
return 0;
}

程序StartCode为了初始化全局变量nRet的值,只能调用printf函数,这样就可以了。
breezes2008 2010-04-15
  • 打赏
  • 举报
回复
似乎得从编译器的角度来理解,
tlx20093A 2010-04-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lin98666lin 的回复:]
主函数为入口函数 程序的翻译从主函数开始进行 主函数之前有预编译

入口函数开始的时候才是程序的进行过程,没有进入程序 怎么调用函数
[/Quote]

学习了。。。
jbz001 2010-04-14
  • 打赏
  • 举报
回复
这是规定,函数必须从main开始
tesling 2010-04-14
  • 打赏
  • 举报
回复
class A
{A(){printf("before main!\n");}}
A a;
这样就可以调用了。

main是C/C++的调用入口,这是ansi c/c++标准规定的。
具体的实现各个平台不太一样,在windows上其实是先调用WinMain,WinMain完成进程的初始化,全局变量的初始化,然后调用main.这个说起来简单,其实很复杂,比如要初始化标准输入输出等,在vc中是可以看到相关代码的。
dreamplanner 2010-04-14
  • 打赏
  • 举报
回复
main()函数属于入口函数,程序从这里开始执行。printf()是系统提供给的接口,只有进入程序才能调用系统。
wIMDMC 2010-04-14
  • 打赏
  • 举报
回复
上面这一堆人在回答什么?没有一个回答在点上。
请问"规定"从main调用,这和C语言有鸟关系?
windows的PE要求一个代码入口点,你完全可以把main改成你想要的任何名字。
加载更多回复(31)

70,023

社区成员

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

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