East Wind 41 发表于 2025-5-13 16:12:32

C251编译器用的是C99语法吗?与C51不一样啊

一文件原来是STC8A工程,用C51编译无错误。改到STC32上来同样语句报错。

原来定义的缓冲区直接赋值0,可以正常编译。用C251编译器时要赋值数组。

32G12K128 发表于 2025-5-13 17:01:16

STC32G12K128 是32位的8051与STC8A8K64D4不是完全兼容的

DebugLab 发表于 2025-5-13 17:46:00

又看到声明时赋值的了
重要的事情说三遍
全局变量禁止在声明时赋值
全局变量禁止在声明时赋值
全局变量禁止在声明时赋值
赶紧去看新手必读
https://www.stcaimcu.com/thread-16535-1-1.html
包含startup.a51时,默认会初始化data(也是idata的低128字节)为0,xdata不操作为上电随机数;不包含startup.a51时,data和xdata为上电随机数
程序只能在函数内执行,全局变量禁止在声明时赋值,赋值的语句必须在函数内,函数外的非声明语句无效
数组可以在初始化时用memset函数全部清零(或其他初始化值)
养成好习惯,函数内的局部变量也不要声明时赋值,而且必须在函数开头声明

DebugLab 发表于 2025-5-13 17:47:59

xxx=0;
这样是不规范的,等号前后数据类型和长度不匹配,不能前面是N个字节,后面是1个字节

jwd 发表于 2025-5-13 20:54:28

stc32没有pdata区了啊

East Wind 41 发表于 2025-5-14 08:26:39

DebugLab 发表于 2025-5-13 17:46
又看到声明时赋值的了
重要的事情说三遍
全局变量禁止在声明时赋值


谢谢版主提示

_奶咖君_ 发表于 2025-5-14 09:12:18

DebugLab 发表于 2025-5-13 17:46
又看到声明时赋值的了
重要的事情说三遍
全局变量禁止在声明时赋值


话说这个全局变量赋值这个,有什么依据么?C251 和 C51编译器的区别么?{:fadai:}我翻了翻你的关于这个问题的论述,,只找到了一个模糊的可能会失效的描述,剩下的描述就都是禁止并没有提及原因。。

_奶咖君_ 发表于 2025-5-14 09:14:24

DebugLab 发表于 2025-5-13 17:46
又看到声明时赋值的了
重要的事情说三遍
全局变量禁止在声明时赋值


,,大概就是找到了一个这个描述,,,几乎没有解释出现这个问题的原因,,,所以可以继续补充一下么

jwd 发表于 2025-5-14 09:22:57

看看stc32的ram区

DebugLab 发表于 2025-5-14 11:08:47

_奶咖君_ 发表于 2025-5-14 09:14
,,大概就是找到了一个这个描述,,,几乎没有解释出现这个问题的原因,,,所以可以继续补充一下么

...

编译器的原因,这样操作值就不对,不要这样操作就可以了
页: [1] 2
查看完整版本: C251编译器用的是C99语法吗?与C51不一样啊