经过多年的编程,我正在修课。我的导师没有使用POSIX机器,最近我因使用它而受到处罚 index
在作业中发挥作用。我做了一些研究,我注意到了 index
它是AT&T Unix的早期版本,符合POSIX标准,不属于C99标准。 我希望gcc帮我找到类似符号的用法。我正在使用gcc 4.2编译OSX(不 LLVM)
我的第一站研究涉及到我的string.h文件包装原型 index
在以下检查功能测试宏:
#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
经过一番挖掘,我发现了这个(在我的 /usr/include/sys/cdefs.h
):
/* STRICT Defining _POSIX_C_SOURCE or _XOPEN_SOURCE restricts the
* available APIs to exactly the set of APIs defined by the
* corresponding standard, based on the value defined.
*
* A correct, portable definition for _POSIX_C_SOURCE is 200112L.
* A correct, portable definition for _XOPEN_SOURCE is 600L.
*/
所以使用这个gcc命令:
gcc -D _POSIX_C_SOURCE=200112L -pedantic -Wall -std=c99 -o myExec ./mySource.c
一世 做 得到一个体面的警告:
warning: incompatible implicit declaration of built-in function ‘index’
这让我很困惑, 和 我想让程序也无法链接。它让我困惑的原因是,我读到了 在opengroup.org 定义该宏应该 暴露 POSIX符号,不隐藏它们。所以这是我的问题以简洁的形式:
我怎样才能使gcc 4.2(在OSX 10.6上)在一个环境中编译和链接我的程序 严格 C99用 没有其他符号 可用?
理想情况下,我想要 编译期间的警告和链接失败。我希望答案不涉及告诉gcc我 上午 编写POSIX代码时,我认为这与我想说的相反。我不明白的是什么?