C++十进制分隔符语法错误:为何两行代码编译结果不同?
为什么两行类似代码一个编译通过一个报错?
第一行代码b = (float)a*0,1;能编译通过的原因
这里的逗号是逗号运算符,它是C语言中优先级最低的运算符。整个语句会被编译器拆解为:
- 先执行
b = ((float)a * 0),将计算结果赋值给变量b; - 再计算表达式
1,这个结果会被直接丢弃,不会影响b的值。
这是一个完全合法的表达式语句,因此编译器不会报错。
第二行代码float b = (float)a*0,1;编译报错的原因
这是一条变量声明并初始化的语句,在C语言的声明语法规则里,逗号的作用是分隔多个待声明的变量,而非逗号运算符。编译器会把这句话解析为:
- 声明float类型的变量
b,并用(float)a*0作为初始值; - 把后面的
1当成另一个需要声明的变量名,但1是数字,不符合C语言变量名的命名规则(变量名只能由字母、数字、下划线组成,且不能以数字开头),因此触发语法错误。
内容的提问来源于stack exchange,提问作者MattWeb
相关产品推荐
相关产品推荐

