C++ C++;,如何动态地包含.h

C++ C++;,如何动态地包含.h,c++,header,C++,Header,对不起,我的英语不好 例如: // // File : Main.cpp // #include <stdlib.h> int main() { printf(TEST_DEFINE); return (EXIT_SUCCESS); } 我想包括该头,由编译器或其他程序。我不想在CPP文件中包含此标头 我如何处理?我愿意接受所有的建议 这种情况相当棘手,但我的PoC程序很有必要。 < P>动态不能包含任何报头,C++是静态语言。 您需要使用#include“test_de

对不起,我的英语不好

例如:

//
// File : Main.cpp
// 
#include <stdlib.h>
int main()
{
  printf(TEST_DEFINE);
  return (EXIT_SUCCESS);
}
我想包括该头,由编译器或其他程序。我不想在CPP文件中包含此标头

我如何处理?我愿意接受所有的建议


这种情况相当棘手,但我的PoC程序很有必要。

< P>动态不能包含任何报头,C++是静态语言。 您需要使用
#include“test_define.h”

<>你唯一的选择是自己编写C++解析器(或者使用现有的解析器),读取头文件,解析它,从符号树中提取你想要的符号。但是,除非你是一个有多年硬核编程经验的人,并且能够解释为什么你需要这样做,否则你永远不应该这样做


好的,我们不是在讨论任何动态的东西,我们是在讨论一个包含一些定义的头文件的普通的旧的
#include

您需要的是以下内容:

包含以下内容的文件
my_header.h

#ifndef TEST_DEFINE_H_INCLUDED
#define TEST_DEFINE_H_INCLUDED

enum {foo, bar} my_enum;

#endif
#include "my_header.h"

int main(int argc, char** argv) {
  my_enum my_variable = foo;

  return my_variable == foo ? EXIT_SUCCESS : EXIT_FAILURE;
}
以及包含以下内容的文件
my_program.cc

#ifndef TEST_DEFINE_H_INCLUDED
#define TEST_DEFINE_H_INCLUDED

enum {foo, bar} my_enum;

#endif
#include "my_header.h"

int main(int argc, char** argv) {
  my_enum my_variable = foo;

  return my_variable == foo ? EXIT_SUCCESS : EXIT_FAILURE;
}

动态不能包含任何报头,C++是静态语言。 您需要使用

#include“test_define.h”

<>你唯一的选择是自己编写C++解析器(或者使用现有的解析器),读取头文件,解析它,从符号树中提取你想要的符号。但是,除非你是一个有多年硬核编程经验的人,并且能够解释为什么你需要这样做,否则你永远不应该这样做


好的,我们不是在讨论任何动态的东西,我们是在讨论一个包含一些定义的头文件的普通的旧的
#include

您需要的是以下内容:

包含以下内容的文件
my_header.h

#ifndef TEST_DEFINE_H_INCLUDED
#define TEST_DEFINE_H_INCLUDED

enum {foo, bar} my_enum;

#endif
#include "my_header.h"

int main(int argc, char** argv) {
  my_enum my_variable = foo;

  return my_variable == foo ? EXIT_SUCCESS : EXIT_FAILURE;
}
以及包含以下内容的文件
my_program.cc

#ifndef TEST_DEFINE_H_INCLUDED
#define TEST_DEFINE_H_INCLUDED

enum {foo, bar} my_enum;

#endif
#include "my_header.h"

int main(int argc, char** argv) {
  my_enum my_variable = foo;

  return my_variable == foo ? EXIT_SUCCESS : EXIT_FAILURE;
}

GCC有一个选项
-include
file,它使预处理器包含头,就像程序的第一行说
#include“file”

e、 g.给定一个固定版本的main(应该包括):

然后我可以这样使用它:

$ g++ -include test_define.h main.cpp -o main
$ ./main
hello

GCC有一个选项
-include
file,它使预处理器包含头,就像程序的第一行说
#include“file”

e、 g.给定一个固定版本的main(应该包括):

然后我可以这样使用它:

$ g++ -include test_define.h main.cpp -o main
$ ./main
hello

Microsoft VC编译器有一个
/FI
开关,强制在每个源代码中包含一个头。可能的重复项您听说过gcc编译器选项-Dname=value吗?该死的,让我们问一下……为什么需要这样做?你所问的问题在标准C++中并不值得做,你试图解决的问题也许更好地解决了其他的问题。这种方式是什么,当然取决于问题。你所说的“动态”到底是什么意思?Microsoft VC编译器有一个
/FI
开关,强制在每个源代码中包含一个头。可能的重复项你听说过gcc编译器选项-Dname=value吗?该死的,让我们问一下……你为什么需要这样做?你所问的问题在标准C++中并不值得做,你试图解决的问题也许更好地解决了其他的问题。当然,这取决于问题。你到底是什么意思“动态”?这只是一个函数调用,这个例子只是为了使用我的定义“写C++解析器自己”——我想最好还是删除这个。既不实际,也不合理。而OP并不是关于这个的。@KirillKobelev我只是陈述事实,并明确指出,如果不能解释为什么需要这样做,就永远不应该这样做。不是真的,我已经生成了带有枚举的头文件,我尝试通过gcc或其他进程包含此头文件,那么为什么需要动态地包含它?我在回答中提到的
#include
不是动态的,而是静态的。通常,当人们说静态时,他们指的是编译时确定的内容,当他们说动态时,他们指的是运行时确定的内容。我想您提到的头文件名在编译时是固定的吧?在这种情况下,你的问题没有什么动态,我们只是在讨论一个普通的静态的静态代码<代码> < /COD>。这只是一个函数调用,这个例子只是为了使用我的定义“写C++解析器自己”——我想最好还是删除这个。既不实际,也不合理。而OP并不是关于这个的。@KirillKobelev我只是陈述事实,并明确指出,如果不能解释为什么需要这样做,就永远不应该这样做。不是真的,我已经生成了带有枚举的头文件,我尝试通过gcc或其他进程包含此头文件,那么为什么需要动态地包含它?我在回答中提到的
#include
不是动态的,而是静态的。通常,当人们说静态时,他们指的是编译时确定的内容,当他们说动态时,他们指的是运行时确定的内容。我想您提到的头文件名在编译时是固定的吧?在这种情况下,您的问题没有任何动态性,我们只是在讨论一个简单的旧静态
#include