举例说明C语言中的ifndef 指令

621 阅读5分钟

C编程语言包含某些预处理器指令。预处理器指令甚至在执行 "main() "函数之前就被执行。"#ifndef "也是一个非常重要的C语言预处理指令,本文将指导你了解Ubuntu 20.04中C语言中这个预处理指令的用法。

什么是Ubuntu 20.04中C语言的#ifndef指令?

#ifndef "指令是C语言中的一个条件性预处理指令,也就是说,它是用来根据所提供的条件提供两种不同的执行路径。它代表了 "如果没有定义"。这条指令总是对一个已定义或未定义的变量进行操作。如果指定的变量还没有被定义,那么这条指令及其相关的代码部分将被执行;否则,将采取另一种执行路径。此外,这条指令总是以 "endif "语句结尾。下面是一个解释该预处理器指令基本语法的sudo代码。

#ifndef Macro
//code
#else
//code
#endif

Ubuntu 20.04中C语言中#ifndef指令的使用实例。

为了理解Ubuntu 20.04中C语言编程中 "#ifndef "指令的用法,你必须看看下面的两个例子,它们可以很好地阐述这个C指令的概念。

例子1:

在这个例子中,我们只是想根据另一个变量的定义为一个测试变量赋值,也就是说,如果后一个变量已经被定义,那么前一个变量将被赋值,否则将被赋值。通过观察下面的C语言程序,你将能够清楚地掌握这个例子。

在这段C代码中,我们首先包含了 "stdio.h "库,在我们的代码中运行必要的内置函数需要这个库。然后,我们通过使用 "define "关键字定义了一个名为 "Sample "的变量。之后,我们有了 "main() "函数,它将包含实际代码。在这个函数的主体中,我们声明了一个变量 "x",但没有给它分配任何值。然后,我们有一个 "ifndef "条件语句,它将对 "Sample "变量进行操作,也就是说,我们代码的这一部分将只在 "Sample "变量未被定义的情况下执行。在这种情况下,"x "变量将被赋值为 "4"。否则,将执行另一条执行路径,即 "else "语句,也就是说,如果 "Sample "变量已经被定义,那么将采取这一路径。在这种情况下,我们将要求用户为 "x "变量输入任何想要的值。

在把这个值作为输入后,我们只需用 "endif "语句关闭 "ifndef "语句。最后,我们想在终端上打印 "x "变量的值。

在保存了我们的C语言代码后,我们用以下命令编译了它。

$ gcc Example.c –o Example

这里,"gcc "是我们使用的编译器的名称,"Example.c "是我们的C程序文件的名称,而 "Example "指的是编译该代码后将创建的对象文件的名称。

在成功编译我们的C代码后,我们可以用下面的命令来执行它。

$ ./Example

现在,在我们的案例中,由于我们已经在代码中定义了 "Sample "变量,因此,"else "语句被执行,因为它提示用户为 "x "变量输入任何想要的值。我们输入了 "5 "作为输入,如下图所示。

当我们输入这个值后,一按回车键,变量 "x "的值就显示在终端上,如下图所示。

现在,我们将对上面使用的同样的C语言代码稍作调整,使其被迫执行 "ifndef "语句。为此,我们简单地删除了 "Sample "变量的定义,也就是说,我们从代码中删除了 "#define Sample "语句,如下图所示。

做了这个改动后,我们以与上面相同的方式编译并执行了我们的C代码,这次,变量 "x "的值变成了 "4",即在我们的代码中分配给它的值。在这种情况下,由于遵循了 "ifndef "路径,所以没有从用户那里获得任何输入。这个改变后的输出显示在下面的图片中。

例子2:

这个例子的基本要点和我们的第一个例子差不多;但是,它只是提出了一个不同的场景,让我们更清楚地了解 "ifndef "C指令的用法。在这个例子中,如果票据已经存在,我们只想打印票据号码;否则,我们只想通知用户没有票据存在。为此,我们编写了以下C语言程序。

同样,在这个程序中,我们首先包含了 "stdio.h "库。之后,我们使用 "define "关键字定义了一个名为 "TicketNum "的变量,其值为 "26"。然后,在我们的 "main() "函数的主体中,我们有一个 "ifndef "语句,应该对 "TicketNum "变量进行操作。当这个执行路径被采取时,那就意味着没有票据存在。另一方面,我们有一个 "else "语句,只有当 "TicketNum "变量已经被定义时才会被执行。在这种情况下,分配给 "TicketNum "变量的值将被简单地打印在终端。最后,我们用 "endif "语句关闭了 "ifndef "语句。

保存这个C语言程序后,我们按照第一个例子中与大家分享的方式编译并执行了它。这段代码的输出结果是 "26",因为代码的 "else "部分已经被执行,因为 "TicketNum "变量已经被定义。

现在,我们将对上面使用的同样的C语言代码稍作调整,使其不得不执行 "ifndef "语句。为此,我们简单地删除了 "TicketNum "变量的定义,也就是说,我们从代码中删除了 "#define TicketNum 26 "语句,如下图所示。

做了这个改动后,我们按照上面的方式编译并执行了我们的C语言代码,这一次,我们代码的输出结果是 "没有票据存在",因为遵循了 "ifndef "路径。这个改变后的输出显示在下面的图片中。

总结

在本指南中,我们谈到了C语言的 "ifndef "预处理器指令。首先,我们解释了这个指令的目的,然后是它的基本语法。然后,我们通过分享两个在Ubuntu 20.04系统上实现的C程序的不同例子,向你解释了这个预处理器指令的用法。希望在看完这些例子后,你能轻松掌握在Ubuntu 20.04系统中使用C语言预处理指令的概念。