首页 > 其他分享 >【嵌入式】C51 和标准 C 语言的关键字对比详解

【嵌入式】C51 和标准 C 语言的关键字对比详解

时间:2024-07-30 13:57:42浏览次数:19  
标签:定义 C51 示例 int 嵌入式 关键字 详解 用于 变量

LuckiBit

目录

C51 和标准 C 语言的关键字对比详解

1. 概述

C51 和标准 C 语言在关键字上有显著的差异,主要是因为 C51 是专门为 8051 单片机设计的编程语言,它添加了一些特定的关键字以便更高效地进行硬件控制和内存管理。而标准 C 语言则是通用的编程语言,适用于各种平台。本文将通过表格和详细解释,全面对比 C51 和标准 C 语言的关键字,帮助读者更好地理解两者的区别。

2. C51 和标准 C 语言的关键字对比

以下是 C51 和标准 C 语言的关键字对比表格,包括两者的全部关键字:

2.1 关键字对比表

C51 关键字说明标准 C 语言关键字说明
bit位变量,占用 1 位内存auto自动存储类别
sfr特殊功能寄存器break跳出循环或 switch 语句
sbit特殊功能寄存器中的位caseswitch 语句中的一个分支
data内部数据存储器char字符型变量
idata内部间接数据存储器const常量
pdata页间接数据存储器continue继续下一次循环
xdata外部数据存储器defaultswitch 语句中的默认分支
code程序存储器(ROM)dodo-while 循环
bdata位寻址区域double双精度浮点型变量
interrupt定义中断服务函数elseif 语句的另一分支
using指定寄存器组enum枚举类型
reentrant可重入函数extern声明变量在外部定义
--float单精度浮点型变量
--forfor 循环
--goto无条件跳转
--if条件语句
--int整型变量
--long长整型变量
--register寄存器变量
--return返回语句
--short短整型变量
--signed有符号变量
--sizeof获取变量大小
--static静态变量
--struct结构体
--switch多路分支语句
--typedef类型定义
--union联合体
--unsigned无符号变量
--void空类型
--volatile易变变量
--whilewhile 循环
--_Alignas指定对齐方式
--_Alignof获取对齐方式
--_Atomic原子类型
--_Bool布尔类型
--_Complex复数类型
--_Generic泛型选择器
--_Imaginary虚数类型
--_Noreturn无返回值类型
--_Static_assert静态断言
--_Thread_local线程局部存储

2.2 对比表详细解释

2.2.1 C51 特定关键字
  • bit:用于定义位变量,占用 1 位内存。
  • sfr:用于定义特殊功能寄存器,映射硬件寄存器地址。
  • sbit:用于定义特殊功能寄存器中的位。
  • data:用于将变量存储在内部数据存储器中。
  • idata:用于将变量存储在内部间接数据存储器中。
  • pdata:用于将变量存储在页间接数据存储器中。
  • xdata:用于将变量存储在外部数据存储器中。
  • code:用于将常量或只读数据存储在程序存储器(ROM)中。
  • bdata:用于将变量存储在位寻址区域中。
  • interrupt:用于定义中断服务函数。
  • using:用于指定寄存器组,以优化寄存器使用。
  • reentrant:用于定义可重入函数,允许函数在中断中被调用。
2.2.2 标准 C 语言关键字
  • auto:用于定义自动存储类别的变量。
  • break:用于跳出循环或 switch 语句。
  • case:用于定义 switch 语句中的一个分支。
  • char:用于定义字符型变量。
  • const:用于定义常量。
  • continue:用于继续下一次循环。
  • default:用于定义 switch 语句中的默认分支。
  • do:用于定义 do-while 循环。
  • double:用于定义双精度浮点型变量。
  • else:用于定义 if 语句的另一分支。
  • enum:用于定义枚举类型。
  • extern:用于声明变量在外部定义。
  • float:用于定义单精度浮点型变量。
  • for:用于定义 for 循环。
  • goto:用于无条件跳转。
  • if:用于定义条件语句。
  • int:用于定义整型变量。
  • long:用于定义长整型变量。
  • register:用于定义寄存器变量。
  • return:用于定义返回语句。
  • short:用于定义短整型变量。
  • signed:用于定义有符号变量。
  • sizeof:用于获取变量大小。
  • static:用于定义静态变量。
  • struct:用于定义结构体。
  • switch:用于定义多路分支语句。
  • typedef:用于定义类型别名。
  • union:用于定义联合体。
  • unsigned:用于定义无符号变量。
  • void:用于定义空类型。
  • volatile:用于定义易变变量。
  • while:用于定义 while 循环。
  • _Alignas:用于指定对齐方式。
  • _Alignof:用于获取对齐方式。
  • _Atomic:用于定义原子类型。
  • _Bool:用于定义布尔类型。
  • _Complex:用于定义复数类型。
  • _Generic:用于定义泛型选择器。
  • _Imaginary:用于定义虚数类型。
  • _Noreturn:用于定义无返回值类型。
  • _Static_assert:用于定义静态断言。
  • _Thread_local:用于定义线程局部存储。

