#ifdef和#ifndef的功能

两个功能
1.不同点.c文件包含同一个.h文件,想用这个.h文件的头文件可以用#ifdef
例如
globe.h

#ifdef EXTERN
    extern char globle_str[];
#else
    int i=11;
#endif

main.c

#define EXTERN    //定义宏EXTERN后
#include "globe.h" 
#include <stdio.h>
void output()
{
    puts(globe_str);//上边定义了宏EXTERN,所以这里可以用globe.h中的char globle_str[]变量
}

main_1.c

#include "globe.h" 
void output();
int main()
{
    printf("%d",i);//上边没有定义宏EXTERN,所以这里用globe.h中的char globle_str[]变量
    output();
    return 0;
}

2.条件编译时用,例如想在debug下编译输出,在release
********************************************­
#ifdef 标识符
程序段1
#else
程序段2
#endif

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

#include <stdio.h>
#include <unistd.h>
int main()
{
	while(1)
	{
		#ifdef debug
			printf("hello\n");
		#endif
	
		sleep(1);		
	} 
	
	return 0; 
}

写的makefile:

#! /bin/sh
ver = debug
ifeq ($(ver),debug)
ALL:DebugPrint
endif
ifeq ($(ver),release)
ALL:ReleasePrint
endif

DebugPrint:welcome.do
	gcc welcome.do -o debug
	rm -f welcome.do
ReleasePrint:welcome.ro
	gcc welcome.ro -o release
	rm -f welcome.ro
welcome.do:welcome.c
	gcc -c -g -Ddebug welcome.c -o welcome.do
welcome.ro:welcome.c
	gcc -c -O3 welcome.c -o welcome.ro

这样就会在debug时编译输出hello,release时不编译printf那行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值