【问题标题】:Any way to include C++ headers in co​de?有什么方法可以在代码中包含 C++ 头文件?
【发布时间】:2018-05-26 12:48:14
【问题描述】:

有没有办法通过使用变量作为标头的名称在代码中包含文件?像这样:

const char *ch = "test.h";
 /* include it now with the var */ #include ch

如果答案是否定的,是否有任何功能或方法可以做到这一点?

【问题讨论】:

标签: c++ variables include


【解决方案1】:

虽然提出的问题是关于标头的,但“XorTroll 2017 年 12 月 12 日 19:20”的说明听起来像是可以通过 dlopen() 在运行时加载动态共享库来完成的修改。您要么需要涵盖所有用户控制内容的预编译库,要么需要一个非常复杂的环境,包括 JIT 生成和编译!

【讨论】:

    【解决方案2】:

    预处理器正在处理 before the compiler even starts 的工作,因此在编译 const char *ch = "test.h"; 时,您的代码中不再有任何 #includes。

    如果答案是否定的,是否有任何功能或方法可以做到这一点?

    要回答这个问题,您必须解释您真正想要实现的目标。很经典的xy problem:你问的是你认为什么是解决方案,但我们不知道你想解决什么问题……

    【讨论】:

    • 我正在尝试制作一个用户键入文件名的程序,该程序会按该名称创建一个标题(并根据名称向其中添加不同的宏),并且包含它。
    • @XorTroll 当你运行程序时编译早就结束了。您不能(轻松)修改正在运行的程序的源代码
    【解决方案3】:

    你可以这样做。虽然我告诫不要这样做。

    #define TEST_H "test.h"
    #include TEST_H
    

    【讨论】:

    • 不这样做的一个很好的理由是,test.h 受到看起来像 #ifndef TEST_H 的包含保护的保护的可能性太高了。
    • @user4581301 • 良好的安全提示。自己项目中的代码在自己的控制之下。假设我没有使用#pragma once,我的守卫在我的标题中看起来像GUARD_TEST_H
    • 我对@9​​87654326@ 产生了恐惧。它在复杂的构建环境中失败了,我遇到了太多这样的环境。这是正确的想法,不幸的是还没有人让它正常工作。
    • Google C++ Style Guide 建议使用<PROJECT>_<PATH>_<FILE>_H_。这更安全,因为它包含路径,并且您不能在同一位置有两个同名的文件;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    相关资源
    最近更新 更多