一尘不染

如何打印功能的地址?

linux

gcc使用以下代码编译以下示例-Wall -pedantic

#include <stdio.h>

int main(void)
{
  printf("main: %p\n", main); /* line 5 */
  printf("main: %p\n", (void*) main); /* line 6 */

  return 0;
}

我得到:

main.c:5: warning: format ‘%p’ expects type ‘void *’, but argument 2 has type ‘int (*)()’
main.c:6: warning: ISO C forbids conversion of function pointer to object pointer type

第5行像第6行一样更改了代码。

在打印函数的地址时,我缺少删除警告的内容吗?


阅读 234

收藏
2020-06-02

共1个答案

一尘不染

本质上,这是打印函数指针的唯一可移植方式。

size_t i;
int (*ptr_to_main)() = main;
for (i=0; i<sizeof ptr_to_main; i++)
    printf("%.2x", ((unsigned char *)&ptr_to_main)[i]);
putchar('\n');
2020-06-02