条件编译初步

一直以来不知道条件编译有什么卵用,也不会用条件编译,最近看《算法竞赛入门经典》时,又接触到了这个概念,便稍微学了一点,于是积累下来,记作一篇经验。
首先是条件编译的概念:
顾名思义,在某些条件下进行编译,某些条件下不进行编译。
接着,给出条件编译的三种用法:
1.#if和#endif
一般形式为:
#if 常量表达式
程序段
#endif

用法:当常量表达式的值为真时,编译程序段,否则不编译。
程序段不需要加{},因为#if #endif已经起到了{}的作用,且#if与#endif必须配对使用

2.带#elif的条件编译
一般形式为:
#if 常量表达式1
程序段1
#elif 常量表达式2
程序段2
#elif 常量表达式3
程序段3
#endif
用法:elif即else if ,类比if、else if、else即可。

3.#ifdef的使用
一般形式为:
#ifdef 宏名
程序段1
#else
程序段2
#endif
如果宏名被定义,则编译程序段1,否则编译程序段2

以上为条件编译的三种用法,除此以外还有#ifndef和#ifdef相似,只不过是宏名没有被定义时编译程序段1

下面演示第一种用法(其中有输入输出重定向的内容,不明白的参照我的相关博客):

#include <cstdio>
#define H 1
int main()
{
	int a;   
#if H											//若H真,编译两行freopen
		freopen("in.txt", "r", stdin);
		freopen("out.txt", "w", stdout);
#endif
	scanf("%d", &a);
	printf("%d", 5 * a);
#if H										//若H真,编译两行fclose
	fclose(stdin);
	fclose(stdout);
#endif	
	return 0;
}`

如代码所示,H为1,因此输入输出将对文件进行,执行代码,可以看到成功在文件中输出了相应结果,说明相关代码编译了。
输出成功说明重定向代码已编译

在算法竞赛中,如果题目不允许通过文件I/O,那么我们把H的宏定义改为0即可,与输入输出重定向有关的代码便不会执行了。

以上是我初步学习条件编译的内容,作为个人学习总结,欢迎指教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农民真快落

我琢磨着也没人给我打赏呀。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值