资源编译器致命错误RC1000先处理命令属于C语言编译器。

资源编译器错误RC1000顶RC1208

以下主题包括资源编译器错误RC1000届RC1208:

资源编译器致命错误RC1000
不解致命错误
记下错的景下,尝试寻找有问题,并创造一个再现的测试案例,然后告诉这信息的技术支持。

资源编译器致命错误RC1002
堆空间
资源编译器跑来积存于仓储于该堆项目。以下之一或许是一个解决方案:

  • 多Windows交换文件空间。考虑以控制面板,系统图标,性能选项卡来增加系统的虚拟内存,重新开动同重试。
  • 拿手上文件拆分为片单或多单公文并独立编译。

资源编译器致命错误RC1003
荒唐计数超过数; 停止编译
张冠李戴的数据极其非常,继续编辑。修正一些误并重新编译。

资源编译器致命错误RC1004
竟之文书结尾发现
以此似是而非可以经一个文件文件之结尾一实施省略换行和回车符造成的。

资源编译器致命错误RC1005
找不顶文件:文件名
面临的RC命令行指定的文件并未叫发现。检查文件是否业已更换至其他目录,文件称或路径是否科学输入。使用INCLUDE环境变量或目录设置搜索文件。

资源编译器致命错误RC1007
没辙辨认的抉择项“ 选项中的”  ‘
点名的选取项无效。

资源编译器致命错误RC1008
靡输入文件被指定
一个或多单自文件要资源编译器命令执行及指定。

资源编译器致命错误RC1009
编译器限制:宏嵌法太死“ 微距 ”
资源编译器限制宏嵌套超出。修改指定的源文件以减小其宏的嵌套深度。

资源编译器致命错误RC1010
没出口文件中指定
资源编译器命令行没有点名编译的资源文件的文件称。

资源编译器致命错误RC1011
编译器限制:’ 标识 ‘:过深的宏定义
宏定义是跨允许的。尝试将概念拆分为比较短的概念。

资源编译器致命错误RC1012
绝世的括号:缺少“ 字符 ”
当先行处理指令圆括号不匹配。缺少的字符是错误或右括号。

资源编译器致命错误RC1013
免般配的括号
保各一个开括号发生一个匹的右括号。

资源编译器致命错误RC1014
最好多之含文件:深度=’ 水平 ‘
#include指令的嵌套深度最可怜。打开的文件可以由此以嵌套指令来含有。包含指令的源文件被计算为里一个文本。

资源编译器致命错误RC1015
没辙开拓包含文件’ 文件名 ‘
加以的蕴藏文件要不存,无法开拓,或者无给发觉。请确保环境设置中,并点名文件的正确途径。确保有足的文书句柄可用以资源编译器。如果文件于网络驱动器上,请确保您有权力打开该文件。

资源编译致命错误RC1016
的#if [n]的画质预期标识符
的的#ifdef或的#ifndef未就此之辨认符来评估提供的规则编译指令。必须以#ifdef和#ifndef指令指定标识符。

资源编译器致命错误RC1017
废的平头常量表达式
在#if指令表达要不设有,或者无划算也一个常数。

资源编译器致命错误RC1018
意外’#elif指令“
#elif指令没有因此#if中冒出的#ifdef,或构建的#ifndef。请保管在是语之前有#if,#ifdef或#ifndef语句生效。

资源编译器致命错误RC1019
意外“的#else’
的#else指令没有就此#if中出现的#ifdef,或构建的#ifndef。请保管在这个语之前起#if,#ifdef或#ifndef语句生效。

资源编译器致命错误RC1020
意外“的#endif’
一个#endif指令出现不兼容的#if,#IFDEF或的#ifndef指令。确保每个#if,#ifdef和#ifndef语句都产生相当的#endif。

