为啥 gcc 给出警告:函数 qsort_r 的隐式声明?

Posted

技术标签:

【中文标题】为啥 gcc 给出警告:函数 qsort_r 的隐式声明?【英文标题】:Why gcc gives warning: implicit declaration of function qsort_r?为什么 gcc 给出警告:函数 qsort_r 的隐式声明? 【发布时间】:2013-12-19 15:05:48 【问题描述】:

我在include<stdlib.h> 给出了 qsort_r。我使用gcc -std=c99 -O3 myfun.c -o myfun 编译。

它编译、链接和运行良好。我不知道为什么会收到此警告以及此警告的潜在风险是什么?

顺便说一句,我的编译器是gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1)

【问题讨论】:

【参考方案1】:

这样做是因为你使用了 -std=c99 ,c99 的 stdlib.h 中没有 qsort_r 函数。

使用-std=gnu99 使扩展可用,或在包含头文件之前将#define _GNU_SOURCE 添加到源文件。

【讨论】:

【参考方案2】:

qsort_r 不受 C99 支持。规范对此只字未提。

Language Standards Supported by GCC:

默认情况下,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。重点是我的

【讨论】:

以上是关于为啥 gcc 给出警告:函数 qsort_r 的隐式声明?的主要内容,如果未能解决你的问题,请参考以下文章

警告:函数的隐式声明

警告:函数的隐式声明

为啥使用字符串初始化没有 const 的数组时 gcc 不给出警告?

mkstemp 函数的隐式声明

gcc 警告:已使用但未定义的函数

为啥写作主要;在 C 中给出一个段错误