精华内容
下载资源
问答
  • 《级C语言编译预处理》由会员分享,可在线阅读,更多相关《级C语言编译预处理(20页珍藏版)》请在人人文库网上搜索。1、张居克,2010.11.21,编译预处理,电子邮件:编译预处理,1。宏定义和调用(不带参数的宏,带...

    《级C语言编译预处理》由会员分享,可在线阅读,更多相关《级C语言编译预处理(20页珍藏版)》请在人人文库网上搜索。

    1、张居克,2010.11.21,编译预处理,电子邮件:编译预处理,1。宏定义和调用(不带参数的宏,带参数的宏)。2.“文件包含”处理。1.宏观定义。1.不带参数的宏定义的一般形式:#定义以“#”开头的标识符字符串都是预处理命令。“定义”是宏定义命令的“标识符”,而定义的宏名称“字符串”可以是常量、表达式、格式字符串等。例如:#定义PI 3.1415926,预处理命令,程序示例:#定义PI 3.14主(int)r;scanf(“r :% d”),预处理命令,不带参数的宏定义的一般规则:宏名称通常用大写字母表示,而不是经常出现在程序中的常量。宏定义使用宏名而不是字符串,当宏被展开时,它们使用该字符串。

    2、而不是宏名。预处理程序不会检查它。如果有任何错误,它们只能在编译由宏扩展的源程序时找到。预处理命令和宏定义不是描述或语句,所以不需要在行尾添加额外的标记。如果添加了分号,用分号替换的定义必须写在函数之外,并且它们的范围是结束源程序的宏定义命令。如果您想终止它的作用域,可以使用# undef命令。如果宏名在源程序中用引号括起来,预处理器不会用宏替换它。预处理命令和宏定义可以嵌套。在宏定义字符串中,定义的宏名称可以用宏定义来表示数据类型,这使得编写更加方便。但是,有必要对“输出格式”进行不同于typedef的宏定义,这样可以减少编写麻烦,但是不建议使用预处理命令。2.带参数的宏定义的一般形式:#定。

    3、义宏名(参数表)字符串带参数的宏调用的一般形式是:宏名(参数表);例如:#定义M(y)y * y 3 * y k=M(5);相当于k=5 * 5 3 * 5预处理命令,带参数的宏定义的一般规则:宏名和形式参数表之间不能有空格,形式参数不分配内存单元,所以没有必要定义类型。宏调用中的参数有特定的值。要使用它们来替换形式参数,有必要进行类型描述。宏定义中的形式参数是标识符,而宏调用中的实际参数可以是表达式和预处理命令。在宏定义中,字符串中的形式参数通常用括号括起来以避免错误。其次,如果一个文件包含一个源文件,它可以包含另一个源文件的所有内容。常规形式:#包含文件名或#包含常规库文件。用户定义文件,。

    4、预处理命令,3。条件编译1。第一种形式:#ifdef标识符部分1 #else部分2 #endif,预处理命令,函数:如果标识符已经由#define命令定义,则编译部分1;否则,编译程序第2节。如果没有程序段2(它是空的),这种格式的#else可以写成:#ifdef标识符程序段#endif,预处理命令,程序示例:main()# if ndef pi printf(“pi未定义n”);#endif,预处理命令,2。第二种形式:#ifndef标识符段1 #否则段2 #endif,预处理命令,函数:如果标识符不是由#define命令定义的,则编译段1,否则编译段2。与第一种形式的功能相反,预处理命令。。

    5、第三种形式:#如果常量表达式程序段1 #否则程序段2 #endif,预处理命令,函数:如果常量表达式的值为真(不为零),编译程序段1,否则编译程序段2。因此,程序可以在不同的条件下完成不同的功能和预处理命令。例如,#定义pi 3.14 main()# if ndef pi printf(“pi未定义”);#否则打印(“PI定义为”,PI);# endif printf( n );预处理命令,摘要,1。预处理函数是一种特定于语言的函数,它是由预处理程序在源程序正式编译之前完成的。程序员使用预处理命令在程序中调用这些函数。2.宏定义是用一个标识符来表示一个字符串,它可以是常量、变量或表达式。宏名称将在宏调用中被该字符串替换。3.宏定义可以有参数,在宏调用中,形式参数将被实际参数代替。而不是“价值转移”。为了避免宏替换中的错误,宏定义中的字符串应该用括号括起来,字符串中出现的形式参数的两边也应该用括号括起来。5.文件包含是预处理的一个重要功能,它可以用来将多个源文件连接成一个源文件进行编译,生成一个目标文件。6.条件编译只允许编译源程序中满足条件的程序段,使生成的目标程序更短。从而减少了内存开销,提高了程序的效率。7.使用预处理功能便于程序的修改、读取、移植和调试,也便于实现模块化程序设计。

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼N1570 5.1.1.2 Translation phases1 The precedence among the syntax rules of translation is specified by the followingphases.6)1. Physical source file multibyte...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    N1570 5.1.1.2 Translation phases

    1 The precedence among the syntax rules of translation is specified by the following

    phases.6)

    1. Physical source file multibyte characters are mapped, in an implementationdefined

    manner, to the source character set (introducing new-line characters for

    end-of-line indicators) if necessary. Trigraph sequences are replaced by

    corresponding single-character internal representations.

    2. Each instance of a backslash character (\) immediately followed by a new-line

    character is deleted, splicing physical source lines to form logical source lines.

    Only the last backslash on any physical source line shall be eligible for being part

    of such a splice. A source file that is not empty shall end in a new-line character,

    which shall not be immediately preceded by a backslash character before any such

    splicing takes place.

    3. The source file is decomposed into preprocessing tokens7) and sequences of

    white-space characters (including comments). A source file shall not end in a

    partial preprocessing token or in a partial comment. Each comment is replaced by

    one space character. New-line characters are retained. Whether each nonempty

    sequence of white-space characters other than new-line is retained or replaced by

    one space character is implementation-defined.

    4. Preprocessing directives are executed, macro invocations are expanded, and

    _Pragma unary operator expressions are executed. If a character sequence that

    matches the syntax of a universal character name is produced by token

    concatenation (6.10.3.3), the behavior is undefined. A #include preprocessing

    directive causes the named header or source file to be processed from phase 1

    through phase 4, recursively. All preprocessing directives are then deleted.

    5. Each source character set member and escape sequence in character constants and

    string literals is converted to the corresponding member of the execution character

    set; if there is no corresponding member, it is converted to an implementationdefined

    member other than the null (wide) character.8)

    6. Adjacent string literal tokens are concatenated.

    7. White-space characters separating tokens are no longer significant. Each

    preprocessing token is converted into a token. The resulting tokens are

    syntactically and semantically analyzed and translated as a translation unit.

    8. All external object and function references are resolved. Library components are

    linked to satisfy external references to functions and objects not defined in the

    current translation. All such translator output is collected into a program image

    which contains information needed for execution in its execution environment.

    脚注6) Implementations shall behave as if these separate phases occur, even though many are typically folded together in practice. Source files, translation units, and translated translation units need not necessarily be stored as files, nor need there be any one-to-one correspondence between these entities and any external representation. The description is conceptual only, and does not specify any particular implementation.

    展开全文
  • #include表示包含字符串处理函数的头文件,是C语言中的预处理命令。C语言标准库中一个常用的头文件,在使用到字符数组时需要使用。string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。string.h在...

    9e760b38b080d0194026b3806a53ee59.png

    #include表示包含字符串处理函数的头文件,是C语言中的预处理命令。

    C语言标准库中一个常用的头文件,在使用到字符数组时需要使用。string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。

    string.h在c语言和c++语言中都被广泛的使用,但是具体情况不是很一样。由于传统的C++脱胎于C,所以传统C++中于C语言中对本词条的用法差不多,经过美国标准化组织修改标准化后的标准C++中,定义则是大不相同。

    包括常用函数如下:

    strlen求字符串长度

    strcmp比较2个字符串是否一样

    strcat字符串连接操作

    strcpy字符串拷贝操作

    strncat字符串连接操作(前n个字符)

    strncpy字符串拷贝操作(前n个字符)

    strchr查询字串

    strstr 查询子串

    举例说明:

    例如strcat()字符串链接函数;strcpy()字符串复制函数等等。

    以strcpy函数为例实现它的调用:#include

    #include"string.h"

    int main()

    {

    char a[50]="asd",b[10]="aaa";

    strcpy(a,b);

    printf("%s\n",a);

    }

    1ac60b48fb8aa9602a67c240ce3964d8.png

    以上就是include是什么意思的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

    相关标签:C语言入门

    展开全文
  • 引导语:你知道编译预处理和动态存储分配是什么意思吗?以下是百分网小编分享给大家的C语言编译预处理和动态存储分配,欢迎大家阅读学习!1.1宏定义(不带参数的宏定义,带参数的宏定义)1.编译预处理就是对C源程序进行...

    引导语:你知道编译预处理和动态存储分配是什么意思吗?以下是百分网小编分享给大家的C语言编译预处理和动态存储分配,欢迎大家阅读学习!

    1.1宏定义(不带参数的宏定义,带参数的宏定义)

    1.编译预处理就是对C源程序进行编译前,由″编译预处理程序″对预处理命令行进行处理的过程。

    2.C语言中,凡是以″#″开头的行,都称为″编译预处理″命令行。C语言中的编译预处命令有:#define,#undef,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#line,#pragma,#error。这些预处理命令组成的预处理命令行必须在一行的开头以″#″号开始,每行的未尾不得加″;″号,以区别于C语句、定义和说明语句。

    3.不带参数的宏定义:命令的一般形式为:

    #define标识符字符串

    定义中的″标识符″为用户定义的标识符,称为宏名。在预编译时,C预编译程序将出现的宏名替换成″字符串″的内容,这一过程也称为宏展开。

    4.带参数的宏定义:命令的一般形式为

    #define宏名(形式参数)字符串

    定义中的″字符串″应包含括号中所指定的形式参数。注意宏名与括号之间不要加空格,否则就成为不带参数的宏定义了。

    5.预编译时,遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换,原则是:遇到实参则以实参代替,非形参字符原样保留,从而成展开后的内容。

    1.2“文件包含”处理

    1.文件包含的一般形式为:

    #include″头文件名″

    #include

    头文件名一般由C语言提供,也可以是用户自己编写的,头文件通常用.h作为后缀。

    2.当头文件名用双引号括起来时,系统首先在使用此命令的文件所在的目录中查找被包含的文件,找不到时,再按系统指定的标准方式检索其它目录;当头文件名用尖括号括起来时,则直接按系统指定的标准检索方式查找被包含的文件。

    3.预编译时,将被包含文件的内容全部复制到包含文件中,这就是文件″包含处理″。

    1.3条件编译

    C语言中的条件编译命令可对源程序代码的各部分有选择地进行编译。条件编译主要有如下3种使用格式:

    使用格式1:

    #ifdef标识符

    程序段1

    #else

    程序段2

    #endif

    使用格式2:

    #ifndef标识符

    程序段1

    #else

    程序段2

    #endif

    使用格式3:

    #if表达式

    程序段1

    #else

    程序段2

    #endif

    使用格式1表示如果已定义了“标识符”,则编译“程序段1”,否则编译“程序段2”;使用格式2表示如没有定义了“标识符”,则编译“程序段1”,否则编译“程序段2”;使用格式3表示如“表达式”的值为“真”时,则编译“程序段1”,否则编译“程序段2”。

    展开全文
  • 变量与运算符本篇以读者知道 int、char、float、double 等数据类型为前提...= 1e-6)#define#define 的处理在程序的预处理阶段,占编译时间,不占运行时间。缺点是不检查语法,只是单纯的宏体与宏名之间的替换。用...
  • c语言编程 开头的#include 是什么意思

    千次阅读 多人点赞 2020-11-25 08:55:22
    #是预处理指令 include 是“包含”的意思 #include " XX" 或者 #include ,意思是将"XX"或者中的文件引用到本程式中来, "XX"或者中的文件通常是由系统提供的,其扩展名为 .h。 因此也称为头文件或首部文件。 C语言的...
  • C语言提供多种预处理功能,主要处理#开始的预编译指令,如宏定义(# define),文件包含(# include),条件编译(# ifdef)等(以*开头的都是预处理命令)。 2.条件语句和条件编译有什么区别? 条件编译是C语言预处理...
  • C语言提供多种预处理功能,主要处理#开始的预编译指令,如宏定义(# define),文件包含(# include),条件编译(# ifdef)等(以*开头的都是预处理命令)。2.条件语句和条件编译有什么区别?条件编译是C语言预处理部分...
  • C语言中的修饰符

    2018-11-08 19:48:19
    什么意思? 这是.c文件经过gcc -E 预处理得到的.i文件中的内容,其中__extension__是什么作用 gcc对标准C语言进行了扩展,但用到这些扩展功能时,编译器会提出警告,使用__extension__关键字会告诉gcc不要提出...
  • 条件编译是C语言预处理部分的内容,它是编译器编译代码时最先处理的部分, 条件编译里面有判断语句,比如 #if 、#else 、#elif 及 #endif 它的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这...
  • #define AFX_EXT_API是什么意思?

    千次阅读 2012-11-29 09:57:31
    #define AFX_EXT_API是什么意思? 为什么不是#define 标识符 字符串 的形式? 在C语言预处理中,可以允许只有标识符而没有字符串的形式。 AFX_EXT_API只是一个标识符,可以不定义值。这个标识符可以用来控制程序的...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    6.3 那么,在C语言中“指针和数组等价”到底是什么意思? 6.4 既然它们这么不同,那为什么作为函数形参的数组和指针声明可以互换呢? 数组不能被赋值 6.5 为什么不能这样向数组赋值?externchar*getpass();...
  • 预处理命令,表示程序包含conio.h库文件; conio.h库文件定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作”,比如getch()函数等等。
  • C语言深度揭秘

    2012-04-12 13:21:16
    1.5.2,sizeof(int)*p表示什么意思?..............18 1.4,signed、unsigned关键字......................................19 1.6,if、else组合 20 1.6.1,bool变量与“零值”进行比较.....................20 ...
  • c语言深度剖析

    2012-08-18 18:59:34
    1.5.2,sizeof(int)*p 表示什么意思?........................................................................18 1.4,signed、unsigned 关键字..............................................................
  • 1.5.2,sizeof(int)*p 表示什么意思?........................................................................18 1.4,signed、unsigned 关键字...............................................................
  • C语言深度解剖

    2012-08-09 19:43:35
    1.5.2,sizeof(int)*p 表示什么意思?........................................................................18 1.4,signed、unsigned 关键字..............................................................
  • o 2.4 extern 在函数声明中是什么意思? o 2.5 关键字 auto 到底有什么用途? o 2.6 我似乎不能成功定义一个链表。我试过 typedef struct { char *item; NODEPTR next; } *NODEPTR; 但是编译器报了错误信息。难道...
  • 1.5.2 sizeof(int)*p表示什么意思 1.6 signed、unsigned关键字 1.7 if、else组合 1.7.1 bool变量与”零值“进行比较 1.7.2 float变量与”零值“进行比较 1.7.3 指针变量与”零值“进行比较 1.7.4 else到底与哪个if...
  • 关于C语言宏定义define的用法探究

    千次阅读 2017-06-15 23:00:35
    C语言中,我们常用#define 来完成宏定义,比如#define N 10 的意思是 给N指定一个值 10,而且在代码预处理之后是直接替换。下面就来具体探讨一下define的用法把。  1、最直接的用法定义一个常量: 如:#define ...
  • 3.20 “semantics of‘’change in ANSI C”的警告是什么意思? 3.21 “无符号保护”和“值保护”规则的区别在哪里? 第4章 指针 基本的指针应用 4.1 指针到底有什么好处? 4.2 我想声明一个指针并为它分配一些空间...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    3.20 “semantics of‘’change in ANSI C”的警告是什么意思? 42 3.21 “无符号保护”和“值保护”规则的区别在哪里? 42 第4章 指针 45 基本的指针应用 45 4.1 指针到底有什么好处? 45 4.2 我想声明...
  • 6.3 那么,在C语言中“指针和数组等价”到底是什么意思?  6.4 既然它们这么不同,那为什么作为函数形参的数组和指针声明可以互换呢?  数组不能被赋值  6.5 为什么不能这样向数组赋值?externchar*getpass();...
  •  6.3 那么,在C语言中“指针和数组等价”到底是什么意思? 6.4 既然它们这么不同,那为什么作为函数形参的数组和指针声明可以互换呢? 数组不能被赋值 6.5 为什么不能这样向数组赋值?externchar*getpass();...

空空如也

空空如也

1 2 3
收藏数 58
精华内容 23
关键字:

c语言预处理什么意思

c语言 订阅