编译提示 **lvalue required as increment operand** 的问题分析

本文深入解析C语言中自增自减操作符的使用规则,特别强调了左值要求,即操作数必须为变量而非常量。文章通过实例展示了非法操作,如对数组名或函数返回值应用自增自减,以及尝试向数组名赋值引发的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译提示 lvalue required as increment operand 的问题分析

字面意思是提示我们代码中的左值应该是一个可以增加(或减少)的一个操作数,即左侧被赋值的数应该是一个变量,不能是常量。原因也很简单:我们在对某一个值进行自增或自减的操作时,希望保留的是计算后的值,变量可以很容易地在原始地址上保留计算后的值,而常量则不能被自增自减所修改,故出此错误。

C语言中的常量主要有整型常量(int a = 0;),字符型常量( char b = “c”;),实型常量(double d = 2e3f;),除了这些显而易见的常量,还有一些容易被忽略的,譬如:任一类型的数组的首地址,函数地址。

以下操作是不被允许的:

1,

 int a[8]={1,2,3,4,5,6,7,8};
	  a++;
	  ++a;
	  a--;
	  --a;

2,

int fun()
	{
    		return 0;
	}
	
	++fun();

千万不要想写骚代码而犯了这样的错~

此外,向数组名赋值的操作( a += 1 )会引起另外的错误: assignment to expression with array type

C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:91:5: error: 'int index' redeclared as different kind of entity 91 | int index = 0; // 索引指示当前要存储的位置 | ^~~~~ In file included from c:\users\conservator\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.1.0-gcc10.3-e5f9fec\xtensa-lx106-elf\include\string.h:24, from C:\Users\conservator\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/Arduino.h:33, from C:\Users\conservator\AppData\Local\Temp\arduino\sketches\304EB848CF381B8A7A8E84D646752A81\sketch\mqttToAliyun.ino.cpp:1: c:\users\conservator\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.1.0-gcc10.3-e5f9fec\xtensa-lx106-elf\include\strings.h:64:7: note: previous declaration 'char* index(const char*, int)' 64 | char *index(const char *, int) __pure; /* LEGACY */ | ^~~~~ C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino: In function 'void get_value()': C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:97:11: error: invalid types 'char [10][char*(const char*, int)]' for array subscript 97 | buffer[index] = data; | ^ C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:98:5: warning: ISO C++ forbids incrementing a pointer of type 'char* (*)(const char*, int)' [-Wpointer-arith] 98 | index++; | ^~~~~ C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:98:5: error: lvalue required as increment operand C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:101:13: error: ISO C++ forbids comparison between pointer and integer [-fpermissive] 101 | if (index >= bufferSize) | ~~~~~~^~~~~~~~~~~~~ C:\Users\conservator\Desktop\mqttToAliyun\mqttToAliyun.ino:106:11: error: assignment of function 'char* index(const char*, int)' 106 | index = 0; | ~~~~~~^~~ exit status 1 Compilation error: 'int index' redeclared as different kind of entity
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值