2014-07-02 60 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