2013-10-07 220 views
3

有沒有什麼辦法從C++的主函數返回字符串?我提到下面的示例程序從C++主函數返回字符串

string main(int argv, char* argc[]) 
{ 
    . 
    . 
    return "sucess"; 
} 
+0

您可能想閱讀:http://stackoverflow.com/questions/204476/what-should-main-return-in-c-and-c – Stefan

+3

你爲什麼要這麼做?誰會收到這個字符串? – Asaf

+2

你打算如何使用該字符串? – zakinster

回答

8

標準表示:

3.6.1主要功能[basic.start.main]

2 /一種實現不應預定義的主要功能。該功能不得超載。 它應該有一個類型爲int的返回類型,否則它的類型是實現定義的。所有的實現應允許兩個

  • 的函數()返回int
  • 的函數(INT,指針字符指針)返回int

爲一體的類型主要。 [...]

所以不,你必須返回一個int。

從您發表您的意見,您似乎想簡單地輸出到標準輸出一個字符串,那麼你可以做:

#include <iostream> 
int main() 
{ 
    std::cout << "Success" << std::endl; 
    // No need for return 0; it is implicit in C++ 
} 

由於Kerrek SB在評論中表示,return 0;在C++隱式(標準§3.6.1/5):

[...]如果控制到達的main而不會遇到結束聲明中,效果是執行

return 0; 
+0

如果你在這一節中進一步閱讀,你會發現'return 0'是多餘的:-) –

+0

@KerrekSB你是對的。我編輯了我的帖子。感謝您指出這一點;) –

3

不,它不符合標準。你必須返回一個int來向調用者顯示程序如何退出(很好,有錯誤?)。

爲什麼你會返回一個字符串?

+0

我正在從shell腳本運行C++二進制文件。我需要將字符串返回給shell腳本以作進一步決策。 – kayle

+0

爲此,您可能需要使用程序的_output_,但如果您真的想要,也可以將返回值轉換爲腳本中的某個字符串。 – Hulk

+0

@kayle如果您想將程序的輸出用作shell中的文本,您必須將其捕獲到shell中。例如,在bash中,在'$(...)'中調用你的程序。\ –

1

不,你不能在C++中從main返回字符串,從main函數返回值是進程返回碼(如果成功則返回0,如果過程失敗則返回0)。所以OS正在等待從你的應用程序結束的正確信號。

3

,你不行,你必須返回一個int。更深入的思考,一個字符串將是困難的一個shell程序來處理:當將內存被釋放,什麼樣的字符串將返回& C)

但是你可以寫信給標準輸出標準錯誤使用std::coutstd::cerr。當您希望控制檯應用程序輸出類似字符串的數據時,這是正常的事情。

通常情況下,您依靠OS shell將您的程序的標準輸出引導至另一個輸入(unix使用管道|)。

1

你大概的意思是寫入到標準輸出

#include <cstdio> 

int main() 
{ 
    // ... 

    std::puts("success"); 

} // no "return", success is implicit in C++ 

這是對流程進行數據通信的標準方式之一,許多工具適合以這種方式被使用。

+0

爲什麼在一個C++程序中使用放入?使用標準的cout流! – erlc

+0

@erlc:不,謝謝。 –

+1

@KerrekSB:爲什麼不能?請注意,我不是強加任何東西,只是想知道原因。 – legends2k