Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 定义预处理器宏到宏定义行_C++_C_C Preprocessor - Fatal编程技术网

C++ 定义预处理器宏到宏定义行

C++ 定义预处理器宏到宏定义行,c++,c,c-preprocessor,C++,C,C Preprocessor,假设我包含以下宏定义行号: 41 #define MACRO1 . . 52 #define MACRO2 如何定义MACRO1,以便在编译时将其解析为与定义MACRO1的行号相对应的数字?在这种情况下41 如何定义MACRO2,以便在编译时将其解析为预定义字符串(例如foo)和数字X的串联,其中X等于MACRO2 52的行号和MACRO1 41的行号之差 鉴于上述情况,MACRO2将解析为foo11,因为它是预定义字符串“foo”与两行数字52和41之间的差之间的串联 这可能吗?你不能用

假设我包含以下宏定义行号:

41 #define MACRO1 
.
.
52 #define MACRO2 
如何定义MACRO1,以便在编译时将其解析为与定义MACRO1的行号相对应的数字?在这种情况下41

如何定义MACRO2,以便在编译时将其解析为预定义字符串(例如foo)和数字X的串联,其中X等于MACRO2 52的行号和MACRO1 41的行号之差

鉴于上述情况,MACRO2将解析为foo11,因为它是预定义字符串“foo”与两行数字52和41之间的差之间的串联


这可能吗?

你不能用平常的方式做你想做的事。阅读

<>但是记住C或C++等等。文件可以由某些程序或脚本生成。您可以使用其他预处理器来生成,例如或,或您自己的脚本或程序

然后,您只需要为此目的配置您的。如果使用,请编辑Makefile;如果使用,请编辑build.ninja文件等

这些基本技术在实践中相当普遍;在许多大型程序中,生成了一些C或C++代码。一些发电机,例如or,在上个世纪就出现了,相当普遍

作为实例,编译器主要用C++编写,有十几个C++代码生成器。 请注意,现代使能技术及其应用;所以在某些情况下,在运行时生成一些C或C++代码是值得的,编译它作为插件,并加载它,例如使用Linux来使用它。那就小心了。也可以考虑使用一些类库等……


BTW,最近的C++编译器可以用插件扩展,例如,或者作为一个库使用。许多学术或领域特定语言都是,有些被编译成C++,例如

你不能像往常一样做你想做的事情。阅读

<>但是记住C或C++等等。文件可以由某些程序或脚本生成。您可以使用其他预处理器来生成,例如或,或您自己的脚本或程序

然后,您只需要为此目的配置您的。如果使用,请编辑Makefile;如果使用,请编辑build.ninja文件等

这些基本技术在实践中相当普遍;在许多大型程序中,生成了一些C或C++代码。一些发电机,例如or,在上个世纪就出现了,相当普遍

作为实例,编译器主要用C++编写,有十几个C++代码生成器。 请注意,现代使能技术及其应用;所以在某些情况下,在运行时生成一些C或C++代码是值得的,编译它作为插件,并加载它,例如使用Linux来使用它。那就小心了。也可以考虑使用一些类库等……


BTW,最近的C++编译器可以用插件扩展,例如,或者作为一个库使用。许多学术或领域特定语言都有,有些被编译成C++,例如

附议巴塞尔:你不能这么做。但是,如果你告诉我们,也许我们仍然可以帮助你解决这个问题:我想用一堆C/C++文件,把所有有意义的名称和变量都改成毫无意义的东西……例如:int CountDown变成int HJHH38HGRhThis。它可能不像你想象的那么好。想要逆向工程代码的人不关心许可方C++ C++混淆器。你有没有试过现有的,为什么不合适?如果你想做自己的,我希望最简单的方法是编译器插件,而不是手工修改宏。另外,如果你想隐藏你的源代码,分发一个编译过的、优化过的、没有符号的二进制文件更容易、更健壮。但是,如果你告诉我们,也许我们仍然可以帮助你解决这个问题:我想用一堆C/C++文件,把所有有意义的名称和变量都改成毫无意义的东西……例如:int CountDown变成int HJHH38HGRhThis。它可能不像你想象的那么好。想要逆向工程代码的人不关心许可方C++ C++混淆器。你有没有试过现有的,为什么不合适?如果你想做自己的,我希望最简单的方法是编译器插件,而不是手工修改宏。另外,如果你想隐藏你的源代码,分发一个编译过的、优化过的、没有符号的二进制文件更容易、更健壮。你知道有没有免费的工具,最好是Windows的命令行,可以批量处理一组C/C++文件并提供所有函数和变量的列表?这是另一个问题。您可能会考虑编码或不使用,这是本任务范围的一部分。自动列出所有函数名和变量,然后在编译时或编译前智能地将名称更改为乱码。我开始发疯了
想象一下,在编译之前只生成头文件会更容易。分配给你这样一个任务的人是非常天真的。只要他付钱给你,你就可以浪费时间。不,没有时间。我提供了推荐信。另外,我认为你的源代码不值得以一个强大的实体仍然可以进行反向工程的方式进行保护,大多数实体都不在乎。你知道有没有免费的工具,最好是Windows命令行,它可以批量处理一组C/C++文件并提供所有函数和变量的列表?这是另一个问题。您可能会考虑编码或不使用,这是本任务范围的一部分。自动列出所有函数名和变量,然后在编译时或编译前智能地将名称更改为乱码。我开始认为在编译之前只生成头文件会更容易。无论是谁分配给你这样的任务都是难以置信的天真。只要他付钱给你,你就可以浪费时间。不,没有时间。我提供了推荐信。另外,我认为您的源代码不值得以一个强大的实体仍然可以进行反向工程的方式进行保护,而大多数实体并不在乎。