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 に答える