精华内容
下载资源
问答
  • 问关于C语言中的预处理命令 答 我们可以在C 源程序中插入传给 编译程序的各种指令这些指令被称为预处理器指令等价于汇编语言中的伪指令它们扩充了程序设计的环境 现把常用的 预处理命令总结如下 1. 预处理程序 按照...
  • C语言预处理命令

    2015-08-28 21:57:00
    C语言预处理命令  C语言编译器处理时经过的第一个步骤是预处理,就是从.c文件处理为.i文件。在预处理时编译器做了一些展开替换的处理。  1>头文件展开,即将#include "stdio.h"类似的文件...

    C语言的预处理命令

     

      C语言编译器处理时经过的第一个步骤是预处理,就是从.c文件处理为.i文件。在预处理时编译器做了一些展开替换的处理。

      1>头文件展开,即将#include "stdio.h"类似的文件展开。

      2>宏定义的替换工作,即将程序中的宏定义内容替换好。

    #include"stdio.h"
    #define R 10
    int main()
    {
    	int a = R;
    }
    

      经过预处理之后代码变为

    //...stdio.h里的内容未展示
    //宏定义的地方已经替换到程序中
    int main()
    {
    	int a = 10;
        return 0; }

      宏定义做的替换是整体替换,和语法无关,它不遵循语法规则。

      宏定义一般两种用法,一种是定义一种常量,另一种是定义一个宏函数

    #define N(n,m) n+m//宏定义
    int main()
    {
             int c;
             c = N(1,2);//对1和2相加 
          return 0; }

      其实经过预处理之后变为

    int main()
    {
    	int c;
    	c = 1 + 2;
         return 0; }

      另一种应用宏函数,因为宏定义不会考虑语法,它只是作整体代换,所以可以写出不考虑变量类型的函数,这一点是他的优点

      举例说明,如下代码:

    #define N(n,m) n+m//宏定义
    int main()
    {
    	int e = N(10,20) * N(10,20)//预处理之后是int e = 10 + 20 * 10 + 20;
    //上面容易算错误!!
    	return 0;
    }
    

      3>条件编译:有些语句希望在条件满足时才编译。

    #ifdef 标识符
      //程序段1
    #else
      //程序段2
    #endif
    

      当标识符已经定义时,程序段1才参加编译

      在其使用时和define一样也是做了一个替换工作。
     
    对C语言有了一定认识。。。看Linux C语言视频学的。

     

    posted @ 2015-08-28 21:57 #Cloud 阅读(...) 评论(...) 编辑 收藏
    展开全文
  • C程序的源代码中可包括各种编译指令,这些指令称为预处理命令。虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境。本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性。ANSI标准...

    C程序的源代码中可包括各种编译指令,这些指令称为预处理命令。虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境。本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性。ANSI标准定义的C语言预处理程序包括下列命令:

    #define,#error,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#undef,#line,#pragma等。非常明显,所有预处理命令均以符号#开头,下面分别加以介绍。

    一 #define

    命令#define定义了一个标识符及一个串。在源程序中每次遇到该标识符时,均以定义的串代换它。ANSI标准将标识符定义为宏名,将替换过程称为宏替换。命令的一般形式为:

    #define identifier string

    注意:

    1该语句没有分号。在标识符和串之间可以有任意个空格,串一旦开始,仅由一新行结束。

    2宏名定义后,即可成为其它宏名定义中的一部分。

    3 宏替换仅仅是以文本串代替宏标识符,前提是宏标识符必须独立的识别出来,否则不进行替换。例如:

    #define XYZ this is a tes

    使用宏printf("XYZ");//该段不打印"this is a test"而打印"XYZ"。因为预编译器识别出的是"XYZ"

    4如果串长于一行,可以在该行末尾用一反斜杠' \'续行。

    #defineLONG_STRING"this is a very long\
    string that is used as an example"

    5 C语言程序普遍使用大写字母定义标识符。

    6 用宏代换代替实在的函数的一大好处是宏替换增加了代码的速度,因为不存在函数调用的开销。但增加速度也有代价:由于重复编码而增加了程序长度。

     

    二 #error

    命令#error强迫编译程序停止编译,主要用于程序调试。

    #error指令使预处理器发出一条错误消息,该消息包含指令中的文本.这条指令的目的就是在程序崩溃之前能够给出一定的信息。

    三 #include

    命令#i nclude使编译程序将另一源文件嵌入带有#include的源文件,被读入的源文件必须用双引号或尖括号括起来。例如:

    #include"stdio.h"或者#include<stdio.h>

    这两行代码均使用C编译程序读入并编译用于处理磁盘文件库的子程序。

    将文件嵌入#i nclude命令中的文件内是可行的,这种方式称为嵌套的嵌入文件,嵌套层次依赖于具体实现。

    如果显式路径名为文件标识符的一部分,则仅在那些子目录中搜索被嵌入文件。否则,如果文件名用双引号括起来,则首先检索当前工作目录。如果未发现文件,则在命令行中说明的所有目录中搜索。如果仍未发现文件,则搜索实现时定义的标准目录。

    如果没有显式路径名且文件名被尖括号括起来,则首先在编译命令行中的目录内检索。如果文件没找到,则检索标准目录,不检索当前工作目录

    四 条件编译命令

    有几个命令可对程序源代码的各部分有选择地进行编译,该过程称为条件编译。商业软件公司广泛应用条件编译来提供和维护某一程序的许多顾客版本。

    #if、#else,#elif及#endif

    #if的一般含义是如果#if后面的常量表达式为true,则编译它与#endif之间的代码,否则跳过这些代码。命令#endif标识一个#if块的结束。

    #if constant-expression

    statement sequence

    #endif

    Eg:

     1 #define MAX 91
     2 
     3 #include <iostream>
     4 
     5 using namespace std;
     6 
     7 int main()
     8 
     9 {
    10 
    11 #if MAX > 99
    12 
    13        cout<<"MAX is bigger than 99"<<endl;
    14 
    15 #elif MAX > 90
    16 
    17        cout<<"MAX is bigger than 90"<<endl;
    18 
    19 #else
    20 
    21        cout<<"MAX is smaller than 90"<<endl;
    22 
    23 #endif
    24 
    25        return 0;
    26 
    27 }

    跟在#if后面的表达式在编译时求值,因此它必须仅含常量及已定义过的标识符,不可使用变量。表达式不许含有操作符sizeof(sizeof也是编译时求值)。

    #else命令的功能有点象C语言中的else;#else建立另一选择(在#if失败的情况下)。注意,#else属于#if块。

     

    #elif命令意义与ELSE IF 相同,它形成一个if else-if阶梯状语句,可进行多种编译选择。#elif 后跟一个常量表达式。如果表达式为true,则编译其后的代码块,不对其它#elif表达式进行测试。否则,顺序测试下一块。

     

    #if expression

    statement sequence

    #elif expression1

    statement sequence

    #endif

     

    在嵌套的条件编译中#endif、#else或#elif与最近#if或#elif匹配。

    # ifdef 和# ifndef

     

    条件编译的另一种方法是用#ifdef与#ifndef命令,它们分别表示"如果有定义"及"如果无定义"。# ifdef的一般形式是:

     

    # ifdef macroname

    statement sequence

    #endif

     

    #ifdef与#ifndef可以用于#if、#else,#elif语句中,但必须与一个#endif。

     

    View Code
    #define MAX 91
    
    #include <iostream>
    
    using namespace std;
    
     
    
    int main()
    
    {
    
    #ifdef MAX
    
           cout<<"hello,MAX!"<<endl;
    
    #else
    
           cout<<"where is MAX?"<<endl;
    
    #endif
    
    #ifndef LEO
    
           cout<<"LEO is not defined"<<endl;
    
    #endif
    
           return 0;
    
    }

     

    命令#undef 取消其后那个前面已定义过有宏名定义。一般形式为:

    #undef macroname

    命令#line改变__LINE__与__FILE__的内容,它们是在编译程序中预先定义的标识符。命令的基本形式如下:

    #line number["filename"]

    其中的数字为任何正整数,可选的文件名为任意有效文件标识符。行号为源程序中当前行号,文件名为源文件的名字。命令#line主要用于调试及其它特殊应用。注意:在#line后面的数字标识从下一行开始的数字标识

    #line 100 "jia"

           cout<<"#line change line and filename!"<<endl; //line 100

           cout<<__LINE__<<endl; //101

           cout<<__FILE__<<endl; //jia

    五 #pragma
    命令#pragma 为实现时定义的命令,它允许向编译程序传送各种指令。

    #pragma的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与CC++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。
    其格式一般为: #Pragma Para
    1 message 参数。

     Message 参数能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:
    #pragma message(“消息文本”)
    当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。
    当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法
    #ifdef _X86
    #pragma message(“_X86 macro activated!”)
    #endif
    当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_
    X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了。

    2  code_seg 参数。

    格式如:
    #pragma code_seg( ["section-name"[,"section-class"] ] )
    能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。

    3 #pragma once (比较常用)
    只要在头文件的最开始加入这条指令就能够保证头文件被编译一次。这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。

    4 #pragma hdrstop

    表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。
    有时单元之间有依赖关系,比如单元A依赖单元B,所以单元B要先于单元A编译。你可以用#pragma startup指定编译优先级,如果使用了#pragma package(smart_init) ,BCB就会根据优先级的大小先后编译。

    5 #pragma resource "*.dfm"

    表示把*.dfm文件中的资源加入工程。*.dfm中包括窗体外观的定义。

    6 #pragma warning( disable : 4507 34; once : 4385; error : 164 )

    等价于:
    #pragma warning(disable:4507 34) /* 不显示450734号警告信息。如果编译时总是出现4507号警告和34号警告,  而认为肯定不会有错误,可以使用这条指令。*/
    #pragma warning(once:4385) // 4385号警告信息仅报告一次
    #pragma warning(error:164) // 164号警告信息作为一个错误。
    同时这个pragma warning 也支持如下格式:
    #pragma warning( push [ ,n ] )
    #pragma warning( pop )
    这里n代表一个警告等级(1---4)。
    #pragma warning( push )保存所有警告信息的现有的警告状态。
    #pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告等级设定为n
    #pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的一切改动取消。例如:
    #pragma warning( push )
    #pragma warning( disable : 4705 )
    #pragma warning( disable : 4706 )
    #pragma warning( disable : 4707 )
    //.......
    #pragma warning( pop )
    在这段代码的最后,重新保存所有的警告信息(包括4705,4706和4707)。

    7 pragma comment(...)
    该指令将一个注释记录放入一个对象文件或可执行文件中。
    常用的lib关键字,可以帮我们连入一个库文件。

    8 progma pack(n)

    指定结构体对齐方式。#pragma pack(n)来设定变量以n字节对齐方式。

    n 字节对齐就是说变量存放的起始地址的偏移量有两种情况:

    第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,

    第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。

    结构的总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数;否则必须为n的倍数。

    下面举例说明其用法。

    #pragma pack(push) //保存对齐状态
    #pragma pack(4)//设定为4字节对齐
    struct test
    {
    char m1;
    double m4;
    int m3;
    };
    #pragma pack(pop)//恢复对齐状态
    为测试该功能,可以使用sizeof()测试结构体的长度!

     

    转载于:https://www.cnblogs.com/cpoint/archive/2013/04/07/3003295.html

    展开全文
  • C语言文件包含与头文件写法C语言文件包含的处理方法:(1)处理时间:(#include)预处理阶段(2)处理方法:在预处理阶段,系统自动对#include命令进行处理。具体做法是:将包含文件的内容复制到包含语句(#include)处,...

    C语言文件包含与头文件写法

    C语言文件包含的处理方法:

    (1)处理时间:

    (#include)预处理阶段

    (2)处理方法:在预处理阶段,系统自动对#include命令进行处理。具体做法是:将包含文件的内容复制到包含语句(#include)处,得到新的文件,然后对新的文件进行编译。

    一般情况下包含文件分为两种:包含.h 文件和包含.c文件包含.c文件的编译和编译多文件程序(包含.h的文件就是如此) 是不同的

    例子:

    #include

    //#include "fun.c"

    int main()

    {

    int a = , b = ; c = a; sun(a, b);

    printf("\r\n c = %d\r\n", c);

    return ;

    }

    /*end of file1*/ [cpp] view plaincopy

    [cpp] view plaincopy

    /*file2: fun.c*/

    int c = ;

    void sun(int a, int b)

    {

    printf("\r\n a + b = %d\r\n", a+b);

    [cpp] view plaincopy c = ;

    printf("\r\nc = %d\r\n", c);

    }

    再来一个包含.h的头文件吧

    #include "stm32f10x.h"

    #include "bsp_led.h"

    void Delay(__IO u32 nCount);

    int main(void)

    {

    LED_GPIO_Config();

    while ()

    {

    LED1( OFF );

    Delay(0x0FFFFF*);

    LED1( ON );

    Delay(0x0FFFFF*);

    }

    }

    void Delay(__IO uint32_t nCount) //简单延时代码

    {

    for(; nCount != ; nCount--);

    }

    三:条件编译

    一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile)。条件编译语句排版时,需考虑以下三种位置:

    1)条件编译语句块与函数定义体之间不存在相互嵌套(主要在(.h)文件中);

    2)条件编译语句块嵌套在函数体之外(主要在(.c)文件中);

    3)条件编译语句嵌套在函数体内 (主要在(.c)文件中)。条件编译指令将决定哪些代码被编译,而哪些是不被编译的。可根据表达式的值或某个特定宏是否被定义来确定编译条件。

    指令编辑

    条件编译指令将决定哪些代码被编译,而哪些是不被编译的。可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件。

    #if、#else、#elif和#endif指令

    一般形式有如下几种

    (1)

    #if 表达式

    // 语句段1

    [#else

    // 语句段2]

    #endif

    如果表达式为真,就编译语句段1,否则编译语句段2[1]

    (2)

    #if 表达式1

    // 语句段1

    #elif 表达式2

    // 语句段2

    #else

    // 语句段3

    #endif

    如果表达式1真,则编译语句段1,否则判断表达式2;如果表达式2为真,则编译语句段2,否则编译语句段3

    #ifdef和#ifndef

    (1)#ifdef的一般形式:[1]

    #ifdef 宏名 // 语句段 #endif

    作用:如果在此之前已定义了这样的宏名,则编译语句段。

    (2)#ifndef的一般形式:[1]

    #ifndef 宏名 // 语句段 #endif

    作用:如果在此之前没有定义这样的宏名,则编译语句段。

    #else可以用于#ifdef和#ifndef中,但#elif不可以。

    #error

    指令将使编译器显示一条错误信息,然后停止编译。

    #line

    指令可以改变编译器用来指出警告和错误信息的文件号和行号。

    #pragma

    指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。

    举例

    #include

    #define LETTER 1

    int main( int argc, char * argv[] )

    {

    char str[]="C Language",c;

    int i;

    i=;

    while( (c=str[i]) != '\0' )

    {

    i++;

    #if LETTER

    if( c>='a' && c<='z' )

    c=c-;

    #else

    if( c>='A' && c<='Z' )

    c=c+;

    #endif

    printf( "%c",c );

    }

    return ;

    }

    运行结果为C LANGUAGE

    常用预处理命令

    #空指令,无任何效果

    #include包含一个源代码文件

    #define定义宏

    #undef取消已定义的宏

    #if如果给定条件为真,则编译下面代码

    #ifdef如果宏已经定义,则编译下面代码

    #ifndef如果宏没有定义,则编译下面代码

    #elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码

    #endif结束一个#if……#else条件编译块

    #error停止编译并显示错误信息

    b0e46ab7b4f6c4a2bdf0fc648a1f483c.png

    欢迎大家一起交流 ,分享程序员励志故事。   幸福的程序员 QQ群:160441098

    f66c0f1731ea37ab0d963871d912ce3a.png

    展开全文
  • 第9章预处理命令 教师于扬 主要内容 一 宏定义二 文件包含三 条件编译 预处理命令 所谓预处理 就是C编译程序对C源程序编译前由编译预处理程序预处理命令进行处理的过程 C语言中 以 开头 如 define 的语句统称为...

    第9章预处理命令 教师于扬 主要内容 一 宏定义二 文件包含三 条件编译 预处理命令 所谓预处理 就是C编译程序对C源程序编译前由编译预处理程序对预处理命令进行处理的过程 C语言中 以 开头 如 define 的语句统称为编译预处理命令 这些命令必须在一行的开头以 开始 末尾不加分号 以区别一般的C语句 C语言的预处理命令 按功能不同分三类 宏定义 define undef文件包含 include条件编译 if else 9 1宏定义 宏替换 一 不带参数的宏定义即符号常量定义语句 就是用一个指定的标识符来代表一个字符串 其一般形式为 define宏名 标识符 替换文本编译时编译预处理程序自动对源程序中的 宏名 用 替换文本 来替换 也叫作宏展开 例如 defineLENGTH300 definePI3 1415926 宏替换使用说明 1 宏名一般用大写字母 以示与一般变量区别 2 使用宏替换的作用是提高程序的清晰性 可移植性 3 在同一个程序段中 同一个宏名不能重复定义 4 替换文本 中可以包含已定义过的宏名 5 替换文本 不能替换双引号中的字符串 defineR3 0 definePI3 1415926 defineL2 PI R definesPI R Rmain printf L f nS f n L S 6 宏定义是用宏名代替一个字符串 是简单的置换 并不作语法检查 例 definePI3 l4l59其中将3 l4l59中的1误写成l 在编译此名时并不指出宏定义有错误 而是在编译到含有PI的语句时指出PI有错 7 宏定义语句末尾不能加分号 否则会连分号一起置换 8 可用 undef命令终止宏定义的作用域 9 宏定义是专门用于预处理命令的一个专用名词 它与定义变量的含义不同 只作字符替换 不分配内存空间 9 1 2带参数的宏定义 一般形式 define宏名 参数表 字符串说明 字符串 中包含 参数表 中所指定的参数 例 带参数的宏定义 defineDB x x 2 main doubley floatz 10 y DB z 等价于 y z 2 printf y f n y 区别函数和带参数的宏定义 函数调用时 先求出实参表达式的值 再用这个值赋给形式参数 带参数的宏定义仅仅进行字符串的简单替换 函数调用是在程序运行时分配临时内存单元 而宏展开是在编译时进行 展开时不分配内存单元 不进行值传递 函数调用只占运行时间 宏替换只占编译时间 宏替换后使源程序增长 函数调用不会 写出下面程序的运行结果 defineMIN x y x y x y main inti 10 j 15 k k 10 MIN i j printf d n k 100 应展开为 10 x y x y 15 9 2文件包含 文件包含就是在一个文件中 包含另外一个文件的全部内容 文件包含功能由 include命令来实现 include命令的一般形式 include 文件名称 include在一些版本的C语言中 还允许 文件名 中带路径 include file2 c A A B B file1 c file1 c file2 c 包含 文件包含示意图 a b 说明 被包含的文件常以 h head 结尾 用在文件头部 被称为 标题文件 或 头部文件 其扩展名也可以为其它 如 c 如果需要修改一些常数 不必修改每个程序 只需修改一个文件 头部文件 即可 例9 8 include的使用 include includemain floata b floatc scanf f f 区别 文件名 和 关于 include的使用 include 文件名 带双引号的文件名 系统将先在源程序所在的目录内查找指定的包含文件 如果找不到 再按照系统指定的标准方式到相关的目录中去寻找 多用于包含用户文件 include文件名用尖括号括起来 则系统将直接按照指定的标准方式到相关的目录中去寻找 多用于包含标准库函数 FileEditRunCompileProjectOptionsDebugBreak watch Compiler Linker Environment Directories Includedirectories C TC INCLUDE Librarydirectories C TC LIB Outputdirectory D CDATA TurboCdirectory C TC Pickfilename Currentpickfile 使用文件包含需注意 一条文件包含命令只能包含一个文件 如果需要包含多个文件 就必须使用多条文件包含命令 文件包含的定义是可以嵌套的 即允许一个被包含的文件包含其它文件 被包含文件与其所在的文件在预编译后成为同一个文件 9 3条件编译 条件编译是指编译时对源程序的某种控制 在一定的条件下 源程序中的某些特殊语句参加编译 而在另一种条件下 同样的这些语句不参加编译 常用命令 ifdef命令 ifndef命令 if命令 条件编译格式一 ifdef命令 格式 ifdef标识符程序段1 else程序段2 endif功能 当 标识符 已经被定义过 则编译程序段1 否则编译程序段2 条件编译格式二 ifndef命令 格式 ifndef标识符程序段1 else程序段2 endif功能 当 标识符 未被定义过 则编译程序段1 否则编译程序段2 条件编译格式三 if命令 格式 if表达式程序段1 else程序段2 endif功能 当 表达式 的值非0时 则编译程序段1 否则编译程序段2 例1 defineDEBUGmain inta 14 b 15 c c a b ifdefDEBUGprintf a d b d n a b elseprintf c d n c endif 例2 main inta 14 b 15 c c a b ifndefDEBUGprintf a d b d n a b elseprintf c d n c endif 例3 defineDEBUG1main inta 14 b 15 c c a b ifDEBUGprintf a d b d n a b elseprintf c d n c endif 9 4预定义宏 预定义宏是C编译器预先定义好的宏 不是用户定义的 因而不能出现在 define与 undef语句中 如 FILE DATE 等一些常见预定义宏标识符 例 预定义宏使用举例 main printf s n FILE printf s n DATE printf s n TIME 结果显示 c data a cMay22200121 02 54 9 5运算符 和 在带参数的宏替换中 若形参中含有 例如 definedisplay i printf i display Thisisatest 则替换为 printf Thisisatest 字符串 字符串 宏替换符号 例如 构造标识符 definevar n i n i var x 4 x4 字符串1 字符串2 字符串1字符串2 课堂练习 1 以下叙述中不正确的是 A 预处理命令行都必须以 号开始 B C程序中凡是以 开始的命令行都是预处理命令行 C C程序在执行过程中对预处理命令进行预处理 D 以下是正确的宏定义 defineIBM PC 2 在宏定义 definePI3 1415926中 用宏名PI代替一个 A 常量 B 单精度数 C 双精度数 D 字符串 3 以下程序的运行结果是 include stdio h defineFUDGE y 2 84 y definePR a printf d int a definePRINT1 a PR a putchar n main intx 2 PRINT1 FUDGE 5 x 4 以下程序的运行结果是 main intb 5 defineb2 definef x b x inty 3 printf 4d f y 1 undefbprintf 4d f y 1 defineb3printf 4d n f y 1 5 设有以下程序 为使之正确运行 请填入应包含的命令行 其中 tryme 函数在a myfile1 c中有定义 main printf n tryme 读程序 写结果 definePR ar printf d ar main intj a 1 3 5 7 9 11 13 15 i 5 for j 3 j j switch j case1 case2 PR a i break case3 PR a i 若有宏定义如下 definex5 defineYX 1 defineZY X 2那么执行以下printf语句后 输出结果是 inta a Y printf d n Z printf d n a A7B12C12D76655 若有宏定义 defineMOD x y x y则执行以下语句后的输出为 intz a 15 b 100 z MOD b a printf d n z A11B10C6D宏定义不合法

    展开阅读全文

    展开全文
  • C 语言中的预处理命令 答 我们可以在 C 源程序 中插入传给 编译程序 的各种指令这些指令被称为 预处理器指令等价于 汇编语言中的伪指令 它们扩充了程序设计的环境 现把常用的 预处理命令 总结如下 预处理程序 ...
  • 一、宏定义#define宏定义就是用一个字符来表示一个字符串,让程序更简明,同时也便于修改,如#define PI 3.1415926 这样的都很常见,也不会产生什么问题,容易出现问题的就是带参数的宏定义,例如#define S(x) x*x...
  • 问关于 C 语言中的预处理命令 答 我们可以在 C 源程序 中插入传给 编译程序 的各种指令这些指令被称为 预处理器指令等价于 汇编语言中的伪指令 它们扩充了程序设计的环境 现把常用的 预处理命令 总结如下 1....
  • C语言预处理命令

    2014-03-22 22:45:00
    1.前沿 ...这些预处理命令不是C语言本身的组成部分,不能直接对它们进行编译。先要对程序中的这些特殊的命令进行“预处理”,经过预处理后的程序不在包括预处理命令了,最后再由编译程序对预处理...
  • C语言预处理命令#define的用法 define是C语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供方便。 预处理命令以“#”号开头,如包含命令#include,宏定义命令#define等。一般都放在源文件的...
  • c语言预处理命令

    2020-02-10 21:59:27
    c提供的预处理功能有: 宏定义 文件包含 条件编译 为了与其她c语句区分,命令经常以符号“#”开头。 宏定义 #define 标识符 字符串 可以避免反复输入字符串,后面不加;宏定义在默认时的有效范围是全部。也可以...
  • 匿名用户1级2017-12-21 回答...现把常用的预处理命令总结如下:1. 预处理程序按照ANSI标准的定义,预处理程序应该处理以下指令:#if #ifdef #ifndef #else #elif#endif#define#undef#line#error#pragma#include显...
  • c语言预处理命令

    2015-01-11 13:13:06
    在前面各章中,已多次使用过以“#”号开头的预处理命令。如包含命令#include,宏定义命令#define等。在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,它们称为预处理部分。 所谓预处理是指在进行...
  • 预处理命令是在程序编译阶段进行执行的命令,用于编译与特定环境相关的可执行文件。预处理命令扩展了C语言。 一、宏替换命令 不用多讲,大家都懂。 #define 标识符 字符串 下面总结一些比较特殊的宏: 1、...
  • c语言预处理命令

    2019-11-23 23:02:55
    1:宏替换命令: #define 标识符 字符串 编译器每次遇到宏替换命令所定义...宏名可以参量数每次遇到宏名时,与之相连的形式参数均由程序中的实际参数代替。 #include<iostream> using namespace std; #d...
  • C语言编译器处理时经过的第一个步骤是预处理,就是从.c文件处理为.i文件。在预处理时编译器做了一些展开替换的处理。1>头文件展开,即将#include "stdio.h"类似的文件展开。2>宏定义的替换工作,即将程序中的...
  • C语言-预处理命令

    2011-12-23 16:21:00
    现把常用的预处理命令总结如下: 1. 预处理程序 按照ANSI标准的定义,预处理程序应该处理以下指令: #if #ifdef #ifndef #else #elif #endif #define #undef #line #error #pragma #include 显然,上述所有的...
  • C语言include预处理命令与多文件编译

    千次阅读 2018-04-27 10:56:17
    #include预处理命令几乎使我们在第一次接触C的时候就会碰到的预处理命令,可我现在还不怎么清楚,这次争取一次搞懂。一、#include预处理指令的基本使用预处理指令可以将别处的源代码内容插入到现在的位置,可以标识...
  • 预处理命令 编译:对源程序进行词法、语法分析,生成代码,优化等 作用:在编译之前,对源程序中的特殊命令做一些处理,生成拓展C源程序 宏定义 不带参数的宏定义 一般形式:#define 标识符 字符串 功能:用指定...
  • 本文内容收集自网络,仅供自己学习和大家交流之用,如果侵犯了您的权益,请及时通知,会及时撤下! 预处理过程扫描源代码,对其进行初步的...要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,373
精华内容 549
关键字:

c语言程序预处理命令

c语言 订阅