【问题标题】:C Preprocessor #define What type is the declared variable? [duplicate]C Preprocessor #define 声明的变量是什么类型? [复制]
【发布时间】:2015-09-28 14:54:33
【问题描述】:

当我用#define(例如#define pi 3.141593)定义一个数字常量时,它是intfloatdouble 还是什么?

【问题讨论】:

  • 常数值作为双精度,而不是变量。

标签: c constants c-preprocessor


【解决方案1】:

两者都没有。它是按字典顺序替换的,也就是说,无论出现在哪里,它都会将 pi 替换为 3.141593

【讨论】:

    【解决方案2】:

    当您定义它时,它们都不是。 预处理器将在您的代码中查找 pi 并将其替换为 3.141593,然后再尝试实际编译代码。

    根据Wikipedia

    只要标识符出现在源代码中,它就会被替换标记列表替换,该替换标记列表可以为空。

    类型将由您使用该宏的上下文定义。

    【讨论】:

    • 感谢所有来这里帮助我的人
    【解决方案3】:

    预处理器对这个#define 宏所做的只是文本替换,它不知道pi 是什么类型。

    这里pi的类型由3.141593决定,是double类型的字面量。

    【讨论】:

      【解决方案4】:

      经过预处理,宏 pi 将被替换为文字 3.141593,而浮点文字的类型为 double。如果您希望文字具有float 类型,则必须添加f 后缀——因此,文字3.141593f 将具有float 类型。

      【讨论】:

        【解决方案5】:

        #define 没有任何数据类型的概念。它简单地定义了预处理器的文本替换。

        然后编译器将看到被替换的文本,并根据 C 标准给出的rules 确定常量的类型。

        【讨论】:

          猜你喜欢
          • 2021-12-16
          • 1970-01-01
          • 2019-11-04
          • 2019-12-06
          • 2012-05-07
          • 1970-01-01
          • 2016-07-03
          • 1970-01-01
          • 2013-02-08
          相关资源
          最近更新 更多