ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Keil C51语法注意点 与C语法区别(变量位置问题)

Keil C51语法注意点 与C语法区别(变量位置问题) 前言Keil C51 环境被广泛用于高校教学中而 Keil C51 是以 C 语言为基础的#includeAtmel/REGX52.Hvoidmain(){P1_10;inti1;while(1){}}但是上面这一段看似正常的 C 代码实际上在 Keil C51 编译器下会报错C51 COMPILER V9.60.7.0 - SN: K1DZC-0M6G0C COPYRIGHT Copyright(C)2012-2022ARM Limited or its Affiliates. All rights reserved. *** ERROR C141 IN LINE6OF .\src\main.c: syntax error nearint, expected__asm*** ERROR C202 IN LINE6OF .\src\main.c:i:undefined identifier因为 Keil C51 编译器要求变量在代码块开头声明#includeAtmel/REGX52.Hvoidmain(){inti1;//写在代码块开头才行P1_10;while(1){}}这与现代 C 语言标准有区别背景知识C 语言实际上是经过了长久的发展而来所以语法一直在不断扩充完善KR C1978C89/C901989/1990C991999C112011C232024注仅记录语言特性有较大更新的版本C95、C17/C18等小幅修订版本省略如今我们熟悉的C语言一般是C99修订的语法版本但问题在于Keil C51编译器使用的是修订的C89/C90语法C89/C90Keil C51所以意味着有些现代C语言语法是无法使用的变量位置问题实际上最大的不同点就是C99允许局部变量声明在任意位置Keil C51及C90只允许局部变量声明在代码块开头代码块开头指的是{...}开头的位置以下是合法代码#includeAtmel/REGX52.Hinta0;// 允许voidmain(){// 代码块开头intb1;// 允许charc1;// 允许floatd0.5,e.0;// 允许P1_10;// 一旦执行非声明操作就不是开头//! int f 0; // 错误因为不在代码块开头while(1){// 代码块开头intg1;// 允许charh1;// 允许floati0;// 允许a1;// 一旦执行非声明操作就不是开头//! int o 0; // 错误因为不在代码块开头}}类似的Keil C51也不允许在for中声明#includeAtmel/REGX52.Hvoidmain(){// for (int i 0; i 10; i) //错误不能在for中初始化inti;for(i0;i10;i)//这样写才行{}while(1){}}
返回列表