前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【嵌入式】C51 和标准 C 语言的关键字对比详解

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

作者头像
LuckiBit
发布2024-12-11 11:14:35
发布2024-12-11 11:14:35
37600
代码可运行
举报
文章被收录于专栏:C语言C语言
运行总次数:0
代码可运行

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

特殊功能寄存器中的位

case

switch 语句中的一个分支

data

内部数据存储器

char

字符型变量

idata

内部间接数据存储器

const

常量

pdata

页间接数据存储器

continue

继续下一次循环

xdata

外部数据存储器

default

switch 语句中的默认分支

code

程序存储器(ROM)

do

do-while 循环

bdata

位寻址区域

double

双精度浮点型变量

interrupt

定义中断服务函数

else

if 语句的另一分支

using

指定寄存器组

enum

枚举类型

reentrant

可重入函数

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

线程局部存储

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;

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 语句的另一分支

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; }

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;

3. 示例详细解释

3.1 C51 特定关键字
bit

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
bit myBitVar;
sfr

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
sfr P1 = 0x90;
sbit

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
sbit P1_0 = P1^0;
data

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
unsigned char data myDataVar;
idata

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
unsigned char idata myIDataVar;
pdata

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
unsigned char pdata myPDataVar;
xdata

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
unsigned char xdata myXDataVar;
code

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
const char code myString[] = "Hello, world!";
bdata

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
unsigned char bdata myBDataVar;
interrupt

用于定义中断服务函数。

示例

代码语言:javascript
代码运行次数:0
运行
复制
void timer0_isr(void) interrupt 1 {
    /* ISR code */
}
using

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
void myFunction(void) using 1 {
    /* Function code */
}
reentrant

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
void my

**示例**:
```c
void myReentrantFunc(void) reentrant {
    /* Code */
}
3.2 标准 C 语言关键字
auto

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
auto int a;
break

用于跳出循环或 switch 语句。

示例

代码语言:javascript
代码运行次数:0
运行
复制
break;
case

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
case 1:
    break;
char

用于定义字符型变量。

示例

代码语言:javascript
代码运行次数:0
运行
复制
char c = 'A';
const

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
const int max = 100;
continue

用于继续下一次循环。

示例

代码语言:javascript
代码运行次数:0
运行
复制
continue;
default

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
default:
    break;
do

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
do {
    /* code */
} while (condition);
double

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
double d = 3.14;
else

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
if (condition) {
    /* if code */
} else {
    /* else code */
}
enum

用于定义枚举类型。

示例

代码语言:javascript
代码运行次数:0
运行
复制
enum colors {
    RED,
    GREEN,
    BLUE
};
extern

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
extern int globalVar;
float

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
float f = 3.14f;
for

用于定义 for 循环。

示例

代码语言:javascript
代码运行次数:0
运行
复制
for (int i = 0; i < 10; i++) {
    /* code */
}
goto

用于无条件跳转到标签。

示例

代码语言:javascript
代码运行次数:0
运行
复制
goto label;
if

用于定义条件语句。

示例

代码语言:javascript
代码运行次数:0
运行
复制
if (condition) {
    /* code */
}
int

用于定义整型变量。

示例

代码语言:javascript
代码运行次数:0
运行
复制
int n = 42;
long

用于定义长整型变量。

示例

代码语言:javascript
代码运行次数:0
运行
复制
long l = 1234567890L;
register

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
register int fastVar;
return

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
return 0;
short

用于定义短整型变量。

示例

代码语言:javascript
代码运行次数:0
运行
复制
short s = 32767;
signed

用于定义有符号变量。

示例

代码语言:javascript
代码运行次数:0
运行
复制
signed int si = -10;
sizeof

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
sizeof(int);
static

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
static int count = 0;
struct

用于定义结构体。

示例

代码语言:javascript
代码运行次数:0
运行
复制
struct Point {
    int x;
    int y;
};
switch

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
switch (n) {
    case 1:
        break;
    default:
        break;
}
typedef

用于定义类型别名。

示例

代码语言:javascript
代码运行次数:0
运行
复制
typedef unsigned int uint;
union

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
union Data {
    int i;
    float f;
};
unsigned

用于定义无符号变量。

示例

代码语言:javascript
代码运行次数:0
运行
复制
unsigned int u = 10;
void

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
void func(void);
volatile

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
volatile int v;
while

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
while (condition) {
    /* code */
}
_Alignas

用于指定对齐方式。

示例

代码语言:javascript
代码运行次数:0
运行
复制
_Alignas(16) int a;
_Alignof

用于获取对齐方式。

示例

代码语言:javascript
代码运行次数:0
运行
复制
_Alignof(int);
_Atomic

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
_Atomic int atomicVar;
_Bool

用于定义布尔类型。

示例

代码语言:javascript
代码运行次数:0
运行
复制
_Bool flag = 1;
_Complex

用于定义复数类型。

示例

代码语言:javascript
代码运行次数:0
运行
复制
_Complex double z = 1.0 + 2.0i;
_Generic

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
_Generic(x, int: "int", float: "float");
_Imaginary

用于定义虚数类型。

示例

代码语言:javascript
代码运行次数:0
运行
复制
_Imaginary float y = 1.0i;
_Noreturn

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
_Noreturn void exit(int);
_Static_assert

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
_Static_assert(sizeof(int) == 4, "int size");
_Thread_local

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

示例

代码语言:javascript
代码运行次数:0
运行
复制
_Thread_local int tlVar;

4. 总结

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

5. 结束语

  1. 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C51和标准C关键字区别有了更深入的理解和认识。
  2. 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C51 和标准 C 语言的关键字对比详解
    • 1. 概述
    • 2. C51 和标准 C 语言的关键字对比
      • 2.1 关键字对比表
      • 2.2 对比表详细解释
      • 2.3 C51 特定关键字
      • 2.4 标准 C 语言关键字
    • 3. 示例详细解释
      • 3.1 C51 特定关键字
      • 3.2 标准 C 语言关键字
    • 4. 总结
    • 5. 结束语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档