2014-07-02 58 views
1

这应该如何在C语言中解析?是012e2八进制还是浮点?

1000 

(如果八进制012 * 10^2)

1200 

(如果整个数为十进制)?

+3

我不知道编译器如何解析它,但我分析它,“有人找为了麻烦“。 –

+0

那个丑陋的常量在哪里出现?顺便说一句,“八进制或浮点”没有多大意义。八进制是一个文本转述; 'float'是一种类型。 –

回答

6

的常量用指数总是浮点。

C中没有八进制浮点常量(有十六进制浮点常量,但这不是其中之一)。

所以012e2是写不出1200.0不必要的混淆方式。

(我认为没有充分的理由把它写这样一来,除非其目的是在故意混淆。)

+0

关于:_我可以认为没有什么好的理由......_可以通过代码生成例程来创建,并以某种模板的一致性进行格式化。 (也许在20世纪70年代或80年代,当混淆是运动对某些人) – ryyker

+0

@ryyker:也许有一个正好需要3位有效数字和没有小数点 - 尽管'120e1'就好像坏。 (是的,我知道特定的标记在评论中不起作用。) –

5

012e2double类型的文字,其值与1200.0相同。

浮点常量是十进制或十六进制浮点常量。十进制浮点常量可以从任何数字开始,包括0

(C99。6.4.4.2浮动常数)

decimal-floating-constant: 
    fractional-constant exponent-partopt floating-suffixopt 
    digit-sequence exponent-part floating-suffixopt 

digit-sequence: 
    digit 
    digit-sequence digit 
+0

“0”开头的事实数字不是八进制的意思吗? – Jack

+0

@Jack:仅适用于整型常量(以及作为字符常量和字符串文字的语法的一部分)。 –

+0

@Jack没有浮点常量是十进制或十六进制 – ouah