通过以上表格和解释,我们可以看到 C51 和标准 C 语言在关键字上的差异。C51 引入了许多特定的关键字,以便更高效地进行硬件控制和内存管理,而标准 C 语言则更通用,适用于更广泛的平台和应用。

2.3 C51 特定关键字

关键字说明示例
bit位变量,占用 1 位内存bit myBitVar;
sfr特殊功能寄存器sfr P1 = 0x90;
sbit特殊功能寄存器中的位sbit P1_0 = P1^0;
data内部数据存储器unsigned char data myDataVar;
idata内部间接数据存储器unsigned char idata myIDataVar;
pdata页间接数据存储器unsigned char pdata myPDataVar;
xdata外部数据存储器unsigned char xdata myXDataVar;
code程序存储器(ROM)const char code myString[] = "Hello, world!";
bdata位寻址区域unsigned char bdata myBDataVar;
interrupt定义中断服务函数void timer0_isr(void) interrupt 1 { /* ISR code */ }
using指定寄存器组void myFunction(void) using 1 { /* Function code */ }
reentrant可重入函数void myReentrantFunc(void) reentrant { /* Code */ }

2.4 标准 C 语言关键字

关键字说明示例
auto自动存储类别auto int a;
break跳出循环或 switch 语句break;
caseswitch 语句中的一个分支case 1: break;
char字符型变量char c = 'A';
const常量const int max = 100;
continue继续下一次循环continue;
defaultswitch 语句中的默认分支default: break;
dodo-while 循环do { /* code */ } while (condition);
double双精度浮点型变量double d = 3.14;
elseif 语句的另一分支else { /* code */ }
enum枚举类型enum colors { RED, GREEN, BLUE };
extern声明变量在外部定义extern int globalVar;
float单精度浮点型变量float f = 3.14f;
forfor 循环for (int i = 0; i < 10; i++) { /* code */ }
goto无条件跳转goto label;
if条件语句if (condition) { /* code */ }
int整型变量int n = 42;
long长整型变量long l = 1234567890L;
register寄存器变量register int fastVar;
return返回语句return 0;
short短整型变量short s = 32767;
signed有符号变量signed int si = -10;
sizeof获取变量大小sizeof(int);
static静态变量static int count = 0;
struct结构体struct Point { int x; int y; };
switch多路分支语句switch (n) { case 1: break; }
typedef类型定义typedef unsigned int uint;
union联合体union Data { int i; float f; };
unsigned无符号变量unsigned int u = 10;
void空类型void func(void);
volatile易变变量volatile int v;
whilewhile 循环while (condition) { /* code */ }
_Alignas指定对齐方式_Alignas(16) int a;
_Alignof获取对齐方式_Alignof(int);
_Atomic原子类型_Atomic int atomicVar;
_Bool布尔类型_Bool flag = 1;
_Complex复数类型_Complex double z = 1.0 + 2.0i;
_Generic泛型选择器_Generic(x, int: "int", float: "float");
_Imaginary虚数类型_Imaginary float y = 1.0i;
_Noreturn无返回值类型_Noreturn void exit(int);
_Static_assert静态断言_Static_assert(sizeof(int) == 4, "int size");
_Thread_local线程局部存储_Thread_local int tlVar;

3. 示例详细解释

3.1 C51 特定关键字

bit

用于定义位变量,占用 1 位内存,节省空间。

示例

bit myBitVar;
sfr

用于定义特殊功能寄存器,映射硬件寄存器地址。

示例

sfr P1 = 0x90;
sbit

用于定义特殊功能寄存器中的位。

示例

sbit P1_0 = P1^0;
data

用于将变量存储在内部数据存储器中。

示例

unsigned char data myDataVar;
idata

用于将变量存储在内部间接数据存储器中。

示例

unsigned char idata myIDataVar;
pdata

用于将变量存储在页间接数据存储器中。

示例

unsigned char pdata myPDataVar;
xdata

用于将变量存储在外部数据存储器中。

示例

unsigned char xdata myXDataVar;
code

用于将常量或只读数据存储在程序存储器(ROM)中。

