C语言预处理命令之条件编译

简介:

在C语言中,预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。

条件编译指令将决定哪些代码被编译,哪些是不被编译的。可以根据表达式的值或者某个特定的宏是否被定义来确定编译条件。

下面是部分预处理指令:

指令用途
#  空指令,无任何效果
#include  包含一个源代码文件
#define  定义宏
#undef  取消已定义的宏
#if  如果给定条件为真,则编译下面代码
#ifdef  如果宏已经定义,则编译下面代码
#ifndef  如果宏没有定义,则编译下面代码
#elif  如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif  结束一个#if……#else条件编译块
#error  停止编译并显示错误信息

1.#if指令

#if 指令检测跟在后面的常量表达式,如果表达式为真,则编译后面的代码,直到出现#else、#elif或#endif为止;否则就不编译。

2.#endif指令

#endif用于终止#if预处理指令。

#include<stdio.h>
#define DEBUG 0
int main()
{
    #if DEBUG
    printf("Debugging\n");
    #endif
    printf("Running\n");
    return 0;
}

由于程序定义DEBUG宏代表0,所以#if条件为假,不编译后面的代码直到#endif,所以程序直接输出Running。

如果去掉#define语句,效果是一样的。

3.#ifdef和#ifndef

#include<stdio.h>
#define DEBUG
int main()
{
    #ifdef DEBUG
    printf("YES\n");
    #endif
    #ifndef DEBUG
    printf("NO\n");
    #ednif
    return 0;
}

#ifdefined等价于#ifdef;#if!defined等价于#ifndef

4.#else指令

#else指令用于某个#if指令之后,当前面的#if指令的条件不为真时,就编译#else后面的代码。#endif指令将终止上面的条件块。

#include<stdio.h>
#define DEBUG
int main()
{
    #ifdef DEBUG
    printf("Debugging\n");
    #else
    printf("Notdebugging\n");
    #endif
    printf("Running\n");
    return 0;
}

5.#elif指令

#elif预处理指令综合了#else和#if指令的作用。

#include<stdio.h>
#define TWO
int main()
{
    #ifdef ONE
    printf("1\n");
    #elif defined TWO
    printf("2\n");
    #else
    printf("3\n");
    #endif
    return 0;
}

程序很好理解,最后输出结果是2。

目录
相关文章
|
1月前
|
编译器 C语言
C语言的预处理指令
C语言的预处理指令
|
1月前
|
编译器 Linux PHP
C语言从入门到实战——预处理详解
C语言预处理是C语言编译过程的一个阶段,它在编译之前对源代码进行一系列的处理操作,包括宏替换、文件包含、条件编译等,最终生成经过预处理的代码,然后再进行编译。
46 0
|
4月前
|
存储 自然语言处理 编译器
『C语言进阶』程序环境和预处理
『C语言进阶』程序环境和预处理
|
5月前
|
Linux 编译器 C语言
C语言进阶-程序环境和预处理(2)
C语言进阶-程序环境和预处理
53 1
|
5月前
|
存储 自然语言处理 编译器
C语言进阶-程序环境和预处理(1)
C语言进阶-程序环境和预处理
43 0
|
1月前
|
存储 编译器 程序员
【程序环境和预处理】C语言
【程序环境和预处理】C语言
|
1月前
|
存储 机器学习/深度学习 自然语言处理
【进阶C语言】编译与链接、预处理符号详解
【进阶C语言】编译与链接、预处理符号详解
25 0
|
1月前
|
存储 自然语言处理 编译器
【C语言进阶】程序环境和预处理
【C语言进阶】程序环境和预处理
|
1月前
|
编译器 Linux C语言
程序环境和预处理(含C语言程序的编译+链接)--2
程序环境和预处理(含C语言程序的编译+链接)--2
30 5
|
1月前
|
存储 编译器 程序员
程序环境和预处理(含C语言程序的编译+链接)--1
程序环境和预处理(含C语言程序的编译+链接)--1
25 0