是否可以知道是否包含标题

BBe*_*eta 5 c++ header

在源代码中是否可以知道是否包含头?

这是我需要的一个例子:

#include<iostream>
using namespace std;

int main()
{
    char headname[4];
    cout<<"Enter a header name : ";
    cin>>headname;

    #ifdef headname
        cout<<headname<<" Defined"<<endl;
    #else
        cout<<headname<<" Not defined"<<endl;
    #endif

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

例如,如果我输入"iostream",则输出应为"iostream Defined".

小智 5

是的。标头通常使用包括保护,例如:

#ifndef MY_HEADER_INCLUDED
#define MY_HEADER_INCLUDED

// [...]

#endif
Run Code Online (Sandbox Code Playgroud)

在我的 Gentoo Linux / GCC 系统上,查看 iostream 标头我看到:

#ifndef _GLIBCXX_IOSTREAM
#define _GLIBCXX_IOSTREAM 1
Run Code Online (Sandbox Code Playgroud)

所以你可以检查_GLIBCXX_IOSTREAM. 如果您没有使用 GCC,请打开您的iostream头文件并查看它们可能定义了哪些宏。

还应该指出的是,cout属于iostream头文件,所以当_GLIBCXX_IOSTREAM(在我的情况下)没有定义时,代码也会编译失败。但是可以printf()用于测试。

  • 但这会导致编译时检查 (#ifdef) 而不是运行时检查。 (3认同)