des*_*ado 2 c pragma c-preprocessor preprocessor-directive
必须从main开始执行程序,还是可以修改起始地址?
#include <stdio.h>
void fun();
#pragma startup fun
int main()
{
printf("in main");
return 0;
}
void fun()
{
printf("in fun");
}
Run Code Online (Sandbox Code Playgroud)
此程序in fun之前打印in main.
"#pragma"命令在ANSI标准中指定,具有任意实现定义的效果.在GNU C预处理器中,'#pragma'首先尝试运行游戏'流氓'; 如果失败,它会尝试运行游戏'hack'; 如果失败了,它会尝试运行显示河内塔的GNU Emacs; 如果失败,则会报告致命错误.无论如何,预处理不会继续.
- Richard M. Stallman,GNU C预处理器,版本1.34
程序执行从启动代码或"运行时"开始.这通常是一些称为_start或类似的汇编程序,位于(在Unix机器上)crt0.o编译器包附带的文件中.它执行运行C可执行文件所需的设置(例如,设置stdin,stdout以及......用于C++ stderr的向量atexit(),它还包括初始化全局对象,即运行它们的构造函数).只有这样才能控制跳转到main().
由于我的答案开头的引用如此雄辩,所以#pragma完全取决于你的编译器.检查其文档.(我猜你的pragma startup- #顺便说一句应该在前面加上- 告诉运行时先调用fun()......)
| 归档时间: |
|
| 查看次数: |
12479 次 |
| 最近记录: |