示例

const char code myString[] = "Hello, world!";
bdata

用于将变量存储在位寻址区域中。

示例

unsigned char bdata myBDataVar;
interrupt

用于定义中断服务函数。

示例

void timer0_isr(void) interrupt 1 {
    /* ISR code */
}
using

用于指定寄存器组,以优化寄存器使用。

示例

void myFunction(void) using 1 {
    /* Function code */
}
reentrant

用于定义可重入函数,允许函数在中断中被调用。

示例

void my

**示例**:
```c
void myReentrantFunc(void) reentrant {
    /* Code */
}

3.2 标准 C 语言关键字

auto

用于定义自动存储类别的变量,默认存储类别。

示例

auto int a;
break

用于跳出循环或 switch 语句。

示例

break;
case

用于定义 switch 语句中的一个分支。

示例

case 1:
    break;
char

用于定义字符型变量。

示例

char c = 'A';
const

用于定义常量,变量的值不能被修改。

示例

const int max = 100;
continue

用于继续下一次循环。

示例

continue;
default

用于定义 switch 语句中的默认分支。

示例

default:
    break;
do

用于定义 do-while 循环,先执行循环体再判断条件。

示例

do {
    /* code */
} while (condition);
double

用于定义双精度浮点型变量。

示例

double d = 3.14;
else

用于定义 if 语句的另一分支。

示例

if (condition) {
    /* if code */
} else {
    /* else code */
}
enum

用于定义枚举类型。

示例

enum colors {
    RED,
    GREEN,
    BLUE
};
extern

用于声明变量在外部定义,通常用于跨文件共享变量。

示例

extern int globalVar;
float

用于定义单精度浮点型变量。

示例

float f = 3.14f;
for

用于定义 for 循环。

示例

for (int i = 0; i < 10; i++) {
    /* code */
}
goto

用于无条件跳转到标签。

示例

goto label;
if

用于定义条件语句。

示例

if (condition) {
    /* code */
}
int

用于定义整型变量。

示例

int n = 42;
long

用于定义长整型变量。

示例

long l = 1234567890L;
register

用于定义寄存器变量,提示编译器将变量存储在寄存器中以提高访问速度。

示例

register int fastVar;
return

用于定义返回语句,返回函数的结果。

示例

return 0;
short

用于定义短整型变量。

示例

short s = 32767;
signed

用于定义有符号变量。

示例

signed int si = -10;
sizeof

用于获取变量或数据类型的大小。

示例

sizeof(int);
static

用于定义静态变量,其作用域仅限于所在的函数或文件,但其值在函数调用结束后仍然存在。

示例

static int count = 0;
struct

用于定义结构体。

示例

struct Point {
    int x;
    int y;
};
switch

用于定义多路分支语句,根据变量的值执行不同的代码块。

示例

switch (n) {
    case 1:
        break;
    default:
        break;
}
typedef

用于定义类型别名。

示例

typedef unsigned int uint;
union

用于定义联合体,可以在同一内存空间中存储不同类型的数据。

示例

union Data {
    int i;
    float f;
};
unsigned

用于定义无符号变量。

示例

unsigned int u = 10;
void

用于定义空类型,常用于函数返回类型表示不返回值。

示例

void func(void);
volatile

用于定义易变变量,提示编译器该变量可能会被程序外的因素修改,不应优化。

示例

volatile int v;
while

用于定义 while 循环,只要条件为真就反复执行循环体。

示例

while (condition) {
    /* code */
}
_Alignas

用于指定对齐方式。

示例

_Alignas(16) int a;
_Alignof

用于获取对齐方式。

示例

_Alignof(int);
_Atomic

用于定义原子类型,保证操作的原子性。

示例

_Atomic int atomicVar;
_Bool

用于定义布尔类型。

示例

_Bool flag = 1;
_Complex

用于定义复数类型。

示例

_Complex double z = 1.0 + 2.0i;
_Generic

用于定义泛型选择器,根据表达式的类型选择对应的表达式。

示例

_Generic(x, int: "int", float: "float");
_Imaginary

用于定义虚数类型。

示例

_Imaginary float y = 1.0i;
_Noreturn

用于定义无返回值类型的函数,表示该函数不返回到调用者。

示例

_Noreturn void exit(int);
_Static_assert

用于定义静态断言,在编译时进行条件检查。

示例

_Static_assert(sizeof(int) == 4, "int size");
_Thread_local

用于定义线程局部存储,变量在每个线程中有独立的副本。

示例

_Thread_local int tlVar;

4. 总结

通过上述对比和解释,我们可以看出 C51 和标准 C 语言在关键字上的差异。C51 添加了一些特定的关键字,以便更高效地进行硬件控制和内存管理,而标准 C 语言则更通用,适用于更广泛的平台和应用。了解这些差异有助于程序员在不同平台和项目中更好地选择和使用编程语言。

5. 结束语

  1. 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C51和标准C关键字区别有了更深入的理解和认识。
  2. 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持点我关注❤️

相关文章:

标签:定义,C51,示例,int,嵌入式,关键字,详解,用于,变量
From: https://blog.csdn.net/EleganceJiaBao/article/details/140769578

相关文章

  • 【MySQL】MySQL数据类型详解及代码示例
    目录数值类型整数类型浮点数和定点数类型字符串类型定长字符串(CHAR)可变长度字符串(VARCHAR)文本类型(TEXT)日期和时间类型二进制类型特殊类型        在数据库设计中,选择合适的数据类型对于数据库的性能和存储效率至关重要。MySQL作为最流行的关系型数据库管......
  • 归并排序详解
    归并排序简介什么是排序算法排序算法是算法的基石,许多算法都基于排序算法,比如二分搜索、离散化等。这篇文章将要详细介绍将要介绍排序算法之一——归并排序。归并排序的性能归并排序的时间复杂度稳定在\(\mathcal{O}(n\log(n))\),是一种具有稳定性(即相同元素相对位置不变)的排......
  • ChatGPT:人工智能聊天机器人的工作原理详解
    ChatGPT:人工智能聊天机器人的工作原理详解在近年来的科技浪潮中,人工智能(AI)的飞速发展让我们见证了无数令人惊叹的成果。其中,ChatGPT作为一款先进的聊天机器人,凭借其出色的对话能力和广泛的应用场景,引起了广泛的关注。那么,ChatGPT是如何工作的呢?本文将为你揭开ChatGPT的神秘......
  • Android ListView 详解
    AndroidListView详解介绍“Listview”是一种用户界面设计中的布局方式,它通过列表的形式展示信息,是一种将信息组织为条目(通常是行)的视图形式,每一项条目都是列表中的一行,可能包含文本、图像或其他元素。基本使用xml<?xmlversion="1.0"encoding="utf-8"?><RelativeLayout......
  • 使用带有 pythonKit XCODE 的嵌入式 Python,在 iOS 应用程序中与 OpenCV-python 签名不
    我根据Beewares使用指南在XCODE中将Python嵌入到我的iOS项目中https://github.com/beeware/Python-Apple-support/blob/main/USAGE.md运行时,我得到pythonKit找不到由ultralytics导入的cv2错误。当我将OpenCV-python添加到我的app_packages文件夹时......
  • Java代理模式详解
    Java代理模式详解概念代理模式是一种设计模式,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。在Java中,代理模式主要分为静态代理和动态代理。静态代理静态......
  • 机器学习:详解是否要使用端到端的深度学习?(Whether to use end-to-end learning?)
    详解是否要使用端到端的深度学习?假设正在搭建一个机器学习系统,要决定是否使用端对端方法,来看看端到端深度学习的一些优缺点,这样就可以根据一些准则,判断的应用程序是否有希望使用端到端方法。这里是应用端到端学习的一些好处,首先端到端学习真的只是让数据说话。所以如果有足够多......
  • Dom-API | MutationObserver使用方法详解
    MutationObserver介绍MutationObserver是是一个用于监视DOM变动的WebAPI。通过它可以监控DOM树中的更改,比如元素的属性、子元素的增加和删除等,并在这些变化发生时执行回调函数。可以替代过时的MutationEvents,它具有更高的性能和更广的适用性。使用步骤详细说明1.创......
  • 两种常见排序(冒泡排序和选择排序)详解
    一、冒泡排序1.1、冒泡排序的原理讲解。例如有以下7个数的无序数列储存在数组arr[7]中,现在需要用冒泡排序法来对以下序列进行排序冒泡排序是比较相邻的两个数,如果第一个数比第二个数大,这两个数就要交换两个数的位置,如果第一个数小于第二个数则不用变换位置,例如第一个数3比......
  • 关于嵌入式QML dict_pinyin.dat的编译更新
    硬件平台:全志的A40I-H 软件平台:Linux内核版本3.10.65QT版本:5.9.0 重新编译dict_pinyin.dat的作用 1.解决输入"nss"导致输入法崩溃的问题2.解决输入某些嵌入式平台不支持的字体,例如“捃”,导致程序崩溃的问题 源码路径:~/qt-everywhere-opensource-src-5.9.0/qtvirtual......