我最近意识到我的Mac上的“gcc”和“clang”(来自终端)正在Xcode目录中搜索简单的包含文件,例如< stdarg.h>。
我发现当一些简单的有效程序(在gcc / clang下)无法用tcc(Tiny C)编译时因为< stdarg.h>在/ usr / include下找不到。
有些搜索显示gcc和clang表现得好像有暗示:
-I /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include
并且,确实stdarg.h位于该目录下。 (顺便说一下,我的ENV变量中没有任何东西有这样的路径。)
我提供了tcc的路径,我的程序仍然没有编译,因为在Xcode的stdint.h中有趣的行上弹出了一个错误
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin /../ lib / clang / 7.0.2 / include / stdint.h具有以下内容:
typedef __intn_t(__INTPTR_WIDTH__) intptr_t;
(和“__INTPTR_WIDTH__”显然是由编译器在-m64下隐式定义为64,在-m32下为32)。
然而,这似乎扩展为:
typedef __intn_t(64) intptr_t;
如果我尝试使用这样的行进行clang或gcc,我会得到(正如我所料)语法错误,就像我使用tcc一样。
如果有人能告诉我为什么/这条线何时有效,我会很感激。
感谢,
斯坦
cc -E fum.c(El Capitan,Apple LLVM 7.0.2版(clang-700.1.81))
# 1 "fum.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 325 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "fum.c" 2
# 1 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include/stdint.h" 1 3 4
# 63 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include/stdint.h" 3 4
# 1 "/usr/include/stdint.h" 1 3 4
...250 lines deleted, going in/out of stdint.h, finally dropping back to line 64 of the Xcode version...
# 60 "/usr/include/stdint.h" 2 3 4
# 64 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.2/include/stdint.h" 2 3 4
# 2 "fum.c" 2
(就是这样,fum.c由一行组成:#include) (对不起,这是一个片段... stackoverflow抵制我所有尝试粘贴代码...手动(4个空白前缀)或点击'代码'按钮...不断删除换行符,文本重新格式化)。
答案 0 :(得分:1)
rici指出的问题答案,谢谢。 tcc没有预定义 INTPTR_WIDTH ,因此__intn_t(n)无法按预期扩展。
我没有看到“这个回答”按钮,所以我点击了“这有帮助”。
谢谢!