zoukankan      html  css  js  c++  java
  • #if defined 和 #if ! defined 的用法

    背景:MFC初学,头文件中有

    #if !defined(AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_)
    #define AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_

    // Info : Other content

    #endif // !defined(AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_)

    注:AFX_HELLOMFC_H__706D36F5_2F1B_40AC_8BE9_0BD6A1D7BBDE__INCLUDED_ 是一个由VC自定义的标识符,你也可以替换成其他的,上面代码就可以类比为下边的代码,看起来是不是清爽很多啊。这是微软VS的个性化命名

    #if !defined(AFX_HELLOMFC_H_)
    #define AFX_HELLOMFC_H_

    // Info : Other content

    #endif // !defined(AFX_HELLOMFC_H_)


    正题:C语言的宏定义
    一、#if defined 的作用
    因为对于一个大程序而言,我们可能要定义很多常量( 不管是放在源文件还是头文件 ),那么我们有时考虑定义某个常量时,我们就必须返回检查原来此常量是否定义,但这样做很麻烦.
    if defined宏正是为这种情况提供了解决方案.举个例子,如下:

    #define a 100

    #define b 100

    #define v 100

    // ^^^^^^

    #define s 100

    #define da 100

    #define af 100

    #define a 200 // Here is the key

    上面已经定义过一次 a 的值了,因为中间有很多语句,看不到,又忘了有没有定义,下面又来了一条,把上面的替掉了。这就是问题了!
    此时,我们要检查a是否定义(假设我们已经记不着这点了),或者我们要给a一个不同的值,就加入如下句子:

    #if defined a // or #ifdef a

    #undef a

    #define a 200

    #endif

    或者

    #ifndef a

    #define a 200

    #endif

    上面就是 #if defined 的唯一作用了
     
    二、#if ! defined 的作用
    #if defined XXX_XXX 
    #endif
    是条件编译,是根据你是否定义了XXX_XXX这个宏,而使用不同的代码。一般.h文件里最外层的
    #if !defined XXX_XXX
    #define XXX_XXX
    #endif
    是为了防止这个.h头文件被重复include
    三、其他相关含义

    指令 用途
    # 空指令,无任何效果
    #include 包含一个源代码文件
    #define 定义宏
    #undef 取消已定义的宏
    #if 如果给定条件为真,则编译下面代码
    #ifdef 如果宏已经定义,则编译下面代码
    #ifndef 如果宏没有定义,则编译下面代码
    #elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
    #endif 结束一个#if……#else条件编译块
    #error 停止编译并显示错误信息

     
  • 相关阅读:
    react-echarts之折线图的显示
    Log4j2
    测试驱动开发Junit4
    JavaWeb基础: Cookie
    JavaWeb前端:Bootstrap基础
    JavaWeb前端:CSS
    JavaWeb前端:JQuery
    Android基础:Activity
    JavaWeb前端: JavaScript 简介
    JavaWeb前端:HTML5 简介
  • 原文地址:https://www.cnblogs.com/herbertchina/p/4306818.html
Copyright © 2011-2022 走看看