【问题标题】:Include Guards syntax in C在 C 中包含 Guards 语法
【发布时间】:2012-01-18 18:05:40
【问题描述】:

大家好,我想问一个关于在 C 编程中包含 guards 的问题。我知道他们的目的,但在一些程序中我看到了一个 1" 在#define 之后这样写:

#ifndef MYFILE_H
#define MYFILE_H 1

这个1的目的是什么?有必要吗?

【问题讨论】:

    标签: c include


    【解决方案1】:

    没必要,#define MYFILE_H 应该可以解决问题。 MYFILE_H定义ifndef 测试的条件)这一事实与其值分开。可以是 0、''、42 等。

    【讨论】:

    • 先生,您的意思是只有#define MYFILE_H 就足够了,而不是为什么这个“1”
    • @mainajaved 这是代码的原始作者可以回答的最好的问题。我个人的猜测 - 他/她认为这是必要的。
    【解决方案2】:

    如果MYFILE_H 宏未在您的代码中的其他地方使用,则没有必要。

    如果在其他地方使用 #ifdef#ifndef 指令,如下所示:

    #ifdef MYFILE_H 
    

    那么在宏定义中就不需要1-

    但如果它在其他地方使用 #if 指令,如下所示:

    #if MYFILE_H
    

    那么在宏定义中需要1(或任何值!= 0)。

    请注意,这些指令可以在源文件中用于验证是否包含标头。

    【讨论】:

    • 先生,这是否也意味着我们可以同时在 include guard 和 #if 指令中使用同名宏?并通过仅使用“1”或包含保护中的任何数字来区分?
    • @mainajaved 源代码中的预处理器指令可用于检查是否包含标头,只需检查是否定义了标头保护宏。如果标头保护宏是使用1 定义的,则可以使用#ifdef#if 指令进行检查,否则只能使用#ifdef 指令进行检查。
    • b-但它为什么需要它?
    【解决方案3】:

    据我所知,这是一种风格。在我看来,“1”是不必要的;它并没有真正做任何事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 2016-01-14
      • 2019-09-27
      相关资源
      最近更新 更多