答案是否定的!为什么呢?
一、在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函数。
上一篇:单片机A/D采样的原理
下一篇:CPU对外设IO端口物理地址的编程方式
推荐阅读最新更新时间:2024-03-16 16:19