关于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 ...
随机推荐
- Windows server2008 搭建ASP接口訪问连接oracle数据库全过程记录
真的是太不easy了,曾经的时候在window server 2003上面搭建了一套asp+oracle的接口系统.就费了好大的劲儿,事实上那会迷迷瞪瞪的也不知道怎么的就弄好了,也懒得管了.OK,从昨 ...
- eclipse导入web工程变成Java工程,解决方案
经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目. 解决步骤: 1.进入项目目录,可看到.project文件,文本编辑器打开. 2.找到<nature ...
- 你须知道的30个CSS选择器 »
你也许已经掌握了id.class.后台选择器这些基本的css选择器.但这远远不是css的全部.下面向大家系统的解析css中30个最常用的选择器,包括我们最头痛的浏览器兼容性问题.掌握了它们,才能真正领 ...
- 【BZOJ1038】[ZJOI2008]瞭望塔 半平面交
[BZOJ1038][ZJOI2008]瞭望塔 Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如 ...
- 学习Sharding JDBC 从入门到出门-1
感觉大神已经写好了,自己膜拜下下, 送上大神地址:http://www.cnblogs.com/zhongxinWang/p/4262650.html 这篇博客主要是理论的说明了什么是分库分表,路由等 ...
- springboot工程的结构
1 springboot的工程结构是什么 就是我们组织springboot工程时遵循的代码的目录结构. 2 spring initializr创建的工程的目录结构 源码目录:src/main/java ...
- Android笔记之WebView加载网页的进度回调
wv.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, i ...
- Flask 进阶session和上下文管理解析
session的源码流程 将session放置在redis中 安装 pip install flask-session 使用 import redis from flask import Flask, ...
- Android 常用的权限
添加WiFi以及访问网络的权限: <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE&q ...
- ARDUINO W5100 WebServer测试
1.直接下载官方的enternet->WebServer代码 /* Web Server A simple web server that shows the value of the anal ...