经常在定义头文件时, 加一个如下所示的宏定义,避免重复包含。
查看网络上的一些博客,说此处未定义的宏_TEST_H_的值是1,此文将探究一下此值到底是不是1。
#ifndef _TEST_H_
#define _TEST_H_
class test
{
...
};
#endif
(1)定义其值为1,进行赋值等。
#include <stdlib.h>
#include <iostream>
using namespace std;
#define _TEST_CPP_ 1
int main(int argc, char **argv)
{
int value = 0;
value = _TEST_CPP_;
cout << "_TEST_CPP_ : " << value << endl;
}执行结果如下
(2)未定义值时,此值为1吗?
#include <stdlib.h>
#include <iostream>
using namespace std;
#define _TEST_CPP_
int main(int argc, char **argv)
{
int value = 0;
value = _TEST_CPP_;
cout << "_TEST_CPP_ : " << value << endl;
}编译报错,如下,可见其值并不为1。具体多少我也不知道,猜测没有值,即没有定义。
(3)那么此宏定义了没有?
#include <stdlib.h>
#include <iostream>
using namespace std;
int abc = 123;
#define _TEST_H_
#ifndef _TEST_H_
abc = 789;
#endif
int main(int argc, char **argv)
{
int value = 0;
cout << "abc:" << abc << endl;
}执行结果如下,可见这个宏还是定义了的。
总结:
(1)未定义值的宏,存在定义,值未初始化,并不为1。
本文探讨了在C/C++编程中,未定义宏如_TEST_H_的值是否默认为1的问题。通过分析,得出结论:未定义的宏在被定义前并不具有预设值,其值并非1,而是处于未初始化状态。
439

被折叠的 条评论
为什么被折叠?



