在C中打印定义的整数

时间:2014-10-14 09:56:45

标签: c printf parameter-passing c-preprocessor

我在C中定义了一个整数

#define FOO_VERSION 04042012

当我把它传递给像这样的函数时:

unsigned int version = FOO_VERSION;
bar(version);

传递的实际值是1065994。 我使用GBD验证了这一点,打印了变量版本并通过printf来定义: ' FOO_VERSION'

我的问题是造成这种情况的原因,除非有某种我不知道的类型转换,否则我看不出任何理由?

4 个答案:

答案 0 :(得分:3)

04042012是八进制(基数为8)的整数常量,因为初始值为0.删除它以定义小数(基数为10)的整数:

#define FOO_VERSION 4042012

答案 1 :(得分:2)

以前导0开头的文字整数是C中的八进制。

因此04042012(基数8)在(基数10)中为1065994

答案 2 :(得分:2)

0开头的文字位于基础8

#define FOO_VERSION_8 04042012 // base 8
#define FOO_VERSION 4042012 // base 10

您可以使用printf()

打印额外的零
printf("Version %08d\n", FOO_VERSION); // prints 04042012
//               ^

答案 3 :(得分:0)

以前导0开头的整数是C中的八进制表示法。

04042012是基数8.没有任何前导符号它是基数10.

您可能也会觉得有趣 前导0x是十六进制(Base 16)。

所以0x10将是16位小数。