是否可以检查变量的存在?
Is it possible to check existance of variables?
如果有变量我们能理解吗mentioned/created/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;
cout << isExist("var3") << endl;
cout << isExist("var456") << endl;//There is no variable named with var456
return 0;
}
输出:
true
true
true
false
没有。 C 和 C++ 不支持 reflection.
不在 C/C++ 中。但是你可以看看boost reflect library。 http://bytemaster.bitshares.org/boost_reflect/
在C/C++中,访问未定义的变量将产生编译器错误。因此,从某种意义上说,这是它运作方式所固有的。您不能在运行时这样做,至少不能像您尝试做的那样,并且不需要 - 因为您首先不能在运行时命名新变量,所以您应该已经知道那里的变量。
唯一的方法是间接使用宏。宏无法检查变量本身是否已定义,但定义可以与变量定义配对,您可以检查定义标记。
#define A_VARIABLE 1
int a_variable = 60;
以后:
#ifdef A_VARIABLE
...
#endif
像大多数宏一样,最好避免这种行为 - 但是,我已经看到它用于处理某些变量的平台依赖性。
动态内存是另一回事。既然你没有提到,我就不深究了,但足以说明这是一个更复杂的问题,它证明了很多程序员的祸根和许多运行时错误的根源。
'programming language C' 是一种向计算机提供指令的人类可读形式。程序中的所有名称仅在程序文本中具有意义。
编译后,名称将替换为对存储位置或函数(执行起点)的符号引用。在当前编译单元(目标模块)中找不到的任何符号都被标记为将来解析。
目标模块被组合(链接)到一个可执行文件中,其中所有对不在目标模块中的符号的引用都被解析为其他目标模块中的位置;否则创建可执行文件失败。
由于现在所有名称都已替换为对存储位置和执行起点的引用,可执行文件不再知道程序文本中用于引用其存储位置和函数的名称。
任何这样做的能力(用户@Bill-Lynch 称之为 'reflection')将 'bolted on' 到 language/environment 作为一个单独的层,例如由debugging/development 环境。
如果有变量我们能理解吗mentioned/created/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;
cout << isExist("var3") << endl;
cout << isExist("var456") << endl;//There is no variable named with var456
return 0;
}
输出:
true
true
true
false
没有。 C 和 C++ 不支持 reflection.
不在 C/C++ 中。但是你可以看看boost reflect library。 http://bytemaster.bitshares.org/boost_reflect/
在C/C++中,访问未定义的变量将产生编译器错误。因此,从某种意义上说,这是它运作方式所固有的。您不能在运行时这样做,至少不能像您尝试做的那样,并且不需要 - 因为您首先不能在运行时命名新变量,所以您应该已经知道那里的变量。
唯一的方法是间接使用宏。宏无法检查变量本身是否已定义,但定义可以与变量定义配对,您可以检查定义标记。
#define A_VARIABLE 1
int a_variable = 60;
以后:
#ifdef A_VARIABLE
...
#endif
像大多数宏一样,最好避免这种行为 - 但是,我已经看到它用于处理某些变量的平台依赖性。
动态内存是另一回事。既然你没有提到,我就不深究了,但足以说明这是一个更复杂的问题,它证明了很多程序员的祸根和许多运行时错误的根源。
'programming language C' 是一种向计算机提供指令的人类可读形式。程序中的所有名称仅在程序文本中具有意义。
编译后,名称将替换为对存储位置或函数(执行起点)的符号引用。在当前编译单元(目标模块)中找不到的任何符号都被标记为将来解析。
目标模块被组合(链接)到一个可执行文件中,其中所有对不在目标模块中的符号的引用都被解析为其他目标模块中的位置;否则创建可执行文件失败。
由于现在所有名称都已替换为对存储位置和执行起点的引用,可执行文件不再知道程序文本中用于引用其存储位置和函数的名称。
任何这样做的能力(用户@Bill-Lynch 称之为 'reflection')将 'bolted on' 到 language/environment 作为一个单独的层,例如由debugging/development 环境。