当以Debug 模式编译程序时,宏 _DEBUG 会被定义,预处器会保留第 5 行代码,删除第 7 行代码。反之会删除第 5 行,保留第 7 行。 #ifndef的用法 #ifndef 用法的一般格式为: #ifndef 宏名 程序段1 #else 程序段2 #endif 与#ifdef 相比,仅仅是将 #ifdef 改为了 #ifndef。它的意思是,如果当前的宏未被定...
作用:如果在此之前没有定义这样的宏名,则编译语句段。#else可以用于#ifdef和#ifndef中,但#elif不可以。 //例 #define DEBUG //此时#ifdef DEBUG为真 //#define DEBUG //此时为假 int main() { #ifdef DEBUG printf("Debugging "); #else printf("Not debugging "); #endif printf("Running "); retur...
只是第一行与第一种形式不同:将“ifdef”改为“ifndef”。它的作用是:若标识符未被定义则编译程序段1,否则编译程序段2。这种形式与第一种形式的作用相反。 以上两种形式用法差不多,根据需要任选一种,视方便而定。 还有一种形式,就是#if后面的是一个表达式,而不是一个简单的标识符: #if 表达式 程序段1 #...
1、#if 和#ifdef 当asd_eee表达式存在而且,值为ture的时候接续向下执行 例如 代码语言:javascript 复制 #defineTARGET_LITTLE_ENDINA1#defineTARGET_BIG_ENDINA0#ifdefTARGET_LITTLE_ENDINAcall little endinafunction#elsecall big endinafunction#endif 上面的今天写的代码,发现我不管把TARGET_LITTLE_ENDINA和TARGET...
#ifdef 程序段1 #denif 在头文件中使用#ifdef和#ifndef是非常重要的,可以防止双重定义的错误。如你在头文件aaa.h中定义了一个类aaa如下: class aaa { }; 如果两次#include "aaa.h"(不见得是直接,也有可能两个不同的头文件中都包含了这个头文件)就会出错,因为相同的类不能定义两次。把aaa.h稍做修改: ...
第二种:#ifdef #else #endif搭配使用方法: #define DEBUG void main() { #ifdef DEBUG cout << "define debug..." << endl; #else cout << "not define debug..." << endl; #endif // DEBUG cout << "out code here..." << endl; ...
#ifdef _XXXX ...程序段1... #else ...程序段2... #endif 1. 2. 3. 4. 5. 这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。 注意:这种方式#ifdef后面只能跟一个宏变量。 方式二: #ifndef _XXXX ...
#ifdef _DEBUG #define DEBUGMSG(msg,date) printf(msg); printf(“%d%d%d”,date,_LINE_,_FILE_) #else #define DEBUGMSG(msg,date) #endif 19,宏定义防止使用是错误 1.用小括号包含。 例如:#define ADD(a,b) (a+b) 2.用do{}while(0)语句包含多语句防止错误 ...
#ifdef TEST code #endif #if !defined( TEST ) code #endif #ifndef TEST code #endif 2.6 #error #error指令将使编译器显示一条错误信息,然后停止编译,用法如下。在代码分支较多时,无法判断编译哪一个代码分支,可以用#error指令进行标记。当然在实际工作中,很多时候是写一段乱代码在分支中,看是否有编译报错...
具体来说,#ifdef 和 #ifndef 的语法格式如下: #ifdefmacro_name// code here#endif #ifndefmacro_name// code here#endif 其中,macro_name 是一个宏定义的名称,#ifdef 指令表示如果该宏已经被定义过,则编译 #ifdef 和 #endif 之间的代码段,否则忽略这段代码;而 #ifndef 指令则表示如果该宏没有被定义过,则...