MFC程序生成EXE文件的过程是:预处理-编译-链接-打包生成exe文件。(预编译是编译过程,即将一些常用的不经常改变的文件先进行编译处理生成中间文件,以节省时间,它不属于预处理,在VS项目属性的C/C++下的预编译头里可以添加想要预编译的文件)

今天讲一讲预处理。

基础知识

预处理是程序在编译之前调用预处理器对预处理指令进行处理识别的过程。它不属于c/c++范畴,只是c/c++能够接纳预处理指令而已,相当于合作商,便于开发人员开发。

哪些是预处理命令呢?以#开头的语句都是预处理命令,比较常见的有导入头文件预处理命令:#include,有#define,有#pragma,有#ifdef,有#endif等等。

在VS项目属性下C/C++下的预处理器定义可以定义预处理宏,相当于#define xxx,重要的是它的作用范围是当前项目的每个文件,因此是一次定义,全局受用。

VS系统默认定义了几个比较重要的宏,可以方便开发人员进行调试:

__FILE__:代指当前文件名(包含绝对路径)

__DATE__:当前文件编译的日期

__TIME__:当前文件编译的时间

__LINE__:

这几个宏相当于常量,可以像常量一样使用。

TRACE:向输出窗口打印文字

预处理器指令主要分为以下几种:

一、文件包含:#import、#pragma comment(lib,"xxx.lib")

二、宏定义:#define PI 3.1415

三、条件判断处理:#if、#else、#elif、#ifdef、#undef(取消宏定义)、#endif、ifndef

四、其它:

1.#pragma once 该文件只编译一次

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

例如:#ifdef _DEBUG

#error _DEBUG DEFINED

#endif

会弹出错误信息,且程序无法继续编译。

宏定义的作用范围

宏定义能作用在当前文件,以及包含了当前文件的文件中。

如:在xxx.h中定义了宏#define HONG,则yyy.cpp内部包含了它#import xxx.h,则在yyy.cpp中该宏也是有作用的。

关于MFC预处理命令的更多相关文章

  1. 预处理命令[#define]说明

    宏定义 宏定义是对一些常见的变量.字符串等进行定义,被定义的数据在编译会进行自动替换.有时一些变量或字符串被多次使用,当需要修改时,就需要对源文件中它们出现的地方一一修改,效率比较低,而通过宏定义,只 ...

  2. 【C语言入门教程】2.8 C 语言的预处理命令

    预处理命令是在程序编译阶段进行执行的命令,用于编译与特定环境相关的可执行文件.预处理命令扩展了 C 语言,本节将选择其中一些常用的预处理命令进行讲解. 2.8.1 宏替换命令 宏替换命令的作用类似于对 ...

  3. 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出

    [源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...

  4. 编译预处理命令--define和ifdef的使用

    这里将对常用的预处理命令进行学习. 一.宏定义  ·defined 格式:`defined     宏名      数值 或者 `define      宏名 注意:后面没有‘;‘,和单片机不一样: ...

  5. C++基础之预处理命令

    目录 概述——对预处理命令的理解 预处理命令的处理时间 C++中主要的预处理命令 宏定义 “文件包含”处理 选择编译 概述 使用C++的预处理命令可以提高程序的可维护性,有利于程序员以更加方便和快捷的 ...

  6. C/C++编译预处理命令详解【转】

    1.       预处理程序  按照ANSI标准的定义,预处理程序应该处理以下指令: #if #ifdef #ifndef #else #elif #endif #define #undef #lin ...

  7. 预处理命令#define #undef #if #endif 的基本用法

    C#的预处理命令其实还是蛮有用的,但是真正使用过得人不多,这个介绍一下平时用的比较多的预处理命令中的几个:#define,#undef ,#if,#endif.除此之外还有一些预处理命令#warnin ...

  8. c# 预处理命令

    在编译之前进行的处理. 预处理命令以符号“#”开头. #define 只能 定义符号 不能定义宏(#define PI 3.14 这是错的,在c#中没宏) #region #endregion #if ...

  9. C语言之预处理命令

    /**************************************************************************** Title:C之预处理命令 Time:201 ...

随机推荐

  1. python学习 02 元组

    元组和列表除了能不能修改外 定义单一元组还需要加逗号

  2. Cocos2d-x 3.2 之 别踩白块(第三篇)

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  3. PHP-Manual的学习----【语言参考】----【类型】-----【NULL】

    2017年8月24日11:34:061.特殊的 NULL 值表示一个变量没有值.NULL 类型唯一可能的值就是 NULL. 2.在下列情况下一个变量被认为是 NULL: ◦ 被赋值为 NULL. ◦ ...

  4. Lumen开发:如何向 IoC 容器中添加自己定义的类

    版权声明:本文为博主原创文章,未经博主允许不得转载. 先在起始文件bootstrap/app.php加上$app->register(App\Providers\User\UserService ...

  5. 批量删除redis某个键值

    /usr/local/redis/src/redis-cli -h 172.28.6.23  -p 6383 keys "virtual*" |xargs /usr/local/r ...

  6. poj2485

    Highways Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27912   Accepted: 12734 Descri ...

  7. 问题:今天测试模块一直出现一个问题?module 'subprocess' has no attribute 'Popen'

    原因:我起的名字用了模块本身的名字,这个地方一定要切记

  8. springboot带分页的条件查询

    QueryDSL简介 QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询. Querydsl可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者 ...

  9. 被学长教会的高斯消元法Gauss

    昨天学长教了我高斯消元法. 这里用一个栗子来模拟一下Gauss的流程. 真的通俗易懂!这里是洛谷题目链接. 这就是例子 x-2y+3z= 4x-5y+6z= 7x-8y+10z= 先将它转化为矩阵 - ...

  10. Android环境搭建 NDK+ADT(免cywgin)

    JDK下载: 1下载地址  http://www.oracle.com/technetwork/java/javase/downloads/index.html 2配置环境变量 JAVA_HOME:创 ...