我做include<stdlib.h>
,其中给出了qsort_r。我使用gcc -std=c99 -O3 myfun.c -o myfun
进行编译。
它编译,链接和运行良好。我不知道为什么我收到这个警告,这个警告的潜在风险是什么?
BTW,我的编译器是gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1)
答案 0 :(得分:4)
这样做是因为你使用-std=c99
,在c99中的stdlib.h中没有qsort_r函数。
使用-std=gnu99
使扩展程序可用,或在包含头文件之前将#define _GNU_SOURCE
添加到源文件中。
答案 1 :(得分:2)
qsort_r
。规范没有说明这一点。
默认情况下, GCC为C语言提供了一些扩展,这些扩展在极少数情况下与C标准冲突 1 。请参阅C语言系列的扩展。使用上面列出的-std选项将禁用这些与所选C标准版本冲突的扩展。您也可以使用-std = gnu89(对于具有GNU扩展的C89)或-std = gnu99(对于具有GNU扩展的C99)显式选择C语言的扩展版本。如果没有给出C语言方言选项,则默认为-std = gnu89;在C99支持完成后,在将来的某个版本中,这将更改为-std = gnu99。作为C99标准一部分的某些功能在C89模式下被接受为扩展。
<子> 1。重点是我的