C++ PHP的对应物';C/C++;

C++ PHP的对应物';C/C++;,c++,c,compiler-construction,C++,C,Compiler Construction,PHP有一个非常好的函数isset($variableName)。它检查程序中是否已经定义了$variableName 我们是否可以为C/C++构建类似的功能(某种符号表查找)?不太可能。您不能在C中动态创建变量(尽管您可以使用malloc()等或C++中的new等动态创建存储)。我认为动态加载的库会使情况变得模糊,但即使如此,确定变量是否存在的方法也是通过查找其名称。如果名称不在那里,那么,除了运行编译器创建动态加载的模块,然后再加载它之外,您可能会陷入困境。这个概念并不适用于C或C++。<

PHP有一个非常好的函数isset($variableName)。它检查程序中是否已经定义了$variableName


我们是否可以为C/C++构建类似的功能(某种符号表查找)?

不太可能。您不能在C中动态创建变量(尽管您可以使用malloc()等或C++中的new等动态创建存储)。我认为动态加载的库会使情况变得模糊,但即使如此,确定变量是否存在的方法也是通过查找其名称。如果名称不在那里,那么,除了运行编译器创建动态加载的模块,然后再加载它之外,您可能会陷入困境。这个概念并不适用于C或C++。

< P>我是C++的家伙,但是我记得在PHP ISStE中,当通过GET或POST请求传递时,我们检查变量是否包含一个值(我确信还有其他用途,但这是我相信的一个普通用法)。 <>你在C++中没有真正的动态类型。因此,您不能突然使用以前未明确定义的变量名。在C++中,没有一个“unSt设置”变量。 即使您说“intvar;”并且不初始化它,变量也有一个值,通常是垃圾值,但在PHP意义上它仍然是“set”的

我想,预处理器的#ifdef和#ifndef将是最后的结果,它只检查您是否使用#define定义了变量。但根据我的经验,这主要用于省略或添加基于标志的代码。例如:

// code code code
#ifdef DEBUG
// debug only code that will not be included in final product.
#endif
// more code more code
您可以使用#define定义调试,以确定是否立即包含“调试”代码


<>也许你可以更详细地讲述一下你用iSc++的C++来做什么,这将给你一个更好的想法,即如何去做“C++方式”。但是,可以通过使用以下地图来执行此类操作:

typedef std::map<std::string, int> variables_type;
variables_type variables;

variables["var"] = 1;
if(variables.find("jon") == variables.end())
   std::cout << "variable, \"jon\" not set\n";
typedef标准::映射变量\u类型;
变量类型变量;
变量[“var”]=1;
if(variables.find(“jon”)==variables.end())

STD::在其他答案中,CUT

,在C++变量中,从来没有定义过。但是,变量可以是未初始化的,在这种情况下,它们的内容没有在语言标准中指定(大多数编译器实现为存储在该内存位置的内容)

通常情况下,编译器会提供一个标志来检测可能未初始化的变量,如果启用此功能,则会生成警告

isset的另一个用途是处理不同的代码。请记住C++是静态编译语言,试图重新定义符号会导致编译时错误,从而消除了对ISSET的需求。 最后,您可能要查找的是空指针。为此,只需使用一个简单的比较:

int * x(getFoo());
if (x) {
  cout << "Foo has a result." << endl;
} else {
  cout << "Foo returns null." << endl;
}
int*x(getFoo());
if(x){

cout简短回答:


标准的后续问题:你真正想解决的问题是什么?

总是有提升。可选


这几乎可以满足您的需要。

这里必须将两件事分开:变量声明和变量内容

如其他答案所述,与PHP不同,C++在声明之前不允许使用变量。 但除此之外,它还可以不初始化


我认为PHP ISStand函数试图找出一个变量是否有可用的值。在C++中,这与指针为空或有效的情况相对应。

我能想到的最接近的事情是使用指针而不是实际变量。然后可以检查FROULL。< /P> 然而,看起来你在用错误的语言解决问题,或者用错误的语言解决问题