C / C ++中函数main()的地址

时间:2015-02-17 17:53:17

标签: c++ c pointers function-pointers

有没有办法在C或C ++中找到 main()的地址? 既然它本身就是一个函数,它会有自己的地址吗?

3 个答案:

答案 0 :(得分:13)

C

不确定。只需继续做下去。

#include <stdio.h>

int main(void)
{
   printf("%p\n", &main);
}

C ++

不允许带main的地址,因此,为了您的目的,没有一个地址:

  

[C++11: 3.6.1/3]:函数main不得在程序中使用。 [..]

但是,在GCC中,您可以采用与C相同的方法,通过编译器扩展:

#include <iostream>

int main()
{
   std::cout << (void*)&main << '\n';
}

您将收到不符合规定的警告。

答案 1 :(得分:4)

我不能100%确定问题是来自使用C / ++的程序,还是检索用C / C ++创建的main()函数的地址(意思是从命令行) 。

由于您似乎已经收到了关于如何从程序中获取地址的几个好答案,我想我也提到您也可以从nm获取此信息。< / p>

nm program|grep main

答案 2 :(得分:0)

如果对于任何系统你都找不到main的地址..把一个函数调用foo()作为main中的唯一语句,主要返回它返回的内容并使用foo而不是main的地址。

请注意,即使没有静态/全局变量,调用main也不一定会重新启动代码。编译器在实际调用main之前生成启动代码。

如果你想在这次调用main之前断点,请写下:

static int i=foo();
在早期的数据初始化步骤中将调用

和foo。