C++ 是否可以检查变量的存在?

C++ 是否可以检查变量的存在?,c++,c,variables,exists,C++,C,Variables,Exists,我们能理解是否有提到/创建/存在的变量吗? 我的意思是: //..Some codes int main(){ int var1; float var2; char var3; cout << isExist("var1") << endl;//Or isExist(/*Something related with var1*/) cout << isExist("var2") << endl; co

我们能理解是否有提到/创建/存在的变量吗?
我的意思是:

//..Some codes
int main(){
    int var1;
    float var2;
    char var3;
    cout << isExist("var1") << endl;//Or isExist(/*Something related with var1*/)
    cout << isExist("var2") << endl;
    cout << isExist("var3") << endl;
    cout << isExist("var456") << endl;//There is no variable named with var456
    return 0;
}  

C++和C++没有支持。

不在C/C++中。但您可以看看boost reflect库

在C/C++中,访问未定义的变量将生成编译器错误。因此,从某种意义上说,这是它的工作方式所固有的。您不能在运行时这样做,至少不能像您试图做的那样,也不应该这样做——因为您首先不能在运行时命名新变量,所以您应该已经知道其中的变量

实现这一点的唯一方法是间接使用宏。宏无法检查变量本身是否已定义,但定义可以与变量定义配对,您可以检查定义标记

#define A_VARIABLE 1
int a_variable = 60;
后来:

#ifdef A_VARIABLE
...
#endif
像大多数宏一样,最好避免这种行为——不过,我见过它用于处理某些变量的平台依赖性


动态记忆是另一回事。既然你没有提到它,我就不谈了,但我只想说这是一个更复杂的问题,它证明了许多程序员的祸害和许多运行时错误的根源。

编程语言C是一种人类可读的向计算机提供指令的形式。程序中的所有名称仅在程序文本中具有含义

编译时,名称将替换为对存储位置或函数(执行起点)的符号引用。在当前编译单元(对象模块)中未找到的任何符号都将标记为将来解析

对象模块被组合(链接)成一个可执行文件,其中对不在对象模块中的符号的所有引用都通过其他对象模块中的位置来解析;否则,可执行文件的创建将失败

由于现在任何名称都已替换为对存储位置和执行起点的引用,因此可执行文件不再知道程序文本中用于引用其存储位置和函数的名称


任何这样做的能力(user@Bill Lynch称之为“反射”)都将作为一个单独的层“附加”到语言/环境中,例如由调试/开发环境提供的层。

您尝试做的更大的事情是什么?更简单的一点是,请注意编译器错误(您没有提到运行时)。:-)在这个例子中,我不是想知道这是否可能,而是想知道这远远超出了反射的范围
#ifdef A_VARIABLE
...
#endif