当前位置:首页 » 编程软件 » 条件编译命令

条件编译命令

发布时间: 2023-09-14 22:20:12

‘壹’ proteus8.7怎么编译代码

proteus单片机代码编译的方法有三种
、一般情况下,对c语言程序进行编译时,所有的程序都要参加编译,但有时候,对于有些内容,只希望在相关条件满足时才对其进行编译,这就要用到条件编译。条件编译可以选择不同的范围,从而在编译后产生不同的代码。2、C51的条件编译指令也属于预处理指令的一种方法有1.#ifdef标识符,2.#if常量表达式,3、#ifndef标识符。3、本实例利用条件编译指令来控制P0口的8位LED的点亮状态,以学习条件编译指令的使用方法。实现效果是:当要求条件满足时,P0口的低四位LED点亮,不满足时,高四位LED点亮。4、在proteus中绘制电路原理图,本实例中,我们仍然使用前面介绍的P0口控制8位LED流水灯的电路图。5、创建一个新的keilc51工程ex5.c,编写如下的程序,编译并生成ex5.hex文件。

‘贰’ #if是啥意思

#if和#endif是一组同时使用的,叫做条件编译指令。#if与#define、#include等指令一样是由预处理器这个强大的工具处理的,预处理器可以在编译前处理c程序。

使用条件编译指令,如果满足#if后面的条件,就编译#if和#endif之间的程序段,否则不编译。

C语言:

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。

C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

C语言与C++、C#、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%-20%。因此,C语言可以编写系统软件。

当前阶段,在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是C语言应用的两大领域。同时,C语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显着。

C语言拥有经过了漫长发展历史的完整的理论体系,在编程语言中具有举足轻重的地位。

‘叁’ #if #endif 是什么意思啊

#ifdef #endif是C语言的条件编译。

条件编译是根据实际定义宏(某类条件)进行代码静态编译的手段。可根据表达式的值或某个特定宏是否被定义来确定编译条件。

如下面的例子:

#ifdef 标志符

程序段1

#else

程序段2

#endif

当定义了标志符则对程序段1进行编译,而没有定义标志符时则编译程序段2。

(3)条件编译命令扩展阅读

条件编译的作用

条件编译跟事物具有多样性一样。我们需要对不同的状况下采取不同的操作。例如程序的运行平台具有这种多样性,我们在window平台下编写的程序,可能使用某一个库或者与硬件相关的属性、方法。

现在要将我们的程序移植到别的计算机系统的时候,例如Linux系统。那么程序上依赖的库或者有些和硬件相关联的属性和方法不得不更改,那么我们只能在编写程序的时候提高程序的健壮性,此时就需要条件编译语句为我们实现这样的功能。

‘肆’ 条件编译的指令

条件编译指令将决定哪些代码被编译,而哪些是不被编译的。可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件。 一般形式有如下几种
(1) #if表达式//语句段1#else//语句段2]#endif如果表达式为真,就编译语句段1,否则编译语句段2
(2) #if表达式1//语句段1#elif表达式2//语句段2#else//语句段3#endif如果表达式1真,则编译语句段1,否则判断表达式2;如果表达式2为真,则编译语句段2,否则编译语句段3 (1)#ifdef的一般形式: #ifdef宏名//语句段#endif作用:如果在此之前已定义了这样的宏名,则编译语句段。
(2)#ifndef的一般形式: #ifndef宏名//语句段#endif作用:如果在此之前没有定义这样的宏名,则编译语句段。
#else可以用于#ifdef和#ifndef中,但#elif不可以。 #include<stdio.h>#defineLETTER1intmain(intargc,char*argv[]){charstr[20]=CLanguage,c;inti;i=0;while((c=str[i])!=''){i++;#ifdefLETTER1if(c>='a'&&c<='z')c=c-32;#elseif(c>='A'&&c<='Z')c=c+32;#endifprintf(%c,c);}return0;}运行结果为clANGUAGE

‘伍’ c语言中预处理命令都有哪些

