想象一下,如果出于任何原因,您想创建多个变量,而不使用数组,并且必须具有不同的名称。从逻辑上讲,您不会创建空变量,只能根据需要设置500。
简而言之,可以在不随机使用数组或向量的情况下生成具有相同名称的变量吗?
如果可能的话,我想要实例化逻辑或C或C ++。
我尝试过这种方法(在C中),但不起作用:
#include <stdlib.h> // for random
#define RANDOM random(100)
int main ( void )
{
int n/**/RANDOM = 5;
return 0;
}
可能是较旧的编译器工作,因为他们删除了评论。当前的编译器将注释视为空格。
答案 0 :(得分:6)
至少在最近的GCC上,你可以使用像
这样的技巧 #define NEWVAR_NUM(Var,Num) { static int Var_##Num; foo(&Var_##Num); }
#define NEWVAR(Var) NEWVAR_NUM(Var,__COUNTER__)
在其他(或使用标准符合)编译器上,您可以使用__LINE__
代替__COUNTER__
。请参阅GCC的Common Predefined Macros和cpp的concatenation
另外,您可以考虑生成这样的设计C代码,例如: m4或您自己的生成器(可以是十行脚本或100K行生成器)。
答案 1 :(得分:6)
您可以尝试这样的事情:
#define CONCAT_INTERNAL(a, b) a ## b
#define CONCAT(a, b) CONCAT_INTERNAL(a, b)
int CONCAT(var, __LINE__);
int CONCAT(var, __LINE__);
int CONCAT(var, __LINE__);
通过CONCAT_INTERNAL
间接是必要的,因为否则在评估var
之前会将标记__LINE__
和__LINE__
连接在一起。
这种预处理器技巧被广泛使用,例如在NetBSD。
答案 2 :(得分:5)
您的计划的生命周期是:
随机调用只能在执行阶段发生。 您正在尝试在预处理阶段执行此操作。期间不行。
关于你的问题 - 这没有任何意义,解释你想要实现的目标。
答案 3 :(得分:0)
首先,你不能使用<stdlib.h>
中的函数来执行此操作,因为它们是运行时的;你需要的是一个编译时构造。
执行此类操作的唯一方法是使用预处理器,但C / C ++的预处理器非常基本。它没有可能增加的变量,它当然没有生成随机数的函数。