c语言程序总是从main函数开始执行吗?

发布者:jingyun最新更新时间:2018-12-01 来源: eefocus关键字:c语言程序main函数  开始执行 手机看文章 扫描二维码
随时随地手机看文章

答案是否定的!为什么呢?


一、在Linux C中,使用attribute关键字,声明constructor和destructor,可以自定义程序入口点,不一定是在main函数开始执行。


#include

__attribute((constructor)) void before_main()  

{  

    printf("%s/n",__FUNCTION__);  

}   

__attribute((destructor)) void after_main()  

{  

    printf("%s/n",__FUNCTION__);  

}   

int main( int argc, char ** argv )  

{  

    printf("%s/n",__FUNCTION__);  

    return 0;  

}  


编译执行,结果为: 

before_main 

main 

after_main


二、在标准C中,编译器在编译的时候把你的程序开始执行的地址设为main函数的地址,汇编中可以自由的通过end伪指令制定。 


在vs中给你可以通过这么设置: 


项目->属性->配置属性->连接器->高级->入口点,改为你想做入口点的函数名


比如我有代码: 

void print() 

printf(“hello world\n”); 


你就可以点击编辑 填写 print就可以了,他就从print开始执行,而不是main制定入口地址是编译器做的,默认。


三、在单片机C中,C程序运行前都有一点汇编写的启动程序,里面对单片机进行的初始化,同时设置了C程序的入口为main函数。


关键字:c语言程序main函数  开始执行 引用地址:c语言程序总是从main函数开始执行吗?

上一篇:单片机A/D采样的原理
下一篇:CPU对外设IO端口物理地址的编程方式

推荐阅读最新更新时间:2024-03-16 16:19

C语言程序执行的第一条指令,并不在 main 函数
C语言程序执行的第一条指令,并不在 main 函数中。当我们生成一个C程序的可执行文件时,编译器总是在我们的代码前加一段固定的代码 crt0.o,它是编译器自带的一个文件。此段代码设置 C 程序的堆栈等,然后调用 main 函数。很可惜,在我们的裸板上,这段代码无法执行,所以我们得自己写一个。这段代码很简单,只有 3条指令。crt0.s 代码: 1 .text 2 .global _start 3 _start: 4 ldr sp, =1024*4 @设置堆栈,注意:不能大于 4k(栈区是向下增长的) @nand flash 中的代码在复位后会自动
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved