Tag: 常量表达式

常量表达式中的条件运算符

我尝试使用MSVC 10的以下代码片段,它可以正常工作。 enum { FOO = (sizeof(void*) == 8 ? 10 : 20) }; int main() { return FOO; } 我想知道的是:当所有操作数都是常量表达式时,C ++标准(最好是C ++ 98)是否允许我在常量表达式中使用条件运算符,或者这是Microsoft的怪癖/扩展?

如何检查参数是否是C预处理器宏中的整数常量表达式?

我正在清理一个现有的C库,无耻地发布它。 预处理器宏NPOT用于在编译时计算给定积分常数表达式的下一个更大的2的幂。 宏通常用于直接初始化。 对于所有其他情况(例如,使用可变参数),存在具有相同function的内联函数。 但是,如果用户传递变量,则算法会扩展为大量的机器代码。 我的问题是: 我可以做些什么来防止用户向我的宏传递除了一个整数常量表达式之外的任何内容? #define NPOT(x) complex_algorithm(x) const int c=10; int main(void) { int i=5; foo = NPOT(5); // works, and does everything it should foo = NPOT(c); // works also, but blows up the code extremely foo = NPOT(i); // blows up the code also } 我已经尝试过的: 将宏定义为#define NPOT(x) complex_algorithm(x ## […]

C中的“常量表达式”是什么,而不是什么?

即使在经过多次Google搜索之后,我对C语言中的常量表达式与之间的混淆感有点混淆。 你能提供一个C的常量表达式的例子吗?