读书人

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

发布时间: 2012-02-15 12:09:44 作者: rapoo

变态啊: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可能是此时才计算出来的吧。
我的想法,不一定正确

读书人网 >C++

热点推荐