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