#ifndef和#define的含义

来源:互联网 发布:如何查看软件位数 编辑:程序博客网 时间:2024/05/16 17:59


C++#ifndef与#ifdef的区别是什么?

#ifndef     表示如果没有定义宏  则条件成立,#ifdef       表示如果定义了宏 则条件成立,

小例子【参考http://zhidao.baidu.com/link?url=fT_ZkC3xb4gFvteM_-m2q5S6WskK08kliH4tLvCp71F34puSXsmOBqT9TS7nTVRpsIkNGeem_0fhLWwQiGuwjK

#ifndef     表示如果没有定义宏  则条件成立,如:

#ifndef EXTERN    char globle_str[100];#else    extern char globle_str[];#endif如果没有定义宏 EXTERN 则定义一个变量char globle_str[100];  否则,引用声明该变量extern char globle_str[]; 把这个信息写入一个头文件,如:globe.h,可在多个源代码中引用这个头文件。源文件中,如果加了#define EXTERN,则在编译时,就会调用extern char globle_str[];进行编译,如果没有加,就会调用char globle_str[100];

#ifdef       表示如果定义了宏 则条件成立,如,上面的例子,可改写成:

#ifdef EXTERN    extern char globle_str[];#else    char globle_str[100];#endif如果定义了宏 EXTERN 则引用声明变量extern char globle_str[]; 否则,定义一个变量char globle_str[100];

1:

#ifndef __XJ_PAYMENT_TAGS_H__
#define __XJ_PAYMENT_TAGS_H__

#import "XJTags.h"

#define XJ_PAYMENT_TAG_WAY                @"way"
#define XJ_PAYMENT_TAG_XJ_ROLE          @"xjRole"


#endif


//----------

#ifndef和#define放在C++程序的开头具体是什么意思?

_XXX_H_是任意的,上述代码可以解释为:如果没有定义XXX那么就定义XXX然后运行里面的内容,如果下次还走到这个文件,进行#ifndef判断,下面的内容就不会运行。【
一、为什么要用#ifdef .... #endif      在C语言中,我们通常会在头文件里面声明外面使用的宏定义、函数声明以及全局变量定义之类的,当我们需要使用这个东西的时候,只需要通过include "xxxx.h"包含相应的头文件即可。      但是如果连个xx.c文件同时包含了同一个头文件,会出现什么情况呢?      如果没有不使用#ifdef #endif ,则会出现宏、变量、重复定义,导致编译通不过。     所以我们需要通过 #ifdef #endif 来避免这个问题。二、如何使用       比如头文件名为 keyboard.h 。那么通用的使用方法如下:       #ifndef _KEYBOARD_H      #define _KEYBOARD_H     ............     #endif     通过这种方法,当第一次使用这个头文件的c文件,编译时,查看是否定义 _KEYBOARD_H    第一次肯定没有,所以它就定义了头文件里面的相关宏以及变量。    第二个使用这个头文件的C文件,编译时,一看 _KEYBOARD_H已经存在,说明我需要使用的东西使用存在,不需要定义了,直接使用就可以了 ,这样 问题就解决了。

2:

// 日志输出
#ifdef DEBUG
#define DLog(...) NSLog(__VA_ARGS__)
#else
#define DLog(...)
#endif

如果debug环境下:用DLog替换NSLog,如果是release环境下,不打印


#ifdef DEBUG
 
#define NSLog(...) NSLog(__VA_ARGS__)
#define debugMethod() NSLog(@"%s", __func__)
#else
#define NSLog(…)
#define debugMethod()
#endif
Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

更多参考【http://blog.csdn.net/duxinfeng2010/article/details/9067947】


0 0
原创粉丝点击