精华内容
下载资源
问答
  • 预处理命令

    2014-12-01 22:32:25
    预处理命令的课件,比较详细呢!是c-free5的~~请大家踊跃下载
  • C++预处理命令 C++中的预处理命令是统一规定的,但预处理命令不是C++语言本身的组成部分,编译系统不能直接对它们进行编译。 读者需要了解的是现在使用的C++编译系统基本上都包括了预处理、编译和连接等部分,因此...

    C++预处理命令

    C++中的预处理命令是统一规定的,但预处理命令不是C++语言本身的组成部分,编译系统不能直接对它们进行编译。

    读者需要了解的是现在使用的C++编译系统基本上都包括了预处理、编译和连接等部分,因此不少读者可能会误认为预处理命令是C++语言的一部分,甚至以为它们是C++语句,这是错误的。

    读者必须可以清晰的区别预处理命令和C++的语句, 区别预处理和编译,才能正确使用预处理命令,C++ 与其他高级语言的一个重要区别是可以使用预处理命令和具有预处理的功能。

    C++提供的预处理功能主要有以下3种

    宏定义
    文件包含
    条件编译

    C++分别用宏定义命令、文件包含命令、条件编译命令来实现。

    为了与一般C++语句相区别,这些命令以符号#开头,而且末尾不包含分号。

    经典案例:C++的预处理命令。

    #include<iostream>//预处理
    using namespace std;//命名空间 
    int main()//主函数 
    {
      cout<<"关注:C语言入门到精通"<<endl; 
    }
    

    执行本程序之后,会输出

    关注:C语言入门到精通
    
    --------------------------------
    Process exited after 1.387 seconds with return value 0
    请按任意键继续. . .
    

    C++使用预处理命令

    更多案例可以go公众号:C语言入门到精通

    展开全文
  • 第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语言本身的组成部分,不能直接对它们进行编译,必须在对程序进行编译前,先对程序中这些特殊的命令进行“预处理”。经过预处理后,程序就不再包括预处理命令了,最后再由编译程序对预处理之后的原程序进行编译处理,得到可供执行的目标代码。C语言提供的预处理功能有3种,分别为宏定义,文件包含和条件编译。

    1.

    宏定义

    宏定义是由源程序中的宏定义命令完成的,宏代换是由预处理程序自动完成的。在C语言中,宏分为有参数和无参数两种。无参宏的宏名后不带参数,其定义的一般形式为:

    #define 标识符 字符串;

    其中“#”表示这是一条预处理命令(在C语言中凡是以“#”开头的均为预处理命令),“define”为宏定义命令,“标识符”为所定义的宏名,“字符串”可以是常数,表达式,格式串等。符号常量的定义就是一种无参宏定义。

    #define M (y*y+3*y);

    它的作用是指定标识符 M

    来代替表达式(y*y+3*y)。在编写源程序时,所有的(y*y+3*y)都可由M代替,而对源程序进行编译时,将先由预处理程序进行宏代换,即用(y*y+3*y)表达式取置换所有的宏名M,然后再进行编译。

    #define 宏名(形参表) 字符串;

    宏名(实参表);

    #define M(y) y*y+3*y

    ......

    k=M(5);

    ......

    在上面的宏调用时,用实参5去代替形参y,经预处理宏展开后的语句为:

    k=5*5+3*5

    2.

    文件包含

    文件包含是C预处理程序的另一个重要功能 ,文件包含命令行的一般形式为:

    #include "文件名"

    或者

    #include

    文件包含命令的功能是把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连城一个源文件。

    在程序设计中,文件包含是很有用的。一个大的程序可以分为多个模块,由多个程序分别编程,有些公用的符号常量或宏定义等可单独组成一个文件,在其他文件的开头用包含命令包含该文件即可使用。

    (1)包含命令中的文件名可以用双引号引起来,也可以用尖括号括起来。例如一下写法都是允许的:

    #include "stdio.h"

    #include

    使用尖括号表示在包含文件目录中取查找(包含目录是由系统的环境变量进行设置的,一般为系统头文件的默认存放目录,比如Linux

    系统在/usr/include目录下),而不再源文件的存放目录中查找:使用双引号则表示首先在当前源文件目录中查找若未找到才到包含目录中取查找。用户编程时可根据自己文件所在的目录来选择某一种命令形式。

    (2)一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。

    (3)文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。

    3.

    条件编译

    预处理程序提供了条件编译的功能,可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文o件,这对于程序的移植和调试是很有用的。条件编译可分为3种形式。

    第一种

    #ifdef 标识符

    程序段1

    #else

    程序段2

    #endif

    第二种

    #ifndef 标识符

    程序段1

    #else

    程序段2

    #endif

    与第一种形式的区别是将“ifdef”改为“ifndef"。它的功能是如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。

    第三种

    #if 常量表达式

    程序段1

    #else

    程序段2

    #endif

    3.

    #error等其他常用预处理命令

    除了上面介绍的之外,C语言还有#error,#line,#pragma等其他常用的预处理命令

    (1)#error 指令强制编译程序停止编译,它主要用于程序调试 #error error-message

    (2)#line 指令改变__LINE__ 和

    __FILE__的内容。__LINE__和__FILE__都是编译程序中预定义的标识符。标识符__LINE__的内容是当前被编译代码行的行号,__FILE__的内容是当前被编译源文件的文件名。

    #line number "filename"

    (3)#pragma

    是编译程序实现时定义的指令,它允许由此向编译程序传入各种命令。例如,一个编译程序可能具有支持跟踪程序执行的选项,此时可以用#pragma语句选择该功能,编译程序忽略其不支持的#pragma选项。使用#pragma预处理命令可提高C源程序对编译程序的可一致性。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 76,922
精华内容 30,768
关键字:

预处理命令