C语言变量声明时使用+=报错、=+正常的原因解析
C语言变量声明中
+=报错、=+正常的原因解析 一、int f += i;报错的原因
C语言变量声明的初始化语法严格遵循:数据类型 变量名 = 初始值/表达式;,这里的=是初始化操作符,仅用于在声明阶段为变量赋予初始值,并非普通的赋值运算符。
+=属于复合赋值运算符,这类运算符的作用是对已声明完成的变量进行更新赋值(比如f += i等价于f = f + i),但它们不能出现在变量声明的初始化语句中。你的写法违反了C语言的语法规则,因此编译器直接报错,提示你是否误将=写成了+=。
对应报错代码:
int i = 0; int g = 99; do { int f += i; // 不符合声明初始化语法,触发报错 printf("%-6s = %d ","This is",f); i++; } while(i<10);
报错信息:
ff.c:16:11: error: invalid '+=' at end of declaration; did you mean '='? int f += i; ^~ = 1 error generated.
二、int f =+ i;正常运行的原因
这里的=+并不是一个独立的运算符,编译器会将其拆分为两部分:=(初始化操作符)和+i(对变量i取正值的表达式),等价于:
int f = +i;
这种写法完全符合C语言变量声明初始化的语法,+i是合法的初始表达式(当i为正数时,和直接写i的效果一致),因此编译器可以正常编译并运行代码。
对应正常运行代码:
int i = 0; int g = 99; do { int f =+ i; // 被解析为int f = +i; 符合语法规则 printf("%-6s = %d ","This is",f); i++; } while(i<10);
内容的提问来源于stack exchange,提问作者user3737377
相关产品推荐
相关产品推荐

