C/C++条件编译

C/C++条件编译

预处理器根据条件编译指令,有条件地选择源代码中的一部分作为输出,送给编译器进行编译。条件编译指令包含#if#else#elif#ifdef#ifndef#endif 指令。
条件编译预处理块由 #if#ifdef#ifndef 指令开始,并可选地包含任意多个 #elif 指令,接下来是至多一个可选的 #else 指令,并以 #endif 指令结束。嵌套的条件编译预处理块会被单独处理。

条件求值

#if, #elif

表达式是常量表达式,仅使用常量和用 #define 指令定义的标识符。任何非常量,未以 #define 指令定义的标识符,求值为0。
表达式可以含有形式为 defined 标识符defined (标识符) 的一元运算符,若用 #define 指令定义了该 标识符 ,则返回 1 ,否则返回 0 。若 表达式 求值为非零值,则包含该控制代码块并跳过其他。若所用的任何标识符不是常量,则用 ​0​ 替换它。

#ifdef, #ifndef

检查是否用 #define 指令定义了标识符。

#ifdef 标识符 本质上等价于 #if defined 标识符 。

#ifndef 标识符 本质上等价于 #if !defined 标识符 。

示例代码

条件编译

#include <iostream>

#define ABCD 2

int main()
{ 
#ifdef ABCD
    std::cout << "1: yes\n";
#else
    std::cout << "1: no\n";
#endif
 
#ifndef ABCD
    std::cout << "2: no1\n";
#elif ABCD == 2
    std::cout << "2: yes\n";
#else
    std::cout << "2: no2\n";
#endif
 
#if !defined(DCBA) && (ABCD < 2*4-3)
    std::cout << "3: yes\n";
#endif

#if ABCD == 1
	std::cout << "4: no1\n";
#elif ABCD == 2
	std::cout << "4: yes\n";
#else
	std::cout << "4: no2\n";
#endif
}

输出

1: yes
2: yes
3: yes
4: yes

debug信息

#include <stdio.h>

#define DEBUG

int main()
{
	...
	#ifdef DEBUG
		printf("this is a debug log\n");
	#endif
	...
}

头文件保护

// header_file.h

#ifndef _HEADER_FILE_H_
#define _HEADER_FILE_H_

...		// 头文件内容

#endif  //  _HEADER_FILE_H_
  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值