1

我有看起来像这样的玩具代码

#include <stdlib.h>                                                                         
#include <unistd.h>                                                                         
                                                                                         
int main()                                                                                  
{                                                                                           
    readlink("/proc/self/exe", "/my/path", 128);                                            
                                                                                         
    return EXIT_SUCCESS; 
}

当我编译时

icc main.c -o helloworld

一切都很好,但是当我尝试

icc -std=c99 main.c -o helloworld

或者

icc -std=c11 main.c -o helloworld

我收到错误消息

main.c(6): warning #266: function "readlink" declared implicitly

导致此错误的 c11(或 c99)标准是什么?

4

1 回答 1

2

定义包含在

#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K

从手册页中,readlink您需要首先设置正确的源定义。当前的 POSIX 定义可以设置为gcc -std=c11 -D_POSIX_C_SOURCE=200809L 如果您没有正确设置所有内容,您将寻找未定义的行为,因为sizeof(int)不再sizeof(void*)相同。隐式声明确实需要 64 位才能成为。

-std=gnu11翻转一切。如果您不必关心是否不小心使用了 gcc 扩展名,只需将其设置在您的 makefile 中就可以了。

于 2021-03-30T02:03:58.253 回答