硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1301|回复: 3
收起左侧

[有问必答] 问一个C语言问题

[复制链接]

3

主题

14

回帖

23

积分

新手上路

积分
23
发表于 2022-10-14 11:49:23 | 显示全部楼层 |阅读模式
如题:

#define AA_IX    K6502_ReadZpW( K6502_Read( PC++ ) + X )// (Indirect),Y
#define AA_IY    K6502_ReadZpW( K6502_Read( PC++ ) ) + Y
// Zero Page
#define AA_ZP    K6502_Read( PC++ )
// Zero Page,X
#define AA_ZPX   (BYTE)( K6502_Read( PC++ ) + X )
// Zero Page,Y
#define AA_ZPY   (BYTE)( K6502_Read( PC++ ) + Y )




在ESP32例程上,为什么编译 AA_ZP 宏定义出现PC未定义的错误,而其他几个宏却不会? 把PC++改为PC 就能编译通过这是不能自增传入参数?


在KEIL5上编译是不会出现该宏定义问题



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2022-10-14 15:20:50 | 显示全部楼层
ESP32的话,你应该用的GCC编译的吧。

我测试下了GNU90,99和11标准,都正常。

回复

使用道具 举报

3

主题

14

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2022-10-14 15:30:08 | 显示全部楼层
eric2013 发表于 2022-10-14 15:20
ESP32的话,你应该用的GCC编译的吧。

我测试下了GNU90,99和11标准,都正常。

对的,gcc,后面已解决 参考https://blog.csdn.net/huipengzhao/article/details/6734002
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2023-2-2 14:14:25 | 显示全部楼层
本帖最后由 ihavedone 于 2023-2-2 14:17 编辑

这个问题的原因是,C 标准没有定义 例如 A[i++] = B[ i ] 这种代码,是理解成 A[ i ] = B[ i ]; i++;  还是理解成  A[ i ] = B[i+1]; i++;
对于 A[i++] 来说,是先处理 A,后 i++。
但是对于整个表达式,C标准没有规定必须要处理完表达式中所有的 i 之后才 i++,而是将这个交给编译器自己去处理。

有些编译器会自动处理一个结果出来,不会报错。
有些编译器会提示这个操作未定义,需要用户进一步明确代码逻辑。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 06:48 , Processed in 0.154956 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表