头文件的“#if _MSC_VER > 1000”
_MSC_VER 是微软预编译控制。在_MSC_VER较小时,它对一些东西的支持与新版不同。
_MSC_VER分解如下: Microsoft的C编译器的版本
字符串函数应用详解MS:Microsoft
C : C编译器。
VER:Version
很多头文件中有
#if _MSC_VER > 1000
#pragma once
#endif
_MSC_VER 定义编译器的版本,VC++6.0就是1200
#if _MSC_VER > 1000 //意思就是如果编译器版本高于1000(VC++5.0)
预处理器指令
#和## 操作符是和#define宏一起使用的,使用# 可以使在#后的首个参数返回为一个带引号的字符串。
例如, 命令 #define to_string(s) # s 即:碰到to_string(s)都用#s替代,而#S就是返回带引号的S 将会使编译器把以下命令
cout << to_string(Hello World!) << endl;
理解为 cout << "Hello World!" << endl;
使用##连结##前后的内容. 例如, 命令
#define concatenate(x,y) x##y
int xy = 10;
将会使编译器把
cout << concatenate( x, y ) << endl;
解释为
cout << xy << endl;
理所当然,将会在标准输出处显示'10'.
#define
语法:
#define macro-name replacement-string
#define命令用于把指定的字符串替换文件中的宏名称 . 也就是说, #define使编译器把文件中每一个macro-name替换为
replacement-string. 替换的字符串结束于行末. 这里是一个经典的#define应用 (至少是在C中):
#define TRUE 1
#define FALSE 0
...
int done = 0;
while( done != TRUE ) {
...
}
#define命令的另外一个功能就是替换参数,使它 假冒创建函数一样使用. 如下的代码:
#define absolute_value( x ) ( ((x) < 0) ? -(x) : (x) )
...
int x = -1;
while( absolute_value( x ) ) {
...
}
当使用复杂的宏时,最好使用额外的圆括号. 注意在以上的例子中, 变量"x"总是出现在它自己的括号中. 这样, 它就可以在和0比较,或变成负值(乘以-1)前计算值. 同样的, 整个宏也被括号围绕, 以防止和其它代码混淆. 如果你不注意的话, 你可能会被编译器曲解你的代码.
#error
语法:
#error message
#error命令可以简单的使编译器在发生错误时停止. 当遇到一个
#error时,编译器会自动输出行号而无论message的内容. 本命令大多是用于调试.
#if, #ifdef, #ifndef, #else, #elif, #endif
这些命令让编译器进行简单的逻辑控制. 当一个文件被编译时, 你可以使用这些命令使某些行保留或者是去处.
#if expression
如果表达式(expression)的值是"真"(true),那么紧随该命令的代码将会被编译.
#ifdef macro
如果"macro"已经在一个#define声明中定义了, 那么紧随该命令的代码将会被编译.
#ifndef macro
如果"macro"未在一个#define声明中定义, 那么紧随命令的代码将会被编译.
一些小边注: 命令#elif是"elseif"的一种缩写,并且他可以想你所意愿的一样工作. 你也可以在一个#if后插入一个"defined"或者
"!defined"以获得更多的功能.
这里是一部分例子:
#ifdef DEBUG
cout << "This is the test version, i=" << i << endl; #else
cout << "This is the production version!" << endl;
#endif
你应该注意到第二个例子比在你的代码中插入多个"cout"进行调试的方法更简单.
#include
语法:
#include <filename>
#include "filename"
本命令包含一个文件并在当前位置插入. 两种语法的主要不同之处是在于,如果filename括在尖括号中,那么编译器不知道如何搜索它. 如果它括在引号中, 那么编译器可以简单的搜索到文件. 两种搜索的方
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论