生成变量名称

Generating Variables' Names

本文关键字:变量名      更新时间:2023-10-16

我想生成一些用于命令的变量。查看下面的代码:

for (char ch='a'; ch<='z'; ch++)
      int ch=0;

它只是一个示例,在上面运行代码后,我想拥有int a,int b,int c ...

另一个示例:

for (int i=0; i<10; i++)
      int NewiEnd=0;

例如,在以上代码运行代码后,我们将拥有int new1end,int new2end等。

希望我很清楚,我该如何在C ??

中做这样的事情

否,不可能,不准确。但是,这是可能的:

std::map<char,int> vars;    
for (char ch='a'; ch<='z'; ch++)
      vars[ch] = 0;
std::cout << vars['a'] << vars['b'] << vars['c'];

您也可以拥有std::map<std::string, int>

std::map<std::string,int> vars;
for (int i=0; i<10; i++)
    vars["New" + std::to_string(i) + "End"] = 0;
std::cout << vars["New5End"];

在C或C 中您不可能做的事情。

您似乎想要的是类型的地图:

std::map<std::string, int> ints;

这将使您按名称称为"变量":

ints["a"] = 0;
ints["myVariable"] = 10;

或示例中给出的:

std::map<char, int> ints;
for (char ch='a'; ch<='z'; ch++)
   ints[ch] = 0;

如果您只是要使用'a' - 'z',则可以使用一个ints数组:

int ints['z' + 1];
ints['a'] = 0;
ints['z'] = 0;

但这为" A"下方的ASCII字符分配了不必要的空间。

在c/c 中,变量名称已经"消失"到代码已编译并运行时。您无法通过"反射"在运行时打印出现有变量的名称...更不用说新命名变量了。寻找此功能的人发现,您可以做到的唯一通用方式落在了使用预处理器上:

在C 中打印变量名称的通用方法

在理论上,预处理程序也可以应用于您的问题,并具有某些约束:

在C预处理器中编写一段时间循环

但是,任何阅读您的代码的人都可能会在您的心中驱动股份,并有理由这样做。周日的懒惰和强烈的相信,这不是您(应该)想要的,这会使我不尝试写一个工作的例子。:-)

(对于好奇的是,预处理器并不完整,尽管有一些"有趣"的实验)

c/c 的性质是让您在需要的基础上建立命名表。默认情况下提供此功能的语言使您为名称的运行时跟踪付费,无论您是否使用反射结束,这都不是本特定的编译语言的精神。其他人给您的答案更正确。