ifndef 的使用方法

ifndef 的使用方法ifndef 是 ifnotdefine 的缩写 一种宏定义 它是预处理功能中三种 宏定义 文件包含和条件编译 中的第三种条件编译 其使用方式是 defineX endif c 语言在对程序进行编译时 会先根据预处理命令进行预处理 C 语言编译系统包括预处理 编译和链接等部分 ifndefX nbsp 先测试是否被宏定义过 defineX nbsp 程序段 1 如果 X 没有被宏定义过 定义 X

ifndef是 if not define 的缩写,一种宏定义。它是预处理功能中三种(宏定义,文件包含和条件编译)中的第三种–条件编译。

其使用方式是:

#define X

#endif

//c语言在对程序进行编译时,会先根据预处理命令进行预处理,C语言编译系统包括预处理,编译和链接等部分。

#ifndef X  //先测试是否被宏定义过

#define X 

程序段1//如果X没有被宏定义过,定义X,并编译程序段1;

#else

程序段2 //如果X已经定义过了则编译程序段2 的语句,忽视程序段1.

#endif

条件指示符#ifndef的最主要目的是防止头文件的重复包含和编译。

语句1 #ifndef 标识1

语句2 #define 标识1

语句3 #endif

语句4 ……

语句5 ……

该段代码意思是:如果标识1没有被定义,则重定义标识1,即执行语句2、语句3;如果标识1已经被定义,则直接跳过语句2、语句3,直接执行语句4、语句5、……

ifndef和endif要一起使用,不能存在丢失。

假如你有一个C源文件,它包含了多个头文件,比如头文件A和头文件B,头文件B又包含了头文件A,则最终该源文件包含了两次头文件A。如果你在头文件A里定义了结构体或者类类型(这是最常见的情况),那么问题来了,编译时会报大量的重复定义错误。[1]

例如要编写头文件a.h

在头文件开头写上两行:

#ifndef _A_H

#define _A_H//一般是文件名的大写

头文件结尾写上一行:

#endif

这样一个工程文件里同时包含两个test.h时,就不会出现重定义的错误了。

当第一次包含test.h时,由于没有定义_TEST_H,条件为真,这样就会包含(执行)#ifndef _TEST_H和

#endif之间的代码,当第二次包含test.h时前面一次已经定义了_TEST_H,条件为假,#ifndef _TEST_H和

#endif之间的代码也就不会再次被包含,这样就避免了重定义了.

这样我们把头文件的内容都放在#ifndef和#endif中。不管你的头文件会不会被多个文件引用,你最好是都加上这个。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230401.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月25日 下午2:01
下一篇 2026年2月25日 下午2:22


相关推荐

  • 多元正态分布

    多元正态分布多元正态分布先定义一个 d 元随机向量 这里用列向量来表示 每一个元素都是一个一元随机变量 如 nbsp 其转置为 nbsp 其中表示这个多元随机变量的第 i 个分量 它是一个一维的随机变量 高斯分布主要是用均值和方差来作为参数的分布 我们来看看随机向量的均值和方差关于方差 在多元分布里面 就是协方差矩阵其中

    2026年3月26日
    1
  • oracle绑定变量使用方法总结_绑定变量不存在

    oracle绑定变量使用方法总结_绑定变量不存在Stringsql=“select*fromuserswhereusername=?andpwd=?”;pstat=con.prepareStatement(sql);pstat.setString(1,username);pstat.setString(2,pwd);rs=pstat.executeQuery(sql);//后面发现这句写错了System.ou…

    2025年8月29日
    6
  • linux-netstat

    linux-netstat

    2022年4月2日
    67
  • pycharm中安装git遇到的问题

    pycharm中安装git遇到的问题按照视频中所示步骤 安装好 git 之后 发现没有视频中所示的 git 选项 于是重新检查了一下 也选择了 git 于是继续查找 git 没有成功的原因 查看 file settings git 发现是 git 目录有误重新选择正确的目录即可

    2026年3月26日
    3
  • Java中compareTo用法

    Java中compareTo用法Java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值Stringa="a";Stringb="b";System.out.println(a.compareTo(b));输出值-112345Stringa="b";Stringb="a";System.out.println(a.compareTo(b));输出值1…

    2022年7月13日
    28
  • mysql是mpp数据库_mysql迁移mpp数据库Greenplum[通俗易懂]

    mysql是mpp数据库_mysql迁移mpp数据库Greenplum[通俗易懂]1.场景描述因兄弟项目中mysql有点扛不住了,要做sql优化,但是业务有点小复杂,优化起来有点麻烦(sql嵌套有点多),便想着用Mpp数据库Greenplum测试下,看性能和复杂度怎么样,趟趟水。2.解决方案初步的想法是:因为mysql和postgresql(Greenplum建立在postgresql之上,i’m软件老王)都是使用的标准sql,直接把mysql的建表语句在Greenplum…

    2025年6月14日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号