关于MFC预处理命令
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预处理命令的更多相关文章
- 预处理命令[#define]说明
宏定义 宏定义是对一些常见的变量.字符串等进行定义,被定义的数据在编译会进行自动替换.有时一些变量或字符串被多次使用,当需要修改时,就需要对源文件中它们出现的地方一一修改,效率比较低,而通过宏定义,只 ...
- 【C语言入门教程】2.8 C 语言的预处理命令
预处理命令是在程序编译阶段进行执行的命令,用于编译与特定环境相关的可执行文件.预处理命令扩展了 C 语言,本节将选择其中一些常用的预处理命令进行讲解. 2.8.1 宏替换命令 宏替换命令的作用类似于对 ...
- 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出
[源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...
- 编译预处理命令--define和ifdef的使用
这里将对常用的预处理命令进行学习. 一.宏定义 ·defined 格式:`defined 宏名 数值 或者 `define 宏名 注意:后面没有‘;‘,和单片机不一样: ...
- C++基础之预处理命令
目录 概述——对预处理命令的理解 预处理命令的处理时间 C++中主要的预处理命令 宏定义 “文件包含”处理 选择编译 概述 使用C++的预处理命令可以提高程序的可维护性,有利于程序员以更加方便和快捷的 ...
- C/C++编译预处理命令详解【转】
1. 预处理程序 按照ANSI标准的定义,预处理程序应该处理以下指令: #if #ifdef #ifndef #else #elif #endif #define #undef #lin ...
- 预处理命令#define #undef #if #endif 的基本用法
C#的预处理命令其实还是蛮有用的,但是真正使用过得人不多,这个介绍一下平时用的比较多的预处理命令中的几个:#define,#undef ,#if,#endif.除此之外还有一些预处理命令#warnin ...
- c# 预处理命令
在编译之前进行的处理. 预处理命令以符号“#”开头. #define 只能 定义符号 不能定义宏(#define PI 3.14 这是错的,在c#中没宏) #region #endregion #if ...
- C语言之预处理命令
/**************************************************************************** Title:C之预处理命令 Time:201 ...
随机推荐
- IOS启动页动画(uiview 淡入淡出效果 )2
Appdelegate里面右个这个函数,只要它没结束,你的等待界面就不会消失.以在启动的时候做些动画 - (BOOL)application:(UIApplication *)application ...
- 解决xcode5升级后,Undefined symbols for architecture arm64:问题
The issue is that the cocoapods have not been built for arm64 architecture yet thus they cannot be l ...
- Java获取字符串的CRC8校验码(由C程序的代码修改为了Java代码)
CRC8算法请百度,我也不懂,这里只是把自己运行成功的结构贴出来了.方法CRC8_Tab这里没有处理,因为我的程序中没有用到. package com.crc; public class CCRC8_ ...
- 解决Eclipse的Team菜单中没有SVN选项的问题
我们想使用SVN向SVN服务器上传代码,但Eclipse默认情况下却没有SVN选项,如下图所示. 默认只有GIT,如下图所示. 那么,我们怎么解决这个问题呢? 第一步:如下图所示. 第二步:在&quo ...
- hibernate Session的CRUD操作
使用Session里面的方法进行CRUD操作 (1) 增加 save 方法 (2) 查找 get 方法(根据id查) (3) 修改 update 方法 (4) 删除 delete 方法 1.增加 /* ...
- [转载]Hibernate如何提升数据库查询的性能
目录(?)[-] 数据库查询性能的提升也是涉及到开发中的各个阶段在开发中选用正确的查询方法无疑是最基础也最简单的 SQL语句的优化 使用正确的查询方法 使用正确的抓取策略 Hibernate的性能优化 ...
- [转载]Java集合容器简介
Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...
- Android中的资源访问
Android中的资源是指非代码部分,指外部文件. assets中保存的一般是原生的文件,例如MP3文件,Android程序不能直接访问,必须通过AssetManager类以二进制流的形式来读取. r ...
- Notification状态栏显示信息
Notification即通知,用于在通知栏显示提示信息. 在API Level > 11,Notification类中的一些方法被Android声明deprecated(弃用),而在API L ...
- template.helper 检测浏览器 时间转换
template.helper('changeTime',function getLocalTime(nS) { var b=nS.substr(6,13); var c=parseInt(b) va ...