首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

变态啊int b = 7 * - 1;该怎么解决

2012-02-15 
变态啊:int b 7 * -1#includeiostreamusingnamespacestdintmain(){inta7intb5*-1cout b end

变态啊:int b = 7 * - 1;
#include   <iostream>
using   namespace   std;

int   main(){
int   a   =   7;
int   b   =   5   *   -         1;
cout   < <   b   < <   endl;

//return   0;   不要这行,一样通过编译,运行没错。
}

这个程序是正确的,不过还是不知道为什么,不用返回值一样行,还有就是负号和1之间有那么多空格都可以,高手讲解一下。

[解决办法]
我觉得应该是main前面没有返回值,他默认返回吧,负号和1之间加多个空格当一个空格来处理的
[解决办法]
(1)C++语言标准规定,main函数必然返回整型,如果你不显式返回,那就相当于返回0,编译器会生成一些指令或通过其它方式来强制这一点。

(2)这里应该看成是一个负号和一个7,而不是一个东西。这里需要注意的是负号C++语言的一个单目运算符,不仅对常量有效,对变量也有效,如:
int i = j * - k;
运算符,不管是单目的,双目的,还是三目的,都不一定非要跟操作数挤在一起。
[解决办法]
return 0;其实C++的main函数应该就是int,比如在linux下的g++编译器,如果你用void main就会抱错。并且不返回值也没有问题,C++语言int main()自动返回值的,不过在VC 6.0,void main正确,int main()不返回值有警告。
第二个问题我觉得应该是跟编译器有关的。空格在程序中有意义的情况不多,比如int a跟inta ,这里很明显有没有是有很大区别的,词法分析器对这两个的处理是不一样的。但是在表达式中5 * - 1;这里词法分析应该是四个token,有没有空格只影响词法分析器,不管有没有空格都是四个token,语法分析中*后面应该是个变量或数,我想-1可能是此时才计算出来的吧。
我的想法,不一定正确

热点排行