zoukankan      html  css  js  c++  java
  • #ifndef的用法

    #ifndef _List_H
    #define _List_H
    
    struct Node;
    typedef struct Node *PtrToNode;
    typedef PtrToNode List;
    typedef PtrToNode Position;
    
    List MakeEmpty( List L );
    int IsEmpty( List L );
    int IsLast( Position P, List L );
    Position Find( ElementType X, List L );
    void Delete( ElementType X, List L );
    Position FindPrevious( ElementType X, List L );
    void Insert( ElementType X, List L, Position P );
    void DeleteList( List L );
    Position Header( List L );
    Position First( List L );
    Position Advance( Position P );
    ElementType Retrieve( Position P );
    
    #endif    /* _List_H */
    

    这里的#ifndef#define#endif连在一起是一个约定好的用法,其说明参见《C Primer Plus》:

    #ifndef指令通常用于防止多次包含一个文件。也就是说,应该像下面这样设置头文件:

    /* things.h */
    #ifndef THINGS_H_
       #define THINGS_H_
       /* 省略了头文件中的其他内容*/
    #endif
    

    假设该文件被包含了多次。当预处理器首次发现该文件被包含时,THINGS_H_是未定义的,所以定义了THINGS_H_,并接着处理该文件的其他部分。当预处理器第2次发现该文件被包含时,THINGS_H_是已定义的,所以预处理器跳过了该文件的其他部分。

    为何要多次包含一个文件?最常见的原因是,许多被包含的文件中都包含着其他文件,所以显式包含的文件中可能包含着已经包含的其他文件。这有什么问题?在被包含的文件中有某些项(如,一些结构类型的声明)只能在一个文件中出现一次。C标准头文件使用#ifndef技巧避免重复包含。但是,这存在一个问题:如何确保待测试的标识符没有在别处定义。通常,实现的供应商使用这些方法解决这个问题:用文件名作为标识符、使用大写字母、用下划线字符代替文件名中的点字符、用下划线字符做前缀或后缀(可能使用两条下划线)。

  • 相关阅读:
    网页设计 【0834】
    Apache Commons Lang
    Arduino U8G2 OLED_SSD1306_Chart
    Arduino Adafruit_SSD1306的使用
    proteus pro 8.9 安装及汉化教程
    AD IC类元件模型的创建
    C/C++ 深入理解char * ,char ** ,char a[ ] ,char *a[] 的区别
    Arduino MLX90614
    Arduino uno mega2560
    C语言 堆和栈
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/13659331.html
Copyright © 2011-2022 走看看