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

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

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

#include <stdio.h>   
__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函数。

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值