c语言程序总是从main函数开始执行
① 2、c语言程序总是从文件中的第一个函数开始执行。(
不是的,都是从main主函数开始执行的,其他的函数都是需要主函数调用的
② C程序必须从main()函数开始执行
这是在面试中被问到的一个问题,回答了是。这问题第一感觉答案就是否定的,一时也没想出来理由只能回答了是。当时太紧张了,其实回想一下汇编语言就该想到程序的入口地址是可以指定的,c语言编译器默认以main作为入口地址。
网上查阅后,发现了 __attribute__ 这个关键字,它可以设置函数属性,变量属性,类型属性。
1、前言
最近看到一份代码,看到一个函数前面用__attribute__((destructor))修饰,当时感觉有点怪怪的,搜了整个程序,也没发现哪个地方调用这个函数。于是从字面意思猜想,该函数会在程序结束后自动调用,与C++中的析构函数类似。第一次接触GNU下的attribute,总结一下。
2、__attribute__介绍
__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__前后都有两个下划线,并且后面会紧跟一对原括号,括号里面是相应的__attribute__参数
__attribute__语法格式为:__attribute__ ( ( attribute-list ) )
若函数被设定为constructor属性,则该函数会在main()函数执行之前被自动的执行。类似的,若函数被设定为destructor属性,则该函数会在main()函数执行之后或者exit()被调用后被自动的执行。例如下面的程序:
看下面的例子:
// gcc 编译器#include<stdio.h>__attribute__((constructor)) void before_main(){ printf("%s ",__FUNCTION__);}__attribute__((destructor)) void after_main(){ printf("%s ",__FUNCTION__);}int main(){ printf("%s ",__FUNCTION__); return 0;}
输出结果为:before_main
main
after_main
可以看到上面的程序并不是从main函数开始执行的。constructor 设置在main前面执行,destructor 设置在main之后执行。
③ C语言中总是从main函数开始执行,那执行好main函数后,是按照从上到下的顺序执行吗
进入程序后,就开始找main函数,可能是int main也可能是void main等。
然后可能遇到判断、循环、分支结构,然后按各自的语法分别执行,还可能遇到被调函数,到了那里就再去执行被调函数,执行完被调函数就再回来。
直到main函数全部执行完毕,直到最后一行结束,然后程序退出,运行界面出现perss any key to continue。
顺序就是从上到下。遇到一些结构遵循结构的语法进行,但是整体顺序就是由上到下。
④ 读“为什么c程序要从main函数开始执行”
不一定从main开始执行
main是编译器给的一个起始函数的名称而已。
比如
intWINAPIWinMain()
同样可以作为程序的起始函数
⑤ 2 一个C语言程序总是从()开始执行。
一个C语言程序总是从main()主函数开始执行。main是相对来说的,如同音学理论之主调于泛音,泛音即程序中的除main之外的其他函数,迎合人们的思考方式而生成的而非必定的模式。有主有次,执行起来条清缕析,既可将程序模块化又实现了一个闭合的整体。
main 函数在程序启动中完成对具有静态存储期的非局部对象的初始化之后被调用的。它是程序在有宿主 (hosted)环境(亦即有操作系统)中所指定的入口点。自立程序(启动加载器,操作系统内核,等等)的入口点则由实现定义的。
主函数的两个形参形式中的形参,允许从执行环境中传递任意的多字节字符串(它们通常被称为命令行参数),各个指针 argv[1] .. argv[argc-1] 指向每个这些字符串的第一个字符。argv[0] 是指向一个表示用于执行该程序自身的名字的空结尾多字节字符串(或者当执行环境不支持时,为空字符串 "")的开头字符的指针。
这些字符串是可以改动的,虽然对它们的改动并不会被传回给执行环境:比如可以用 std::strtok 来使用它们。由 argv 所指向的数组的大小至少为 argc+1,其最后一个元素 argv[argc] 保证为一个空指针。
(5)c语言程序总是从main函数开始执行扩展阅读
main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统)。
如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0; ,表示程序正常退出。不过,建议在main函数的最后加上return 语句,虽然没有这个必要,但这是一个好的习惯。
也就是说在最新的C语言标准中强制要求main函数的返回值类型为int,main函数的返回值是传递给操作系统,让操作系统判断程序的执行情况(是正常结束还是出现异常)。
⑥ c语言程序总是从main函数开始执行吗
是的。C语言总是从main函数开始执行的。不管你在main函数之前写了多少函数。都是从main开始。
⑦ C语言 C语言程序为什么总是从主函数开始执行
各种程序语言都得有一个入口,不然程序怎知道从哪开始运行呢。
C语言规定要从主函数(main)入口开始运行,编译器也会把main作为程序的入口进行编译。
⑧ 一个C程序的执行总是从该程序的main函数开始,在main函数最后结束。这句话正确吗
不会一定在main最后结束!但是从main开始没错!main执行一半到别的函数中结束进程,main的结尾就到不了了!
⑨ c程序总是从程序的第一条语句开始执行.对吗
c程序总是从程序的第一条语句开始执行的说法是错误的。
程序执行总是从main函数开始,如果有有其他函数,则完成对其他函数的调用后再返回到主函数,最后由main函数结束整个程序。main函数是程序在有宿主 (hosted)环境(亦即有操作系统)中所指定的入口点。
C程序最大的特点就是所有的程序都是用函数来装配的。main()称之为主函数,是所有程序运行的入口。其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用的是有参函数,则参数在调用时传递。
(9)c语言程序总是从main函数开始执行扩展阅读:
main()函数的应用形式:
1、函数没有参数,返回值为 int 类型。
int main( void ) { }
2、函数有两个参数,类型分别是 int 和 char**,返回值是 int 类型。
int main( int argc, char *argv[ ] ) { }
3、许多 C 的实现版本还支持非标准语法的定义方式:
int main( int argc, char *argv[ ], char *envp[ ] ) { }
函数返回值是 int,有 3 个参数:第一个是 int,另外两个是 char**。main函数都会把最终的执行状态以整数的方式传递给操作系统。返回值如果是 0 或 EXIT_SUCCESS,就表示程序执行过程一切顺利;任何非 0 的返回值,尤其是 EXIT_FAILURE,则表示程序执行时出现了某种问题。