main 函数是 C 语言程序的入口函数,可以放在整个源文件的最前面,也可以放在其他自定义函数的后面,核心要求是它必须定义在源文件的全局作用域,不能写在别的函数内部,这个是考试高频选择题考点,很多同学误以为 main 必须写在最顶部,其实不是,如果 main 写在自定义函数后面,只需要提前写好函数声明就可以正常编译运行。之所以有这个规则,是因为 C 编译器是从上往下扫描代码,如果 main 在后面,里面调用的函数没有提前声明,编译器就会报隐式声明错误。学习的时候第一步记住核心限制,不能嵌套在其他函数里面,第二步掌握两种写法,main 在前或者 main 在后加声明,第三步区分多文件工程,main 所在的源文件可以是任意一个.c 文件,但是整个程序有且只能有一个 main 函数。综合来看 main 函数放在全局作用域内,源文件靠前或者靠后都可以,不能放在函数内部,整个工程只能存在唯一 main 入口。
位置情况对照表
| 放置位置 | 是否可行 | 补充说明 |
|---|---|---|
| 源文件最开头 | 可以 | 最常见写法,main 写在所有自定义函数前面 |
| 自定义函数之后 | 可以 | 需要提前写被调用函数的声明,否则编译报错 |
| 其他函数内部嵌套 | 不可以 | main 不能嵌套定义,属于语法错误 |
| 多文件工程任意一个.c 文件 | 可以 | 但是整个项目只能有一个 main 函数 |
两种写法示例
第一种 main 放在最前面
include
void test(){}
int main()
{
test();
return 0;
}
第二种 main 放在后面,提前声明函数
include
void test(); //函数声明
int main()
{
test();
return 0;
}
void test(){}
重点考点说明
第一,main 函数本身也是普通全局函数,只是操作系统会把它作为程序启动入口,语法层面它依然属于全局作用域函数,不允许嵌套在 if for while 或者别的自定义函数里面。
第二,多文件项目,如果两个.c 文件都写了 main 函数,链接阶段会报错,提示 multiple definition of main,也就是 main 重复定义,这是经典链接错误。
第三,main 函数标准写法一般是 int main (void) 或者 int main (int argc,char argv []),执行结束一般搭配 return 0 返回状态码。
易混知识点
有些同学会混淆,函数声明和函数定义,main 放在后面的时候,不是必须把整个函数写在 main 前面,只需要一行声明就够,完整函数体依然可以放在 main 之后。
【常见问题】
问题 1 main 函数的位置可以放在哪里,main 可以写在子函数里面吗
回答 1 main 函数的位置可以放在哪里,main 不能嵌套在其他函数内部,必须是全局作用域,写在别的函数里面属于语法错误。
问题 2 main 函数的位置可以放在哪里,main 放在自定义函数后面为什么报错
回答 2 main 函数的位置可以放在哪里,因为编译器从上向下编译,没有提前函数声明,会出现隐式声明报错,补充函数声明即可解决。
问题 3 main 函数的位置可以放在哪里,多文件工程 main 可以随便放吗
回答 3 main 函数的位置可以放在哪里,main 可以放在任意一个.c 源文件,但是整个工程只能有一个 main,多个文件都写 main 会链接报错。
问题 4 main 函数的位置可以放在哪里,main 必须是程序第一个函数吗
回答 4 main 函数的位置可以放在哪里,不是必须第一个,只是入门教材经常把 main 写在最前面,属于习惯写法,不是强制语法要求。
【免责申明】
本文 main 函数的位置可以放在哪里属于 C 语言基础考点讲解,不同编译器扩展特性略有差异,标准 C 语言考试以 C 标准语法为准。


