C51编译器-预处理器

发布者:ByteWanderer最新更新时间:2016-11-14 来源: eefocus关键字:C51  编译器  预处理器 手机看文章 扫描二维码
随时随地手机看文章
Cx51编译器中的预处理器处理源程序文件中的指令。Cx51支持所有的ANSI C指令。

Directives指令

预处理器指令前面不能有空格,并且必须加前缀‘#’如:

#pragma

#include

#define DEBUG 1

下面列出预处理器指信令和简单描述

指令    描述

Define 定义一个预处理器宏或常量

elif   如果前面的if, ifdef, ifndef或elif分支都不成立的话,初始化if条件的一个分支

else       如果前面的if, ifdef或 ifndef分支都不成立的话,初始化if条件的一个分支

endif 结束一个if, ifdef, ifndef, elif, 或 else 块

error 输出用户定义的一个错误信息。这个指令使用编译器发出一个特定的错误信息

ifdef 为条件编译求表达式的值。要被计算的参数就是一个definition 定义的名字

ifndef     与ifdef相同,只是如果这个名字没有被定义时运算结果为真

if     为条件编译求表达式的值

include    从外部文件中读取源程序文本。

line   指定一个行号和一个可选的文件名,这个指令用于在错误信息中定位错误的位置。Specifies a line number together with an optional filename. These specifications are used in error messages to identify the error position.

pragma     允许你使用可以在C51命令行上使用的控制指令。Allows you to specify control directives that may be included on the C51 command line. Pragmas may contain the same control directives that are specified on the command line.

undef 检查一个宏或常量是否已经定义

