随机变量名称,这可能吗?

Bru*_*ano 3 c c++ random variables

想象一下,如果出于任何原因,您想要创建多个变量,而不使用数组,并且它们必须具有不同的名称.从逻辑上讲,您不会创建空变量并仅在需要时设置500.

简而言之,可以生成具有相同名称的变量而无需随机使用数组或向量?

如果可能的话,我想要实例化逻辑或C或C++.

我尝试过这种方法(在C中),但不起作用:

#include <stdlib.h> // for random

#define RANDOM random(100)

int main ( void )
{
    int n/**/RANDOM = 5;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

可能是较旧的编译器工作,因为他们删除了评论.当前的编译器将注释视为空格.

Bas*_*tch 6

至少在最近的GCC上,你可以使用像

 #define NEWVAR_NUM(Var,Num) { static int Var_##Num; foo(&Var_##Num); }
 #define NEWVAR(Var) NEWVAR_NUM(Var,__COUNTER__)
Run Code Online (Sandbox Code Playgroud)

在其他(或使用标准符合)编译器上,您可以使用__LINE__而不是__COUNTER__.请参阅GCC的常见预定义宏和cpp的串联

此外,您可以考虑生成这样的人为C代码,例如m4或您自己的生成器(可以是十行脚本或100K行生成器).


Rol*_*lig 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__);
Run Code Online (Sandbox Code Playgroud)

所述间接通过CONCAT_INTERNAL是必要的,因为否则令牌var__LINE__所述之前被级联__LINE__进行评价.

这种预处理器技巧被广泛使用,例如在NetBSD中.

  • 纯粹的疯狂投票. (2认同)

MK.*_*MK. 5

您的程序的生命周期是:

  1. 源代码是预处理的
  2. 源代码已编译
  3. 生成二进制文件

对随机的调用只能在执行阶段进行.您正在尝试在预处理阶段执行此操作.期间不行.

关于你的问题 - 它没有任何意义,解释你想要达到的目标是什么.