返回

天津达内教育

C语言 条件编译详解

java学习网更新时间:2021-10-06 浏览:183

预备处理全过程扫描仪源码,对其开展基本的变换,造成新的源码给予给c语言编译器。由此可见预备处理全过程在于c语言编译器对源码开展解决。

在C 语言表达中,并沒有一切本质的体制来进行以下一些作用:在编译程序时包括别的源代码、界定宏、依据标准决策编译程序时是不是包括一些编码。要进行这种工作中,就*须应用预备处理程序流程。虽然在现阶段绝大部分c语言编译器都包括了预备处理程序流程,但一般 觉得他们是单独于c语言编译器的。预备处理全过程读取源码,查验包括预备处理命令的句子和宏定义,并对源码开展回应的变换。预备处理全过程还会继续删除程序中的注解和不必要的空白字符。

预备处理命令是以#号开始的编码行。#号务必是这家银行除开一切空白字符外的**个标识符。#后是命令关键词,在关键词和#号中间容许存有随意数量的空白字符。整行句子组成了一条预备处理命令,该命令将在c语言编译器开展编译程序以前对源码做一些变换。下边是一部分预备处理命令:

命令 主要用途

# 空命令,无一切实际效果

#include 包括一个源码文档

#define 界定宏

#undef 撤销已界定的宏

#if 假如给出标准为真,则编译程序下边编码

#ifdef 假如宏早已界定,则编译程序下边编码

#ifndef 假如宏沒有界定,则编译程序下边编码

#elif 假如前边的#if给出标准不以真,当今标准为真,则编译程序下边编码

#endif 完毕一个#if……#else条件编译块

#error 终止编译程序并表明错误报告

一、文件包含

#include预备处理命令的功效是在命令处进行被包括的文档。包括能够是多种的,换句话说一个被包括的文档中还能够包括其他文件。规范Cc语言编译器最少适用八重嵌入包括。

预备处理全过程不查验在变换模块中是不是早已包括了某一文档并阻拦对它的数次包括。那样就可以在数次包括同一个库函数时,根据给出编译程序时的标准来做到不一样的实际效果。比如:

#define AAA

#include "t.c"

#undef AAA

#include "t.c"

为了更好地防止这些只有包括一次的库函数被数次包括,能够在库函数选用编译程序时标准来开展操纵。比如:

#ifndef MY_H

#define MY_H

……

#endif

在程序流程中包括库函数有二种文件格式:

#include

#include "my.h"

**种方式 是用尖括号将头文档括起來。这类文件格式告知预备处理程序流程在c语言编译器内置的或外界库的库函数中检索被包括的库函数。第二种方式 是用引号将头文档括起來。这类文件格式告知预备处理程序流程在当今被编译程序的应用软件的源码文档中检索被包括的库函数,假如找不着,再检索c语言编译器内置的库函数。

选用二种不一样包括文件格式的原因取决于,c语言编译器是安裝在公共性根目录下的,而被编译程序的应用软件是在他们自身的独享根目录下的。一个应用软件既包括c语言编译器给予的公共性库函数,也包括自定的独享库函数。选用二种不一样的包括文件格式促使c语言编译器可以在许多库函数中差别出一组公共性的库函数。

二、宏

宏定义了一个意味着特殊內容的标志符。预备处理全过程会把源码中发生的宏标志符换成宏定义时的值。宏最普遍的使用方法是界定意味着某一值的全局性标记。宏的第二种使用方法是界定带主要参数的宏,那样的宏能够象涵数一样被启用,但它是在启用句子处进行宏,并且用启用时的具体主要参数来替代界定中的形式参数。

1.#define命令

#define预备处理命令是用于界定宏的。该命令非常简单的文件格式是:*神灵一个标志符,随后得出这一标志符意味着的编码。在后面的源码中,就用这种编码来取代该标志符。这类宏把程序流程时要采用的一些全局性值获取出去,赋给一些记忆力标志符。

#define MAX_NUM 10

int array[MAX_NUM];