Stringize Operator(#)

字符化操作符#

如果操作符出现在宏的参数的前面,参数库就会做为字符串传递到宏里。如

#define stringer(x)  printf (#x "\n")

stringer (text)

预处理器处理的结果为:

printf ("text\n")

Token-pasting operator(##)

这个操作符在宏定义中连结两个参数。它允许两个分开的标号在宏定义中合并为一个标号

如果在宏定中一个宏参数名字紧随着或紧跟着这操作符,宏参数和这个操作符被参数传递的值取代。邻接着操作符的文本不是宏参数名称的宏是不受影响的。如:

#define paster(n) printf ("token" #n " = %d", token##n)

paster (9);

预处理器处理的结果为:

printf ("token9 = %d", token9);

Predefined Macro Constants预定义宏常量

常量        描述

_ _C51_ _     C51编译器的版本Version number of the Cx51 compiler (for example, 610 for version 6.10).

_ _DATE_ _    编译开始的日期Date when the compilation was started.

_ _FILE_ _    被编译文件的名字Name of the file being compiled.

_ _LINE_ _    被编译文件当前的行号Current line number in the file being compiled.

_ _MODEL_ _   选择的存储器模式Memory model selected (0 for small, 1 for compact, 2 for large).

_ _TIME_ _    编译开始的时间Time when the compilation was started.__STDC_ _ 定义为1时,表示完全遵守ANSI C标准

关键字:C51  编译器  预处理器 引用地址:C51编译器-预处理器

上一篇:C51编译器-高级编程技巧(1)-定制文件
下一篇:C51编译器-语言扩展(6)-重载函数

推荐阅读最新更新时间:2024-03-16 15:20

C51怎样将子程序段定位在1个固定的地址
问:C51 怎样将1个子程序段定位在1个固定的地址位置? 以下2问题均要用C51解决 1。 怎样将1个子程序段定位在1个固定的地址位置? 例如将 INT BCD2HEX(INT XX)定位在1000H 2。 HOW在EEPROM 中固定的位置存放1字符串? 如在200H处放“COPYRIGHT 2001-11” 答: 函数定位与变量定位... 1、函数定位: 假如要把C源文件 tools.c 中的函数 int BIN2HEX(int xx) { ... } 放在CODE MEMORY的0x1000处,先编译该工程,然后打开该工程的M51文件,在 * * * C O D E M E M O R Y
[单片机]
c51: 串口中断方式,收发字符串
/* 程序设计功能: 1.参数 f=12MHZ,baud=1200 2.串口中断方式:发送字符串存放字符数组tran_buf 中,接收字符串存放字符数组rec_buf 中。 2.发送字符串由16位键盘控制。由T2定时中断,每10ms扫描一次键盘。不同按键发送不同字符串。 */ #include reg52.h #include string.h #define uchar unsigned char //发送字符串缓存 uchar tran_buf ; //接收字符串缓存 uchar rec_buf ; uchar tnum=0; uchar rnum=0; //串口初始化
[单片机]
利用全局及外部变量实现C51无能数化调用A51函数
摘要: 利用C51全局及外部变量,可实现无参数化调用A51函数,不但避免开了传统C51调用C51时繁琐的接口约定,而且把在A51中所用到的变量全部放至C51程序中而不必考虑变量在内存中的位置,使编程更加简洁。用实例验证了该方法的优越性和有效性。 关键词: C51 A51 汇编语言 无参数化调用 电子技术应用 2001年第7期发表苟帅的文章“ASM51无参数化调用C51函数的实现”,阐述了ASM51无参数化调用C51函数的实现原理并给出实例来验证该方法的优越性和可行性。作者在文章中
[应用]
C51单片机 蜂鸣器两只蝴蝶代码
#include // 这是 单片机音乐代码生成器 生成的代码 #define uchar unsigned char sbit beepIO=P1^5; // 输出 为 P1.5 可以修改 成 其它 IO 口 uchar m,n; uchar code T ={{0,0}, {0xF8,0x8B},{0xF8,0xF2},{0xF9,0x5B},{0xF9,0xB7},{0xFA,0x14},{0xFA,0x66},{0xFA,0xB9},{0xFB,0x03},{0xFB,0x4A},{0xFB,0x8F},{0xFB,0xCF},{0xFC,0x0B}, {0xFC,0x43},{0xFC,0x
[单片机]
C51单片机P4口使用
C51单片机(STC11L32/48XE)的P4可以像其他IO可以作为正常的IO来使用。 如图:
[单片机]
<font color='red'>C51</font>单片机P4口使用
时钟芯片ds12c887的C51驱动程序
/************************************************************* 文件名称:ds12c887.c 适用范围:时钟芯片ds12c887的驱动程序 *************************************************************/ #include /* 命令常量定义 */ #define CMD_START_DS12C887 0x20 /* 开启时钟芯片 */ #define CMD_START_OSCILLATOR 0x70 /* 开启振荡器, 处于抑制状态 */ #define CMD_CLOSE_DS12C
[单片机]
keil c51中C程序的启动过程
汇编是从org 0000h开始启动,那么keil c51是如何启动main()函数的?keil c51有一个启动程序startup.a51,它总是和c程序一起编译和链接。下面看看它和main()函数是如何编译的; //主函数如下; void main(void) { while (1) 这是个无条件空循环。 { } } 把上面的main()函数编译后的汇编程序和反汇编代码整理后对照如下; ?C_C51STARTUP SEGMENT CODE ?PR?main?TESTMAIN SEGMENT CODE ?STACK SEGMENT IDATA RSEG ?STACK
[单片机]
C51的程序设计规范
现在 单片机 的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为单片机开发人员必须要掌握的一门语言了。 作为一门工具,最终的目的就是实现功能。在满足这个前提条件下,我们希望我们的程序能很容易地被别人读懂,或者能够很容易地读懂别人的程序,在团体合作开发中就能起到事半功倍之效。在网上请求帮助时,如能以规范的写法贴出程序,网友会比较容易地明白你的问题,则会比较快的得到网友的帮助,否则让人看上半天也不明所以然,这样就达不到预期的效果了。因此,为了便于源程序的交流,减少合作开发中的障碍,希望大家能够探讨一下C51的编程规范。把各人认为好的建议提出来,然后做一个总结,作为一种大家一致认同的规范,我认为
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved