2012-11-29 177 views
1

這段代碼中的-6i是什麼意思?C printf輸出

#include<stdio.h> 

int main() 
{ 
    int i = 1234; 
    printf("%d",-6i); 
} 
+3

我可以告訴你如何找出答案。 –

+0

那你等什麼? –

+0

@ mohan.gade:自己粘貼代碼:http://gcc.godbolt.org/ – akira

回答

1

也許如果你改變你的代碼做一點:

int main(){ 
    int i = 1234; 
    printf("%d",-6*i); 
    } 

你可能會-7404回來。

並回答第二個問題,請檢查這個question

+0

@MichaelBurr - 爲什麼不呢? – user93353

+1

@MichaelBurr - Tengis的課程與OPs不同。騰吉斯計劃會給你'-7404'。這就是說,榮譽是唯一理解OP問題的人。 – user93353

+0

@ user93353:哦,我錯過了。刪除這些評論... –

4

要回答你真正的問題,-6i是一個複雜的常量(GCC擴展)。從http://gcc.gnu.org/onlinedocs/gcc/Complex.html

要使用複雜的數據類型寫入常量,請使用後綴'i'或'j'(任意一個;它們是等效的)。例如,2.5fi的類型爲_Complex float,而3i的類型爲_Complex int。這樣一個常量總是有一個純虛數值,但是你可以通過給一個實常數加一個來形成你喜歡的任何複數值。這是一個GNU擴展;如果您的ISO C99符合C庫(如GNU libc),並且想要構建浮點類型的複數常量,則應該包含<complex.h>,並使用宏I_Complex_I代替。

所以在-6ii無關與變量i,宛若漂浮不斷-1.0ff就什麼都沒有做一個叫f變量。

一個附註printf("%d",-6i);是未定義的行爲,因爲格式規範%d不處理複雜的參數。對於複雜類型的表示,GCC沒有做出任何承諾(據我所知)。你不能說什麼printf()會做什麼。

我認爲要打印複雜的值,你必須分別提取複雜值的每個組件(我認爲glibc的printf()不具有處理GCC複雜類型的格式規範擴展)。例如:

​​