【发布时间】:2014-04-05 21:40:34
【问题描述】:
我看到在 c 中使用宏重新定义函数 here。所以我很感兴趣是否可以重新定义 main 函数?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
printf("Original main function\n");
return 0;
}
int _main(int argc, char **argv)
{
printf("New Original main function\n");
return main(argc, argv);
}
#ifdef DEBUG
#define main(argc, argv) _main(argc, argv)
#endif
代码编译没有任何问题,但我得到了:
Original main function
所以我想知道为什么它不起作用?当我对malloc 和free 函数使用相同的技术时,它可以完美运行。那么有什么问题呢?
为什么我想做这样的事情?我想在执行main 函数之前做一些代码。有可能以这种方式吗?如果没有,还有其他方法吗?
P.S.:对不起,我没有提到问题。我在 Ubuntu 操作系统中使用 gcc。 如果您不赞成投票,请在 cmets 中说明理由。你们的cmets对我以后的发展很有用。
【问题讨论】:
-
我真的不明白你想在这里实现什么。如果您想在 main 之前执行代码,那么在 main 中首先执行此操作然后启动 main 程序有什么功能区别?如果真的要在main之前执行代码,必须修改crt0启动代码。在 C++ 中,您可以通过使用静态变量来实现。在调用 main 之前进行初始化。在 C 中这是不可能的。
-
查看这个问题了解 main 的工作原理stackoverflow.com/q/19419569/2549281
-
@Devolus 我想在主函数之前使用 atexit() 注册回调函数。
-
宏不被执行,它们被预处理。基本上,它们只是编译器在编译程序时完成的文本替换。