for(i=0;i

在这个事例中,针对阅读文章该程序流程的人而言,标记MAX_NUM就会有特殊的含意,它意味着的值得出了二维数组能够容下的较大 原素数量。程序流程中能够数次应用这一值。做为一种承诺,习惯性上一直所有用英文大写字母来界定宏,那样便于把程序流程红的宏标志符和一般自变量标志符差别起来。假如要想更改二维数组的尺寸,只*须变更宏定义并再次编译程序就可以。

宏表明的值能够是一个常量表达式,在其中容许包含前边早已界定的宏标志符。比如:

#define ONE 1

#define TWO 2

#define THREE (ONE TWO)

留意上边的宏定义应用了括弧。虽然他们并并不是务必的。但出自于慎重考虑到,或是应当再加上括弧的。比如:

six=THREE*TWO;

预备处理全过程把上边的一行代码转换成:

six=(ONE TWO)*TWO;

要是没有那一个括弧,就转化成six=ONE TWO*TWO;了。

宏还能够意味着一个字符串常量,比如:

#define VERSION "Version 1.0 Copyright(c) 2003"

2.带主要参数的#define命令

带主要参数的宏和调用函数看上去有一些类似。看一个事例:

#define Cube(x) (x)*(x)*(x)

能够时一切数据关系式乃至调用函数来替代主要参数x.这儿再度提示大伙儿留意括弧的应用。宏进行后彻底包括在一对括弧中,并且主要参数也包括在括弧中,那样就确保了宏和主要参数的一致性。看一个使用方法:

int num=8 2;

volume=Cube(num);

进行后为(8 2)*(8 2)*(8 2);

要是没有这些括弧就变成8 2*8 2*8 2了。

下边的使用方法不是安全性的:

volume=Cube(num );

假如Cube是一个涵数,上边的书写是能够了解的。可是,由于Cube是一个宏,因此会造成不良反应。这儿的擦书并不是简易的关系式,他们将造成出乎意料的結果。他们进行后是那样的:

volume=(num )*(num )*(num );

很显而易见,結果是10*11*12,而不是10*10*10;

那麼如何安全性的应用Cube宏呢?务必把很有可能造成不良反应的实际操作挪到宏启用的外边开展:

int num=8 2;

volume=Cube(num);

num ;

相关资讯

c++ vector 使用效率问题
2021-07-15 370
1. vector中的erase方式 高效率是很低。由于为了更好地维持vector中原素在存储空间中的持续性,在删掉某一原素以后,*将之后...
java技术有哪些优点优势
2021-07-15 349
Java技术性有以下优势:简易、面向对象编程、分布式系统、表述实行、鲁棒性、安全性、系统架构保持中立、生命期、性能卓越、线程同步及其动态...
Java未来发展的趋势
2021-06-15 343
没有Java,甚至不会有大数据的大发展,Hadoop本身就是用Java编写的。当你需要在运行MapReduce的服务器集群上发布新功能时,你需...
初学者适合学习哪些编程语言
2021-07-15 337
许多同学想改行程序编写,可是那么多的计算机语言究竟该怎么选呢?头痛~如果你是一名具备创新性的开发人员或是想变成一名具备展望工作能力的开发人员得话,那麼,你应该最少在**是的计算机语言中挑选一个,相近 Python, JavaScript, C#, C++, PHP, Java, 或是 go...
云计算技术与应用学什么东西
2021-07-16 331
云计算技术与应用是学什么的?众所周知,云计算技术是当前的热门技术, 云计算专*技*人才是香饽饽,计划学习云计算技术与应用...
学Java可以做哪些职位
2021-06-11 298
Java是时下非常流行的语言,这意味着有很多很多不同的工作可供选择。Java软件工程师入行1-3年,*已达到10-15万,而且在IT行业...
学什么技术有前途 Java怎么样
2021-07-19 293
如今正是互联网信息时代,随着时代的变迁肯定会发展的越来越好,而Java编程语言是最于我们生活息息相关的,用处范围广泛,比如:...
北京达内教学怎么样 北京达内教育学习环境好吗
2021-07-15 269
日给大伙儿分享一些有关达内教育学习中心的相片,了解一下达内教育学习中心自然环境怎样。下边就跟随我一起来吧...

相关课程

栏目导航