程序环境和预处理

程序环境和预处理

1. 预处理

(1) C语言的预处理是C语言代码编译过程中的一个重要环节
(2) test.c =>test.exe是一个编译过程,完成编译工作的软件称为"编译器"(广义的编译器里面包含了预处理器,词法分析器,语法分析器,语义分析器,中间代码生成器,优化器和链接器)
(3)在这里插入图片描述

2. 预处理指令

代码中#开头的都是预处理指令:
#define,#include,#pragma,#if,#else,#endif,#ifdef,#ifndef;

3. 宏

(1) #define 创建一个宏定义;(宏除了通过#define在代码中定义之外,还可以直接通过编译期的编译选项来指定;它可以用来进行一些测试代码的切换)
#undef 移除一个宏变量
(2) 宏的本质:文本替换,在预处理阶段进行替换过程.
(3) 常用的宏:
FILE 进行编译的源文件;
__LINE__文件当前的行号;
__DATE__文件被编译的日期;(可以用来区分当前程序版本)
__TIME__文件被编译的时间;(可以用来区分当前程序版本)
__STDC__如果编译器遵循ANSI C(C语言),其值为1,否则是未定义行为;
(4)宏是一个类型强大的东西,功能有的时候超乎想象,它的典型用法:

  1. 通过宏定义常量
  2. 通过宏定义类型的别名
  3. 通过宏定义一些新的"关键字",“运算符”
  4. 通过宏定义一些"代码片段"实现类似于函数,甚至"泛型函数"的效果
    (5)用宏替代函数的好处:
  5. 实现类似于泛型编程的效果
  6. 宏能够减少函数调用带来的开销
    注:虽然如此,仍然不建议用宏代替函数
    宏替代函数的缺点是:
  7. 由于这个文本替换,稍不留神,就容易产生一些和想象中完全不一样的运算结构
  8. 对于参数和返回值是没有类型检查的
  9. 复杂的宏不好理解,不好调试
  10. 不能支持递归
4. 条件编译

(1) 条件编译包括:
#if
#else
#endif
#ifdef
#ifndef
#if和#ifdef以及#ifndef要求后面的参数是一个"常量"或者一个"宏"(必须是编译期可以确定的值)
(2) 条件编译的重要用法:

  1. 配合编译器选项定义宏这样的机制,实现控制调试代码是否被编译
  2. 可以通过条件编译实现跨平台
  3. 实现多行注释(可以嵌套)
    #if
    #endif
  4. 保证头文件只被包含一次(有更好的办法用#pragma one替代)
    注: 头文件本质上是通过文本替换实现预处理指令
    (3)头文件两种形式
    #include< > : 先找系统目录(编译器安装所在的目录),再找当前项目的目录
    #include" " : 先找当前项目的目录,再找系统目录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值