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做一个http接口测试框架

    出处: https://my.oschina.net/bysu/blog/751634 https://my.oschina.net/u/3041656/blog/820023

  2. 程序员之---C语言细节19(来找茬,由/* */ 引起的凝视错误)

    主要内容:由/* */ 引起的凝视错误 有4处凝视错误 #include <stdio.h> #define N 10 //使用以下宏定义的凝视 #define BSC // #defin ...

  3. unity shader学习笔记(1) shader基础结构以及Properties面板

    首先是shader的基础结构: Shader "Custom/Example { Properties//变量属性面板 { } SubShader { Tags { "Render ...

  4. ANDROID版本号号和版本号名称的重要性介绍

    转载请注明出处http://blog.csdn.net/y150481863/article/details/41249159,来自[http://blog.csdn.net/y150481863] ...

  5. 如何基于EasyDSS体系的全套SDK完成各种场景下的视频应用需求

    需求背景 回顾EasyDSS的发展过程,基本上保持的是先局部后系统.先组件后平台的发展方式,一步一步夯实每一个细节功能点,从最基础.最兼容的音视频数据的拉流获取,到高效的.全兼容的数据推流,再到流媒体 ...

  6. Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)

    今天要说的是为Android设备添加重启.飞行模式.静音模式按钮,客户需求中需要添加这项功能,在长按电源键弹出的菜单中没有这些选项,谨以此文记录自己添加这个功能的过程. 首先找到长按电源键弹出的对话框 ...

  7. linux c编程:线程退出

    在线程创建的时候pthread_exit都是调用的固定参数,我们先来看下如果用自动变量作为pthread_exit的参数时出现的问题 typedef struct foo{ int a; int b; ...

  8. 蜗牛—ORACLE基础之触发器学习(三)

    版权声明:本文为大腰子原创文章,如若转载,请标明原地址. https://blog.csdn.net/u010071361/article/details/30037215 建立一个触发器, 当职工表 ...

  9. SAP初始账号

     方法1:有其中某Client的登录帐号1. 用已有帐号登录某个Client2. 运行Tcode SE303. 单击“tips and tricks“按钮4. 在Performance Tips an ...

  10. 获取android模拟器的IP地址

    http://blog.csdn.net/yjkwf/article/details/7244632 1.输入adb devices查看加载的设备 2.使用 adb -s [设备] [命令]执行命令 ...