当我使用#define
(例如#define pi 3.141593
)定义数字常量时,它是int
,float
,double
还是什么?
答案 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确定常量的类型。