zoukankan      html  css  js  c++  java
  • C/C++预处理

         今天来讨论下C/C++中的预处理。

    预处理

    (1)概念:预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理的编程语言一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分进行处理,处理完毕自动进入对源程序的编译。

          处理预处理语句的程序称为预处理程序,也就是常说的预处理器,它包含在编译器中。预处理程序首先读源文件。预处理的输出是“翻译单元”,它是存放在内存听临时文件。编译器接受预处理的输出,并把源代码化成包含机器语言指令的目标文件。

          预处理器的作用是通过预处理的内建功能对一个资源进行等价替换。

    (2)常见的预处理:文件包含、条件编译、布局控制和宏替换。

          <1>文件包含:

                             1.#include <文件名> 编译器从编译系统设定的包含文件的目录中查找文件,所以它常用于包含系统的头文件,如:iostream.h、math.h等。

                             2.#include "文件名" 编译器从当前工作目录中开始查找文件,若未找到再到包含文件的目录中去查找,所以它常用于查找用户自己编写的文件。

          <2>宏替换:#define,可以定义符号常量、函数功能、重新命名、字符串的拼接等各种功能。

          <3>条件编译:#if、#ifndef、#ifdef、#endif、#undef等是比较常见的预处理,主要是编译时进行有选择的挑选,注释掉一些指定的代码,以达到版本控制、防止对文件重复包含的功能。

               比如,常用于区别debug和release编译的#ifdef _DEBUG:

    int main(int argc, char* argv[])
    {
    #ifdef _DEBUG //如果是debug编译
    ...
    打印详细日志的代码
    ...
    #else //如果是release编译
    ...
    打印普通日志代码
    ...
    #endif
    return 0;
    }

          <4>布局控制:#progma,主要功能是为编译程序提供非常规的控制流信息。

                1.#progma comment(...):该指令将一个注释记录放入一个对象文件或可执行文件中。常用的lib关键字可以用于链接一个库文件,如#progma comment(lib,"user32.lib")指令用来将user32.lib库文件加入到工程中。

                2.#progma once:只要在头文件的最开始加入这条指令就能够保证头文件被编译一次。

                3.#pragma pack:有关内存对齐知识,这里不作详细说明。

                               

  • 相关阅读:
    jquery 筛选元素(1)
    jquery操作元素的位置
    jquery 操作css 选择器
    jquery 操作css 尺寸
    jquery 标签中的属性操作
    jquery基本选择器
    jquery表单属性筛选元素
    jquery属性值选择器
    jquery 层级选择器
    jquery的基本选择器
  • 原文地址:https://www.cnblogs.com/danshui/p/2309509.html
Copyright © 2011-2022 走看看