语句:
#if (1, 2) != 2
#else
#endif为什么,一直不清楚为何Build不过???
理由是什么???
难道预编译指令不Support逗号表达式吗?
#if (1, 2) != 2
#else
#endif为什么,一直不清楚为何Build不过???
理由是什么???
难道预编译指令不Support逗号表达式吗?
解决方案 »
- 这究竟是什么技术,没有子窗口,却可以在指定位置绘图?
- vc中combox控件使用
- CMFCPropertyGridCtrl属性相应键盘事件
- 串口通信问题
- 急救:如何通过返回的IDispatch得到收件人
- 300高分求助,一个小算法,要代码。
- 想让com接口的输出参数是一个动态数组如何解决阿?
- CDaoWorkspace::RepairDatabase调用失败,请问原因!
- 我做了一个ODBC的数据库程序,该如何发行之??
- 如何用MS MFC来发送MAIL,请给出实例,谢谢
- ie高亮关键字的地方右键弹出自定义菜单,非高亮关键字的地方右键显示ie标准菜单??
- 求助:为何单选框组合映射到变量不起作用?
一般#if后边是一个宏或一个表达式。(1,2)!=2 是一个表达式吗?
{
var++;
}var = (1, 2) != 2;
while ((1, 2) != 2)
{
}
...都可以通过编译
“()”括号里面如果有多个表达式的话,他将被认为是一个函数,一个无名函数,返回值是最好一个表达式
“()”括号内部如果只有一个表达式,他也是一个无名函数,返回值就是这个表达式而#if后面必须是一个常量表达式。
而(1,2)!=2这个不是一个常量表达式,可以认为他是一个无名函数的表达式。无名函数为“()”。
#if (2)!=2 这个一样会报错,因为内部含有函数,不是常量表达式。
#if 2!=2 这将不报错,因为这是一个常量表达式这个无名函数的功能是返回括号内部“()”的最后一个表达式。
例: (1,2)返回值是2。 (1,2) !=2 相当于 2 !=2.
再说一个例子。
c++中表达式, (1,2,3,4,5.0)返回值是多少? 返回值是 5.0 你可以将“()”看成一个函数,无名函数,返回值为最后一个表达式
int i = 2;
switch(i)
{
case (1, 2): //语法错误
break;
}
----
比如,一个整型的常量,如果被常量表达式初始化,那这个常量也是常量表达式
const int a = 0; //文字常量是常量表达式,因此a就是常量表达式,这样a就可以当作编译期常量
const int b = (1, 2); //b并不是常量表达式,不能当作编译期常量
----回到#if (1, 2) != 2的问题。
这个预编译指令在 GCC 3.4.2能编译通过。所以有些编译器在某些方面对C++语言做了一点扩展。