大佬教程收集整理的这篇文章主要介绍了只有.h在某个目录中时,c-g才会神秘地失败,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include "macros.h" int main (void) { return 1; }
这是macros.h:
#ifndef __JUST_TESTinG__ #define __JUST_TESTinG__ template<typename T> void swap (T& pT1,T& pT2) { T pTmp = pT1; pT1 = pT2; pT2 = pTmp; } #endif //__JUST_TESTinG__
如果两个文件都在同一目录中,则编译并正常工作.但是,如果我将macros.h放在/usr/include / gfc2(它是我使用的自定义库的一部分)并更改test.cpp中的#include,则编译失败并显示以下错误:
/usr/include/gfc2/macros.h:4: error: template with C linkage
我研究了这个错误,大多数评论都指向了一个“悬空的外部C”,这似乎根本就不是这样.
我在这里完全失败了.是g出于某种原因假设/usr/include / gfc2中的所有内容都是C,即使它包含在一个.cpp文件中,它不会在任何地方说“ex”?
有任何想法吗?
编辑:如果我使用#include中的完整路径,它会编译,即#include“/usr/include/gfc2/macros.h”
EDIT2:它没有包含错误的标题.我已经使用cpp,g -E验证了这一点,并将macros.h重命名为foobarmacros.h
g++ -E test.cpp | grep '^#'
你可能会看到类似的东西
# 1 "/usr/include/gfc2/macros.h" 1 3 4
4是预处理器暗示G它应该将所有内容包装在extern“C”中,假设您的平台的/ usr /中的古代头文件包含在前C中.请参阅CPP手册中的Preprocessor Output.
这些天G大多忽略了这个提示,因为大多数平台的C头不再是古老的.请参阅GCc internals手册中的NO_IMPLICIT_EXTERN_C目标宏.但可能是这个旧版本的Xcode配置了没有NO_IMPLICIT_EXTERN_C的GCC,因此正在监听预处理器的提示. (这是在GCC本身构建时设置的 – 我不认为有一个命令行开关来覆盖它.)
以上是大佬教程为你收集整理的只有.h在某个目录中时,c-g才会神秘地失败全部内容,希望文章能够帮你解决只有.h在某个目录中时,c-g才会神秘地失败所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。