C预处理器#define声明的变量是什么类型的?

时间:2015-09-28 14:54:33

标签: c constants c-preprocessor

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

5 个答案:

答案 0 :(得分:4)

都不是。这是一个词典替代品,也就是说,无论出现在哪里,都会用 3.141593 取代 pi

答案 1 :(得分:2)

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

根据Wikipedia

  

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

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

答案 2 :(得分:1)

#define宏的所有预处理器都是文本替换,它不知道pi是什么类型。

此处pi的类型由3.141593确定,double$smt = $dbh->prepare("SELECT EXISTS(SELECT 1 FROM table WHERE col = ? LIMIT 1)"); $smt->execute(array($var)); 类型的文字。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

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