我正在开发一个项目,系统标题可以显示在“”中,也可以显示在<>
中例如:"io.h"
和<io.h>
我需要确定所包含的标题是否是客户标题。
有人知道是否有办法做到这一点?
答案 0 :(得分:2)
除了“询问编译器”之外,没有简单的方法可以确定"io.h"
或<io.h>
是从本地目录还是在标准头文件中的某个位置获取的。例如,程序将与#include "iostream"
完美地编译。
主要区别在于,当使用"io.h"
时,编译器将在本地目录中查找文件“io.h”的FIRST,如果使用<io.h>
,它将查看指定的include目录作为“系统包括目录”。但是,没有任何迹象表明系统包含目录不以某种方式包含“当前目录”。
您可以使用g++ -M myfile.cpp
列出文件“myfile.cpp”中使用的包含文件。 不幸的是,据我所知,Visual Studio没有这样的选项。
编辑:MS编译器确实使用/showinclude
选项支持类似功能。
答案 1 :(得分:0)
查看编译器的文档,例如MS C ++编译器将在本地引号后检查系统包含(如果没有#include "io.h"
本地头,io.h
将获得系统包含文件),但它不会在本地寻找有角度的括号:
http://msdn.microsoft.com/en-us/library/36k2cdd4.aspx
如果包含文件存在名称冲突,我猜你必须手动检查项目文件。