2009-11-09 83 views
0

我剛剛學習C並正在使用xCode(不知道它是否重要)。此代碼:關於返回值的基本C問題

#include <stdio.h> 

int main (int argc, const char * argv[]) { 
    int myInt; 
    myInt = 2; 
    myInt *= ((3*4)/2) - 9; 
    printf("myInt = %d", myInt); 
    return myInt; 
} 

輸出這樣的:

Session started at 2009-11-09 15:51:15 -0500.] 
myInt = -6 
The Debugger has exited with status 250.The Debugger has exited with status 250. 

的printf的是正確的,但是關於什麼樣的回報是

A)使其在包裝和

B)顯示結果兩次? (說明一下,如果我放return 0;,它只打印「調試器已退出」一行,值爲0.)

謝謝!

+0

回退,因爲我的輸出實際上打印了(退出狀態...)兩次。這是我的問題的一部分,謝謝。 – 2009-11-09 20:59:22

+0

我對xCode一無所知,不過我建議不要讓你的主函數返回myInt的值,除非它爲了某種特殊目的而這樣做。 CProgramming.com上有一些體面的教程可以幫助學習C. – ChadNC 2009-11-09 21:06:26

回答

10

返回代碼被shell解釋爲範圍0-255的無符號整數。

+0

你確定它的返回碼是字節嗎?我想我記得得到-1的返回值,我記得它更像一個無符號整數(如32位或64位,取決於平臺)......我認爲這取決於平臺,但是取決於返回值的絕對上限和下限 – Earlz 2009-11-09 21:01:45

+0

在Mac OS X上(這是問題適用的問題,因爲它使用'xcode'標記),返回值是一個無符號字節。在我使用的所有Unix和Linux系統上都是如此,儘管我認爲它在技術上可能取決於平臺。 – mipadi 2009-11-09 21:05:55

+0

我在我的OpenBSD系統上測試過它,它只是返回字節值..也許它是Windows,然後允許消極和等 – Earlz 2009-11-09 21:11:14

0

我假定xcode的治療退出狀態爲00-FF(0-255)和-6 = 250在這種情況下

2

在Unix中,從程序的返回值被限制在0-255範圍內(是的,從main返回的類型是int,但這是一個歷史異常)。查看關於exit status的GNU文檔。

至於消息「Debugger已退出狀態250」顯示兩次,這是來自正在運行您的命令的進程,因此您無法控制它。

0

檢查man pageexit()_Exit()

兩個功能使低階的父進程提供 狀態參數八 位[...]

0

的(根據你描述的)換行是由於你在調用printf()時未能輸出一個LF(換行符)字符。您可以通過將\ n添加到打印格式字符串來解決該問題。將您的代碼更改爲:

#include <stdio.h> 

int main (int argc, const char * argv[]) { 
    int myInt; 
    myInt = 2; 
    myInt *= ((3*4)/2) - 9; 
    printf("myInt = %d\n", myInt); 
    return myInt; 
} 

至於加倍「調試器已退出狀態250」。這是IDE /調試器的功能,而不是代碼的結果。正如其他人所解釋的那樣,-6 = 0xFFFFFFFA,當截斷爲8位並視爲無符號時,等於250(十進制)。

0

-6被表示爲2的二進制補碼6以將其存儲到存儲器中。