我正在开发一个系统标题可以出现在“”和<>中的项目
例如: "io.h"
和<io.h>
我需要确定包含的标题是否是客户。
有人知道是否有办法做到这一点?
除了“询问编译器”之外,没有任何简单的方法可以确定是否"io.h"
取自<io.h>
本地目录或标准头文件中的某处。例如,一个程序可以用#include "iostream"
.
主要区别在于,编译器在使用时会首先在本地目录中查找文件“io.h” "io.h"
,如果使用<io.h>
它将在指定为“系统包含目录”的包含目录中查找。但是,没有什么说系统包含目录不以某种方式包含“当前目录”。
您可以使用g++ -M myfile.cpp
列出文件“myfile.cpp”中使用的包含文件。不幸的是,据我所知,Visual Studio 没有这样的选项。
编辑:MS 编译器确实支持使用该/showinclude
选项的类似功能。
查看编译器的文档,例如,MS C++ 编译器将在带引号的本地后检查系统包含(因此#include "io.h"
,如果没有io.h
本地头文件,则会获取系统包含),但不会在本地查找尖括号:
http://msdn.microsoft.com/en-us/library/36k2cdd4.aspx
我猜如果包含文件存在名称冲突,您将不得不手动检查项目文件。