c语言程序执行不了,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函数。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值