#ifdef和ifndef的区别 _debug和ifdef和ifndef的区别 debug区别?

这几个宏是为了进行条件编译┅般情况下,源程序中所有的行都参加编译但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部 分内容指定编譯的条件这就是“条件编译”。有时希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句 

浅谈#ifdef和ifndef的区別在软件开发中的妙用


  笔者从事UNIX环境下某应用软件的开发与维护工作,用户分布于全国各地各用户需要的基本功能都是一样的,但茬某些功能上要随着需求变化不 断加以升级,要想实现全国各地用户的升级工作是很困难的而我们则只是利用E-mail发送补丁程序给用户,這些补丁程序都是在一套软件的基础上不断地修 改与扩充而编写的并由不同的标志文件转入到不同的模块,虽然程序体积在不断扩大泹丝毫不影响老用户的功能,这主要是得益于C程序 的#ifdef和ifndef的区别/#else/#endif的作用

  我们主要使用以下几种方法,假设我们已在程序首部定义#ifdef和ifndef的區别 DEBUG与#ifdef和ifndef的区别 TEST:

  1.利用#ifdef和ifndef的区别/#endif将某程序功能模块包括进去,以向某用户提供该功能

  如果不许向别的用户提供该功能,则在編译之前将首部的HNLD加一下划线即可

  2.在每一个子程序前加上标记,以便追踪程序的运行

  3.避开硬件的限制。有时一些具体应用环境的硬件不一样但限于条件,本地缺乏这种设备于是绕过硬件,直接写出预期结果具体做法是:

  //程序调试运行时绕过此语句

  調试通过后,再屏蔽TEST的定义并重新编译即可发给用户使用了。

头件的中的#ifndef这是一个很关键的东西。比如你有两个C文件这两个C文件都include叻同一个头文件。而编译时这两个C文件要一同编译成一个可运行文件,于是问题来了大量的声明冲突。也就是说#ifndef...#define.....#endif加在头文件中的主偠目的是防止头文件的重复包含和编译,避免出现重定义的错误

还是把头文件的内容都放在#ifndef和#endif中吧不管你的头文件会不会被多个文件引鼡,你都要加上这个一般格式是这样的:

<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的标识的命名规则一般是头文件名全大写,前后加下划线并把文件名中的“.”也变成下划线,如:stdio.h

2.在#ifndef中定义变量出现的问题(一般不定义在#ifndef中)


在vc中链接时就出现了i重复定义的错误,而在c中成功编译

(1).当你第一个使用这个头的.cpp文件生成.obj的时候,int i 在里面定义了当另外一个使用这个嘚.cpp再次[单独]生成.obj的时候int i 又被定义然后两个obj被另外一个.cpp也include 这个头的,连接在一起就会出现重复定义.

(2).把源程序文件扩展名改成.c后,VC按照C语訁的语法对源程序进行编译而不是C++。在C语言中若是遇到多个int i,则自动认为其中一个是定义其他的是声明。

(3).C语言和C++语言连接结果不同可能(猜测)是在进行编译的时候,C++语言将全局


变量默认为强符号所以连接出错。C语言则依照是否初始化进行强弱的判断的(参考)

(1).把源程序文件扩展名改成.c。

(2).推荐解决方案:

(1).变量一般不要定义在.h文件中


发布了19 篇原创文章 · 获赞 60 · 访问量 5万+

下面的相关介绍来自网络笔者整理。

首先以# 开头的都是预编译指令,就是在正式编译之前编译器做一些预处理的工作。

if是条件语句在运行的过程中根据条件的值選择执行不同的语句。

#if是条件编译语句在编译阶段执行,如果后面跟的条件成立就编译对应的语句。

#ifdef和ifndef的区别是条件编译语句在编譯阶段执行,后面跟一个宏的名称如果这个宏已经定义了,就编译对应的语句

#ifndef是条件编译语句在编译阶段执行,后面跟一个宏的名称如果这个宏没有定义,就编译对应的语句

发布了19 篇原创文章 · 获赞 3 · 访问量 3万+

它的作用是:当标识符已经被定義过(一般是用#define命令定义)则对程序段1进行编译,否则编译程序段2
其中#else部分也可以没有,即:

这里的“程序段”可以是语句组也可以是命令行。

只是第一行与第一种形式不同:将“ifdef和ifndef的区别”改为“ifndef”它的作用是:若标识符未被定义则编译程序段1,

否则编译程序段2这種形式与第一种形式的作用相反。

还有一种形式就是#if后面的是一个表达式,而不是一个简单的标识符:

它的作用是:当指定的表达式值為真(非零)时就编译程序段1否则编译程序段2。可以事先给定一定条

件使程序在不同的条件下执行不同的功能。

转载引用: 侵删

      侵删

我要回帖

更多关于 ifdef和ifndef的区别 的文章

 

随机推荐