【发布时间】:2018-07-31 18:04:43
【问题描述】:
前提: 由于宏的潜在问题,我正在尝试创建一个未使用宏实现的定义范围。这是我最初的尝试
//version for if not defined
bool Defined()
{
return false
}
//version for if defined
bool Defined(bool anything)
{
return true;
}
还有一个示例用例
if(Defined(_DEBUG))
{
Stuff...
}
替换
#ifdef _DEBUG
Stuff...
#endif
或
#define Defined() false
#define Defined(Anything) true
好处:
语法更简洁,范围更广,
此代码不是条件代码,因此编译器将能够轻松优化代码段。
问题
这个程序有几个问题,首先是这个帖子的原因。
问题:
您不能将不能隐式转换为布尔值的任何内容传递。有没有办法将任何对象、数字、指针等隐式转换为布尔值?我不相信有,但我想在继续之前确定一下。
【问题讨论】:
-
将
Car转换为bool意味着什么? -
只有预处理器知道
DEBUG是否是#defined。 -
当
DEBUG未定义时,标记DEBUG扩展为DEBUG,而不是什么都没有 -
我不明白你为什么想要这个。
if块和#ifdef块通常用于非常不同的目的。 -
不存在隐式转换。您说的是隐式转换。演员表总是明确的。这是您在源代码中编写的内容,用于告诉编译器进行转换。