C语言的预处理主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。x0dx0a 预处理命令以符号“#”开头。x0dx0ax0dx0a宏定义命令:#define、#undef,用来定义和解除宏。(值得注意的是还可以定义带参数的宏)x0dx0ax0dx0a文件包含命令:#include "文件名" 或者 #include <文件名>。使用前者时会优先从当前目录查找头文件,使用后者时优先从默认的系统目录查找。x0dx0ax0dx0a条件编译:#ifdef、#else、#endif、#elif 等。出于程序兼容性的考虑,有些语句希望在条件满足时才编译。这时候会用到条件编译的命令。

‘陆’ #if与if什么区别啊

区别1:

#if是条件编译;if是条件语句。

区别2:

if是条件语句,#if是预处理指令,功能相同,执行的时期不同。

区别3:

if的作用是程序流控制,会直接编译、执行。

#if是对编译器的指令,其作用是告诉编译器,有些语句行希望在条件满足时才编译。

区别4:

#if作用是:如果(MAX==10)||(MAX==20)成立,那么编译器就会把其中的#if 与 #endif之间的代码编译进去

if作用是可以构成分支结构,它根据给定的条件进行判断,以决定执行某个分支程序段。

‘柒’ c语言中预处理命令都有哪些

我们可以在C源程序中插入传给编译程序的各中指令,这些指令被称为预处理器指令,它们扩充了程序设计的环境。现把常用的预处理命令总结如下: x0dx0a1. 预处理程序x0dx0a按照ANSI标准的定义,预处理程序应该处理以下指令:x0dx0a#if #ifdef #ifndef #else #elifx0dx0a#endifx0dx0a#definex0dx0a#undefx0dx0a#linex0dx0a#errorx0dx0a#pragmax0dx0a#includex0dx0a显然,上述所有的12个预处理指令都以符号#开始,,每条预处理指令必须独占一行。x0dx0a2. #definex0dx0a#define指令定义一个标识符和一个串(也就是字符集),在源程序中发现该标识符时,都用该串替换之。这种标识符称为宏名字,相应的替换称为宏代换。一般形式如下:x0dx0a#define macro-name char-sequencex0dx0a这种语句不用分号结尾。宏名字和串之间可以有多个空白符,但串开始后只能以新行终止。x0dx0a例如:我们使用LEFT代表1,用RIGHT代表0,我们使用两个#define指令:x0dx0a#define LEFT 1x0dx0a#define RIGHT 0x0dx0a每当在源程序中遇到LEFT或RIGHT时,编译程序都用1或0替换。x0dx0a定义一个宏名字之后,可以在其他宏定义中使用,例如:x0dx0a#define ONE 1x0dx0a#define TWO ONE+ONEx0dx0a#define THREE ONE+TWOx0dx0a宏代换就是用相关的串替代标识符。因此,如果希望定义一条标准错误信息时,可以如下定义:x0dx0a#define ERROR_MS “Standard error on input \n”x0dx0a如果一个串长于一行,可在行尾用反斜线”\”续行,如下:x0dx0a#define LONG_STRING “This is a very very long \x0dx0aString that is used as an example”x0dx0a3. #errorx0dx0a#error指令强制编译程序停止编译,它主要用于程序调试。#error指令的一般形式是:x0dx0a#error error-messagex0dx0a注意,宏串error-message不用双引号包围。遇到#error指令时,错误信息被显示,可能同时还显示编译程序作者预先定义的其他内容。x0dx0a4. #includex0dx0a程序中的#include指令要求编译程序读入另一个源文件。被读入文件的名字必须用双引号(“”)或一对尖括号(<>)包围,例如:x0dx0a#include “stdio.h”x0dx0a#include x0dx0a都使C编译程序读入并编译头文件以用于I/O系统库函数。x0dx0a包含文件中可以包含其他#include指令,称为嵌套包含。允许的最大嵌套深度随编译器而变。x0dx0a文件名被双括号或尖括号包围决定了对指定文件的搜索方式。文件名被尖括号包围时,搜索按编译程序作者的定义进行,一般用于搜索某些专门放置包含文件的特殊目录。当文件名被双括号包围时,搜索按编译程序实时的规定进行,一般搜索当前目录。如未发现,再按尖括号包围时的办法重新搜索一次。x0dx0a通常,绝大多数程序员使用尖括号包围标准的头文件,双引号用于包围与当前程序相关的文件名。x0dx0ax0dx0a5. 条件编译指令x0dx0a若干编译指令允许程序员有选择的编译程序源代码的不同部分,这种过程称为条件编译。x0dx0a5.1#if、#else、#elif #endifx0dx0a条件编译指令中最常用的或许是#if,#else,#elif和#endif。这些指令允许程序员根据常数表达式的结果有条件的包围部分代码。x0dx0a#if的一般形式是:x0dx0a#if constant-expressionx0dx0aStatement sequencex0dx0a#endifx0dx0a如#if后的常数表达式为真,则#if和#endif中间的代码被编译,否则忽略该代码段。#endif标记#if块的结束。x0dx0a#else指令的作用与C语言的else相似,#if指令失败时它可以作为备选指令。例如:x0dx0a#include x0dx0a#define MAX 100x0dx0aInt main(void)x0dx0a{x0dx0a#if MAX>99x0dx0aprintf(“Compiled for array greater than 99.\n”);x0dx0a#elsex0dx0aprintf(“Complied for small array.\n”);x0dx0a#endifx0dx0areturn 0;x0dx0a}x0dx0a注意,#else既是标记#if块的结束,也标记#else块的开始。因为每个#if只能写一个#endif匹配。x0dx0a#elif指令的意思是“否则,如果”,为多重编译选择建立一条if-else-if(如果-否则-如果链)。如果#if表达式为真,该代码块被编译,不测试其他#elif表达式。否则,序列中的下一块被测试,如果成功则编译之。一般形式如下:x0dx0a#if expressionx0dx0aStatement sequencex0dx0a#elif expression1x0dx0aStatement sequencex0dx0a#elif expression2x0dx0aStatement sequencex0dx0a.x0dx0a.x0dx0a.x0dx0a#elif expressionx0dx0aStatement sequencex0dx0a#endifx0dx0a5.2#ifdef和#ifndefx0dx0a条件编译的另一个方法是使用编译指令#ifdef和#ifndef,分别表示“如果已定义”和“如果未定义”。#ifdef的一般形式如下:x0dx0a#ifdef macro-namex0dx0aStatement sequencex0dx0a#endifx0dx0a如果macro-name原先已经被一个#define语句定义,则编译其中的代码块。x0dx0a#ifndef的一般形式是:x0dx0a#ifndef macro-namex0dx0aStatement sequencex0dx0a#endifx0dx0a如果macro-name当前未被#define语句定义,则编译其中的代码块。x0dx0ax0dx0a我认为,用这种,可以很方便的开启/关闭整个程序的某项特定功能。x0dx0a#ifdef和#ifndef都可以使用#else或#elif语句。x0dx0a#inlucde x0dx0a#define T 10x0dx0aInt main(void)x0dx0a{x0dx0a#ifdef tx0dx0aPrintf(“Hi T\n”);x0dx0a#elsex0dx0aPrintf(“Hi anyone\n”);x0dx0a#endifx0dx0a#ifndef Mx0dx0aPrintf(“M Not Defined\n”);x0dx0a#endifx0dx0aReturn 0;x0dx0a}x0dx0a6. #undefx0dx0a#undef指令删除前面定义的宏名字。也就是说,它“不定义”宏。一般形式为:x0dx0a#undef macro-namex0dx0a7. 使用definedx0dx0a除#ifdef之外,还有另外一种确定是否定义宏名字的方法,即可以将#if指令与defined编译时操作符一起使用。defined操作符的一般形式如下:x0dx0adefined macro-namex0dx0a如果macro-name是当前定义的,则表达式为真,否则为假。x0dx0a例如,确定宏MY是否定义,可以使用下列两种预处理命令之一:x0dx0a#if defined MYx0dx0a或x0dx0a#ifdef MYx0dx0a也可以在defined之前加上感叹号”!”来反转相应的条件。例如,只有在DEBUG未定义的情况下才编译。x0dx0a#if !defined DEBUGx0dx0aPrintf(“Final Version!\n”);x0dx0a#endifx0dx0a使用defined的一个原因是,它允许由#elif语句确定的宏名字存在。x0dx0a8. #linex0dx0a#line指令改变__LINE__和__FILE__的内容。__LINE__和__FILE__都是编译程序中预定义的标识符。标识符__LINE__的内容是当前被编译代码行的行号,__FILE__的内容是当前被编译源文件的文件名。#line的一般形式是:x0dx0a#line number “filename”x0dx0a其中,number是正整数并变成__LINE__的新值;可选的“filename”是合法文件标识符并变成__FILE__的新值。#line主要用于调试和特殊应用。x0dx0ax0dx0a9. #pragmax0dx0a#pragma是编译程序实现时定义的指令,它允许由此向编译程序传入各种指令。例如,一个编译程序可能具有支持跟踪程序执行的选项,此时可以用#pragma语句选择该功能。编译程序忽略其不支持的#pragma选项。#pragma提高C源程序对编译程序的可移植性。x0dx0a10. 预处理操作符#和##x0dx0a有两个预处理操作符:#和##,它们可以在#define中使用。x0dx0a操作符#通常称为字符串化的操作符,它把其后的串变成用双引号包围的串。例如:x0dx0a#include x0dx0a#define mkstr(s) #sx0dx0aint main(void)x0dx0a{x0dx0aPrintf(mkstr(I like C));x0dx0aReturn 0;x0dx0a}x0dx0a预处理程序把以下的语句:x0dx0aPrintf(mkstr(I like C));x0dx0a变成x0dx0aPrintf(“I like C”);x0dx0a操作符##把两个标记拼在一起,形成一个新标记。例如:x0dx0a#include x0dx0a#define concat(a,a) a##bx0dx0aint main(void)x0dx0a{x0dx0aInt xy = 10;x0dx0aPrintf(“%d”,concat(x,y));x0dx0aReturn 0;x0dx0a}x0dx0a预处理程序把以下语句:x0dx0aPrintf(“%d”,concat(x,y));x0dx0a变成x0dx0aPrintf(“%d”,xy);x0dx0a操作符#和##主要作用是允许预处理程序对付某些特殊情况,多数程序中并不需要。x0dx0a11. 预定义宏x0dx0aC规范了5个固有的预定义宏,它们是:x0dx0a__LINE__x0dx0a__FILE__x0dx0a__DATE__x0dx0a__TIME__x0dx0a__STDC__x0dx0a__LINE__和__FILE__包含正在编译的程序的行号和文件名。x0dx0a__DATE__和内容形如month/day/year(月/日/年)的串,代表源文件翻译成目标码的日期。x0dx0a__TIME__中的串代表源代码编译成目标码的时间,形如hour:minute:second(时:分:秒)x0dx0a如果__STDC__的内容是十进制常数1,则表示编译程序的实现符合标准C。

热点内容
sql语句视图 发布:2024-11-19 08:30:23 浏览:932
ftpjava上传 发布:2024-11-19 08:30:09 浏览:407
苹果摄像机为什么比安卓清晰 发布:2024-11-19 08:20:20 浏览:830
为什么安卓手机下载不了微信 发布:2024-11-19 08:19:37 浏览:836
android情景分析 发布:2024-11-19 08:19:36 浏览:190
系统存储设备容量 发布:2024-11-19 08:05:28 浏览:994
向外访问 发布:2024-11-19 07:50:21 浏览:555
androidbase64图片 发布:2024-11-19 07:48:45 浏览:727
搭建小说网站国外服务器 发布:2024-11-19 07:42:49 浏览:799
在家如何更改网络密码 发布:2024-11-19 07:36:21 浏览:797