资源编译器致命错误RC1021
失效的预先处理命令’  ‘
晚的数字符号(#)没有形成一个实用的先行处理指令中之字符。数字符号不可知就此作标识符中的首先单字符。

资源编译器致命错误RC1022
预期“的#endif’
用#if,#IFDEF或指令的#ifndef没有停歇与#endif指令。请保管以此语之前有#if,#ifdef或#ifndef语句生效。

资源编译器致命错误RC1023
没辙开拓源文件“ 文件名 ”
点名的公文要不存,无法开拓,或者没被察觉。请确保环境设置中,并点名文件的不利途径。如果是错误在没错误信息之图景下冒出,则资源编译器已用老文件句柄。

资源编译器致命错误RC1047
“太多之挑三拣四之挑三拣四,’  ‘”
为来的选料项中指定的次数太多。给定的字符串是引致错误的精选的参数。

资源编译器致命错误RC1048
不解之抉择项’ 的” 选项 ‘
加以的角色是休是也挑选一个中的一致封闭信。

资源编译器致命错误RC1049
失效的数值参数’  ‘
资源编译器预期数值参数,但接受的加的字符串。此错误或是由给定的十六进制数字要并未必要之\
x前缀或错误的浮点数导致的。

资源编译器致命错误RC1052
编译器限制:嵌套太可怜的#if或#IFDEF块
先后超过#if和#IFDEF指令允许的最好深嵌套层次。此错误或是因为下这些先行处理器伪指令的include文件引起。

资源编译器致命错误RC1067
编译器限制:标识符溢出其中缓冲区
的内部编译器限制超。

资源编译器致命错误RC1101
没资源的二进制文件称受指定
的重命名输出指定(/ FO)的挑三拣四项,但后面没有公文称。以下语法必须同/
fo选项共使用:
RC /fooutfilename infilename.rc

资源编译器致命错误RC1102
内错误:太多的参数RCPP
最为多的参数传递给资源编译器预处理器。通过以源中定义符号定义符号(/
d)选项,减少定义之符号数。使用含有搜索路径选择(/
i)指定太多含有文件搜索路径也或导致这个错误。

资源编译器致命错误RC1103
废的开关,选择
指定的精选项非是一个行之有效的资源编译器选项。

资源编译器致命错误RC1105
废的开关,选项:太多/ D的
最多的标志都用符号定义(/ D)选项定义。在源中定义有标记并再度编译。

资源编译器致命错误RC1106
不行开关:选项
指定的挑选项不是一个灵光的资源编译器选项。以下选项中:

/ r 发出.RES文件
/ v 详细(打印进度消息)
/ d 定义符号
/ fo 重命名.RES文件
/ l 默认语言ID(十六进制)
/一世 为INCLUDE搜索添加路径
/X 忽略INCLUDE环境变量
/C 定义NLS转换使用的代码页

资源编译器致命错误RC1107
不行下; 使用RC /?为拉
无效的资源编译器选项指定。有效选项也以下之一:/ r,/ v,/ d,/ fo,/
l,/ i,/ x或/ c:

资源编译器致命错误RC1109
不当创建资源名
束手无策缔造指定.RES文件。确保其不是当只读驱动器上开创。使用/
V选项来确定是否正在创造文件。

资源编译器致命错误RC1110
无法打开文件称
RC无法打开指定的资源脚本文件。确保文件在。

资源编译器致命错误RC1116
先处理器错误后停RC
的资源编译器停止,由于其他左。修复外左并还编译。

资源编译器致命错误RC1120
的内存不足,需要配节数
资源编译器跑来积存于仓储在其堆项目。通常这是发无限多号的结果。以下之一或许是一个化解方案:

  • 增Windows交换文件空间。考虑下控制面板,系统图标,性能选项卡来增加系统的虚拟内存,重新启航同重试。
  • 清除不必要的include文件,特别是无待之#defines和函数原型。
  • 用目前文件拆分为有限独或多独文本并独立编译。

资源编译器致命错误RC1121
I / O错误读博文件时
资源编译器无法读取文件。检查包含该公文之驱动器是否可用,以及该文件是否有效。

资源编译器致命错误RC1122
I / O错误写副文件
资源编译器不能够写副文件。此错误或是由磁盘空间不足引起的。您得有所一定给所创造可执行文件大小两倍增大小的可用空间。此错误的另外可能由是:

  • 形容副只念卷
  • 描绘副坏扇区
  • 共享冲突

资源编译器致命错误RC1123
I / O错误于文书中固定
编译器是无法成功的I / O操作。

资源编译器致命错误RC1201
废开关-失踪后,包括/ I路径
的指定包含路径(/ I)指定的挑选项,但尚未后同路径。

资源编译器致命错误RC1202
不行开关-缺少的默认语言ID后/升
的指定默认语言(/ L)指定的挑项,但没与十六进制语言ID。

资源编译器致命错误RC1203
不行的十六迈入制默认语言指定的ID。
点名了点名默认语言(/
l)选项,但背后跟有无效的十六进制语言ID。有关实用语言ID的列表,请参考Platform
SDK。

资源编译器致命错误RC1204
无效开关-缺少代码页后/ C
的指定代码页(/ C)选项中指定,但她背后没有代码页。

资源编译器致命错误RC1205
无效代码页
的指定代码页(/
C)选项指定,但就一个没用的代码页。有关详细信息,请参考在线文档中之代码页。

资源编译器致命错误RC1206
于CMD行指定的代码页中未有注册表中
的指定代码页(/
C)指定的选项,但紧接着该职是勿是当注册表中指定的代码页。

资源编译器致命错误RC1207
默认代码页是杯水车薪
的RCCODEPAGE环境变量指定的代码页无效。有关详细信息,请参考联机文档中之代码页。

资源编译器致命错误RC1208
输入文件有.RES扩展
的.RES扩展用于资源编译器输出。.RC扩展名当用于资源编译器脚本。

 

每当嵌入式系统编程中,不管是本的驱动程序还是应用程序的编辑,都关涉到大气的预先处理与规则编译,这样做的利益主要反映于代码的移植性强和代码的修改好等特征,因此引入了先期处理同法编译的定义。在C语言的先后中而概括各种为符号#初始的编译指令,这些指令称预处理命令。预处理命令属于C语言编译器,而无是C语言的有的。通过事先处理命令可扩大C语言程序设计的环境。

 

 

横流:该系列内容整理自以下链接。

http://blog.csdn.net/dlutbrucezhang/article/details/8753765

 

预先处理的做事办法

 

1.1 预处理的作用

在合开发条件遭到,编译,链接是以到位的。其实,C语言编译器在对源代码编译之前,还亟需越来越的拍卖:预编译。预编译的首要作用如下:

  • 将源文件被坐”include”格式包含的公文复制到编译的源文件中。
  • 因而实际值替换用“#define”定义之字符串。
  • 根据“#if”后面的口径决定用编译的代码。

1.2 预处理的劳作方式
 
优先处理的行是由于命控制的。这些指令是由#字符开头的局部限令。
#define指令定义了一个翻天覆地,用来代表任何东西的一个命,通常是某一个类别的常量。预处理会通过将宏的讳跟其的概念存储于一起来响应#define指令。当这个宏在后面的程序中动用到经常,预处理器”扩展”了偌大,将宏替换为它所定义的值。
#include指令告诉预处理器打开一个一定的公文,将它们的内容作为在编译的文书之平等片“包含”进来。例如:下面就行命令:
  #include<stdio.h>

指令预处理器打开一个名字吧stdio.h的文书,并将她的情加到当前的次序中。

事先处理器的输入是一个C语言程序,程序可能含有指令。预处理器会执行这些指令,并在处理过程中剔除这些指令。预处理器的出口是另外一个次:原程序的一个修后底版,不再包含指令。预处理器的输出为一直付出编译器,编译器检查程序是否发荒唐,并通过程序翻译啊对象代码。
 

 

先处理指令

 2.1.预处理指令

绝大多数预处理器指令属于下面3种植类型:

  • 宏定义:#define
    指令定义一个翻天覆地,#undef指令删除一个宏定义。
  • 文件包含:#include指令导致一个指定文件的情为含有到程序中。
  • 法编译:#if,#ifdef,#ifndef,#elif,#else和#endif指令可以依据编译器可以测试的格来拿同段落文本包含到程序中要么脱以次之外。

剩下的#error,#line和#pragma指令更出格之命,较少用到。

2.2.下令规则
 
指令都是以#开始。#记不需要在一行的行首,只要她前面有空白字符就执行。在#后是负令名,接着是负令所急需的别样消息。在命令的号中可插任意数量之空格或横向制表符。指令总是第一单换行符处结束,除非明确地指明要累。
令可以起于先后中之其他地方。我们便以#define和#include指令放在文件的发端,其他指令则位居后面,甚至以函数定义之中。
注解可以和指令在同一行。

 

宏定义命令#define

使用#define命令并无是确实的定义符号常量,而是定义一个可轮换的偌大。被定义为宏的标示符称为“宏名”。在编译预处理过程时,对程序中存有出现的“宏名”,都为此宏定义中的字符串去替代换,这称为“宏代换”或“宏展开”。

 

当C语言中,宏分为发生参数和无参数两种。

3.1.不管参数的巨大

其定义格式如下:
  #define 宏名  字符串

于上述宏定义语句子被,各片的意思如下:

#:表示马上是一模一样长达预处理命令(凡是因“#”开始的通通为事先处理命令)。

define:关键字“define”为宏定义命令。

宏名:是一个标示符,必须符合C语言标示符的确定,一般以非常写字母标示宏名。

字符串:可以是常数,表达式,格式串等。在前使用的符号常量的定义就是是一个无参数宏定义。

瞩目:预处理命令语后面一般不见面添加分号,如果当#define最后有分公司,在宏替换时分号也拿替换到源代码中去。在宏名和字符串之间可起自由单空格。

例如:

  #define PI 3.14

每当行使宏定义时,还待留意以下几点:

宏定义是宏名来代表一个字符串,在宏展开时还要因为该字符串取代宏名。这仅仅是均等种简易的更换,字符串中但是因为带有其他字符,可以是常数,也得是表达式,预处理程序对其不发任何检查。如发错误,只能在编译已被宏展开后之源程序时发现。

宏定义必须写以函数之外,其犯用域为宏定义命令起至源程序结束。

宏名在源程序只会使用引号括起来,则先处理程序不对准该作宏替换。

宏定义允许嵌套,在宏定义的字符串中可使都定义的宏名。在宏展开时出于先处理程序层层替换。

习惯及宏名可用大写字母表示,以有益与变量区别。但为允许用小写字母。

3.2带动参数的宏

#define命令定义宏时,还好为宏设置参数。与函数中之参数近似,在宏定于受的参数为形式参数,在宏调用着的参数称为实际参数。对牵动参数的大,在调用中,不仅要宏展开,还要因此实参去顶替换形参。

带来参宏定义的貌似式为:
  #define 宏名(形参表)  字符串

以概念带参数的宏时,宏名和形参表之间未能够生空格出现,否则,就将宏定义成为无参数形式,而致使程序出错。

例如:

  #define ABS(x) (x)<0?-(x):(x)

如上之宏定义中,如果x的值小于0,则动用同一初运算符(-)对那个取负,得到正数。

带参的宏和带参的函数相似,但那面目是差的。使用带来参宏时,在事先处理常以程序源代码替换到相应的职务,编译时收获完全的对象代码,而非进行函数调用,因此程序执行效率要后来居上些。而函数调用只需要编译一次等函数,代码量较少,一般情形下,对于简易的功力,可利用宏替换的样式来运。

3.3.预处理操作符#和##

3.3.1.操作符#

在使用#define定义宏时,可运操作符#以字符串中输出实参。

例如:

  #define AREA(x,y)
printf(“长为“#x”,宽为“#y”的长方形的面积:%d\n”,(x)*(y));

3.3.2.操作符##

跟操作符#类似,操作符##啊可用在带参宏中替换部分情节。该操作符将宏中的蝇头个组成部分连接成一个情。例如,定义如下宏:
#define VAR(n)   v##n

当使用一下办法引用宏:
VAR(1)

先期处理时,将获得以下形式:
V1

如若以以下宏定义:
#define FUNC(n)  oper##n

当实参为1时,预处理后得到一下试样:
oper1

文件包含include

当一个C语言程序由多独文本模块组合时,主模块被一般含main函数和组成部分脚下程序专用的函数。程序由main函数开始实行,在推行进程中,可调用当前文件被的函数,也可调用其他文件模块中的函数。

要在模块中一经调用其他文件模块中之函数,首先必须以主模块被宣称该函数原型。一般还是用文件包含的法,包含其他文件模块的头文件。
文本包含着指定的文本名即可以为此引号括起来,也得就此尖括号括起来,格式如下:
#include< 文件名>


#include“文件名”
假若以尖括号<>括起文件称,则编译程序将到C语言开发环境被安装好之
include文件中失追寻指定的文本。

因为C语言的标准头文件都存放于include文件夹着,所以一般针对标准头文件采用尖括如泣如诉;对编程自己编辑的文件,则应用对引号。如果自己修的文本不是存放于当前工作文件夹,可以以#include命令后面加在途径。

#include命令的意向是管指定的文本模块内容插入到#include所在的岗位,当次编译链接时,系统会管持有#include指定的公文链接生成可实施代码。文件包含必须以#开始,表示马上是编译预处理命令,行尾不克就此分号结束。

#include所蕴藏的文本,其扩张名好是“.c”,表示包含普通C语言源程序。也得以是
“.h”,表示C语言程序的峰文件。C语言系统被大量底概念和声明是以头文件形式提供的。
通过#define包含进来的文本模块中还得重复包含其他文件,这种用法称为嵌套包含。嵌套的层数与实际C语言系统有关,但是一般可嵌套8层以上。

规格编译

预先处理器还提供了准编译功能。在优先处理时,按照不同之规范去编译程序的不同部分,从而得到不同之靶子代码。使用口径编译,可便宜地处理程序的调剂版本和正规版本,也可采用规则编译使程序的移植更有利。

5.1使用#if
以及C语言的格分支语句看似,在事先处理常,也可使用分支,根据不同的图景编译不同之源代码段。

#if 的使格式如下:
#if 常量表达式
   程序段
#else

*  程序段 #endif*

拖欠原则编译命令的行进程吧:若常量表达式的价值吗真正(非0),则对先后段1进展编译,否则对程序段2开展编译。因此得以假设程序于不同口径下成功不同的效果。
例如:

#define DEBUG 1

int main()
{
   int i,j;
   char ch[26];

   for(i='a';j=0;i<='z';i++,j++)
   {
       ch[j]=i;
       #if DEBUG
          printf("ch[%d]=%c\n",j,ch[j]);
       #endif
   }

   for(j=0;j<26;j++)
   {
       printf("%c",ch[j]);
   }

   return 0;
}

#if预编译命令还只是运多分开支语句格式,具体格式如下:
#if 常量表达式 1

*    程序段 1*

#elif 常量表达式 2

*    程序段 2*

… …

#elif 常量表达式 n

*    程序段 n*

#else

*    程序段 m*

#endif

关键字#elif与大多分if语句中的else if类似。
例如:

#define os win

#if os=win
    #include"win.h"
#elif os=linux
    #include"linux.h"
#elif os=mac
    #include"mac.h"
#endif

#if和#elif还得展开嵌套,C89标准中,嵌套深度可以抵达8层,而C99允许嵌套达到63交汇。在嵌套时,每个#endif,#else或#elif与近来的#if或#elif配对。
例如:

#define MAX 100
#define OLD -1

int main()
{
int i;
#if MAX>50
{  
    #if OLD>3
    {
        i=1;
    {
    #elif OLD>0
    {
        i=2;
    }
    #else
    {
        i=3;
    }
    #endif
}
#else
{
    #if OLD>3
    {
        i=4;
    }
    #elif OLD>4
    {
        i=5;
    }
    #else
    {
        i=6;
    }
    #endif
}
#endif

return 0;
}

5.2使用#ifdef和#ifndef

于面的#if条件编译命令中,需要看清符号常量定义的具体值。在群状下,其实不待看清符号常量的价,只需要判定是否定义了拖欠符号常量。这时,可免行使#if命令,而利用另外一个预编译命令———#ifdef.

#ifdef命令的下格式如下:
#ifdef 标识符
程序段 1

#else

*    程序段 2*

#endif

其二义是,如果#ifdef后面的标识符已被定义了,则针对“程序段1”进行编译;如果无定义标识符,则编译“程序段2”。一般不采用#else以及背后的“程序2”。

而#ifndef的义与#ifdef相反,其格式如下:
#ifndef 标识符
    程序段 1

#else

*    程序段 2*

#endif

彼含义是:如果不定义标识符,则编译“程序段1”;否则编译“程序段2”。

5.3使用#defined和#undef

与#ifdef类似的,可以在#if命令中应用define来判断是否都定义指定的标识符。例如:
#if defined 标识符
程序段 1  

#endif

和下部的标记方式意义一样。
#ifdef 标识符
    程序段 1

#endif

也不过利用逻辑运算符,对defined取反。例如:
#if ! define 标识符
    程序段 1

#endif

暨下的标记方式意义一样。
#ifndef 标识符
    程序段 1

#endif

在#ifdef和#ifndef命令后的标识符是运#define进行定义之。在先后中,还可以以#undef取消对标识符的定义,其形式为:
#undef 标识符
例如:

#define MAX 100
……
#undef MAX

以上述代码中,首先使#define定义标识符MAX,经过同段先后代码后,又得利用#undef取消就定义之标识符。使用#undef命令后,再使用#ifdef
max,将非会见编译后底源代码,因为这标识符MAX已经被撤销定义了。

其它优先处理命令

 6.1.预定义的宏名

ANSI
C标准预定义了五个宏名,每个宏名的内外俱发生零星单下写线,避免与程序员定义相同之宏名(一般还无见面定义前后有些许个下划线的宏)。这5单宏名如下:

  •  __DATE__:当前源程序的开创日期。
  •  __FILE__:当前源程序的文件名称(包括盘符和路线)。
  •  __LINE__:当前于编译代码的行号。
  •  __STDC__:返回编译器是否位标准C,若其值为1表示符合标准C,否则不是业内C.
  •  __TIME__:当前源程序的始建时间。

例如:

#include<stdio.h>

int main()
{
   int j;
   printf("日期:%s\n",__DATE__);
   printf("时间:%s\n",__TIME__};
   printf("文件名:%s\n",__FILE__);
   printf("这是第%d行代码\n",__LINE__);
   printf("本编译器%s标准C\n",(__STD__)?"符合":"不符合");
   return 0;
}

 

6.2.重置行号和文书称命令#line

使用__LINE__预定义宏名正在编译的次行号。使用#line命令可改变预定义宏__LINE__与__FILE__的情节,该令的基本形如下:
 #line number[“filename”]

内部的数字也一个正要整数,可选取的文书称也有效文件标识符。行号为源代码中即行号,文件称也来自文件之讳。命令为#line主要用于调试以及其它异样应用。
例如:

#include<stdio.h>
#include<stdlib.h>

#line 1000
int main()
{
    printf("当前行号:%d\n",__LINE__);
    return 0;
}

 

当以上程序中,在第4执行中采用#line定义的行号为自1000方始(不包#line这行)。所以第5执之号将为1000,第6表现1001,第7表现1002,第8表现1003.

6.3.改动编译器设置命令#pragma

#pragma命令的用意是设定编译器的状态,或者指示编译器完全有一定的动作。#pragma命令对每个编译器给闹了一个法,在维系与C语言完全配合的情景下,给来主机或者操作系统专有的风味。其格式一般为:
#pragma Para

中间,Para为参数,可下的参数很多,下面列有常用之参数:
Message参数,该参数能够当编译信息输出窗口被输出对应的消息,这对源代码信息之主宰是死重要的,其下办法是:
#pragma message(消息文本)

当编译器遇到这漫漫指令时,就在编译输出窗口中将消息文本显示出来。
另外一个施用比较多得pragma参数是code_seg.格式如:
#pragma code_seg([“section_name”[,section_class]])

它能设置程序中函数代码存放的代码段,在出驱动程序的下便见面采取及它们。
参数once,可确保证头文件为编译一软,其格式为:
#pragma once

万一以头文件的无限初步在这漫长指令就能确保头文件于编译一赖。

6.4.来错误信息命令#error

#error命令强制编译器停止编译,并出口一个错误信息,主要用以程序调试。其使用如下:
#error 信息错
留意,错误信息不用双括号括起来。当遇到#error命令时,错误信息将显示出。
譬如说,以下编译预处理器命令判断预定义宏__STDC__,如果其价值不为1,则显得一个错误信息,提示程序员该编译器不支持ANSI
C标准。

#if __STDC__!=1
   #error NOT ANSI C
#endif

 

内联函数

在使用#define定义带参数宏时,在调用函数时,一般需充实系统的付出,如参数传递,跳反控制,返回结果等额外操作需要系统内存和实行时。而使用带来参数宏时,通过宏替换可重复编译前将函数代码展开导源代码中,使编译后的目标文件含有多段重复的代码。这样做,会多程序的代码量,都得抽执行时。
于C99标准钟,还提供另外一栽缓解措施:使用内联函数。
当先后编译时,编译器将先后中出现的内联函数的调用表达式用外联函数的函数体来进展替代。显然,这种做法未会见生转去改变回得问题。都是由当编译时用函数体中之代码被代表到程序中,因此会增加目标代码量,进而增加空间的开支,而于时刻支付高达不像函数调用时那么坏,可见她是因追加目标代码为代码来换取时间的节约。
概念内联函数之道好简单,只要在定义函数头的前面加上要字inline即可。内联函数的概念及一般函数一样。例如,定于一个零星独整数相加的函数:

#include<stdio.h>
#include<stdlib.h>

inline int add(int x,int y);

inline int add(int x,int y)
{
   return x+y;
}

int main()
{
   int i,j,k;
   printf("请输入两个整数的值:\n");
   scanf("%d %d",&i,&j);
   k=add(i,j);
   printf("k=%d\n",k);

   return 0;
}

 

在程序中,调用函数add时,该函数在编译时会将上述代码复制过来,而未是诸如相似函数那样是运作时于调用。

外联函数有所相似函数的特点,它与一般函数所不同之处在于函数调用的拍卖。一般函数进行调用时,要讲程序执行权转导被调函数着,然后重新回到到调用到它的函数中;而内联函数在调用时,是以调用表达式用外联函数体来替换。在行使外联函数时,应该小心如下几点:

  • 以内联函数内部允许用循环语句子和开关语句。
  • 内联函数的概念必须出现在内联函数首先不成被调用之前。

其实,在次中宣称一个函数为内联时,编译以后是函数不必然是内联的,即程序只是建议编译器使用内联函数,但是编译器会根据函数情况控制是否使用内联,所以一旦编写的内联函数中起循环或者开关语句,程序吗不见面唤醒出错,但生函数已经休是外联函数了。一般还是称一个袖珍函数作为内联函数。

 

相关文章