c - 是否可以在c中重新定义main函数

标签 c gcc program-entry-point

我看到了重新定义函数 here在c中使用宏。所以我很感兴趣是否可以重新定义 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

所以我想知道为什么它不起作用?当我对 mallocfree 函数使用相同的技术时,它工作得很好。那有什么问题呢?

为什么我想做这样的事情?我想在执行 main 函数之前做一些代码。这样可以吗?如果没有,还有其他方法吗?

附注:抱歉我没有提到问题。我在 Ubuntu 操作系统中使用 gcc。 如果您不赞成投票,请在评论中说明理由。您的意见对我的进一步发展非常有用。

最佳答案

如果你想改变你的程序的入口点,你不需要玩定义。您可以为此使用链接器的 -e 选项:

gcc -Wl,-e,__main ...

请注意额外的下划线。根据某些选项,符号名称可能不同。

关于c - 是否可以在c中重新定义main函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22170515/

相关文章:

java - 如何将Java主类变成构造函数?

C: 变量的值在没有重新赋值的情况下改变

c - 在将它与两个函数一起使用时丢失全局变量的值,其中一个是递归的

c - 如何从 C 语言安装的文本文件中获取变量

c - 将 printf() 作为参数传递

Java-在类中找不到 Main 方法

C++ 对主要参数的引用

c - 字符串打印

c++ - g++ 找不到共享库

c - gcc 由于无法识别 __TIMESTAMP__ 和其他一些已定义的构建变量而生成编译时错误