main函式入口

2021-06-22 22:21:20 字數 974 閱讀 4688

最近在弄boost test單元測試的時候,遇到了乙個執行程式後就閃退掉的問題,找了好久才發現,原來是沒有進入到boost 自己的main函式中,因為鏈結的其他lib中,有乙個檔案也定義了main函式,編輯器最終是選擇了那個main函式作為程式的入口。

在vs下  main函式 通常是 int _tmain( int argc, _tchar* argv[ ] )的形式,這是為了統一unicode與ansi。在ansi下,_tmain會被替換為main。在unicode下,_tmain會被替換為wmain,這時其實程式中就沒有名為main的函式了,我覺得這在非vs環境下,可能會找不到main函式而鏈結不過的,c/c++中規定的是名為main的函式是程式入口。

我又試驗了下,縱使在vs下,unicode下,你定義了_tmain函式,同時再定義乙個main函式,這樣也是會進入main函式,而不是_tmain也就是wmain函式的。

總結,也就是,vs下還是會優先尋找名為main的函式,沒有的情況下才會去按照_tmain對應的來選擇。

另外,說到入口函式main,vs下,如果檔案中已經定義了main,而鏈結的lib中也有main的話,是會鏈結衝突的,然而,如果檔案中未定義main,鏈結的兩個lib中都有main,這時,vs是選擇先找到的那個main作為程式入口,而不發出任何錯誤警告資訊。

按理說,有兩個同名同引數的函式,即使在lib裡,應該也是要鏈結衝突的(這句不確定是不是,沒驗證過),但是對於main函式,因為main函式相當於c裡的應用一樣,對於main函式是不可以進行過載的,或許這個原因,反正vs下,多個lib都有時,是選擇第乙個main的。

再說下,vs下找lib的順序,依驗證,應該是先檢視工程配置裡的鏈結--輸入--附加依賴項中的lib,排在前面的即先被找到;然後才是檔案中用#pragma comment(lib, "***x.lib")的方式的那些lib,也是跟檔案編譯鏈結順序有關了。所以,要不自己在檔案中定義好main,要不如果是用lib中的main的話,一定要確保那個lib放在工程配置中的最前面。

main函式的入口函式

作業系統裝載程式之後,首先執行的 並不是main的第一行,而是某些別的 這些 負責準備好main函式執行所需要的環境,並且負責呼叫main函式,執行這些 的函式稱為入口函式或入口點 entry point 視平台的不同而有不同的名字。程式的入口點實際上是乙個程式的初始化和結束部分,它往往是執行庫的一...

main 函式的入口引數

c c 語言中的main函式,經常帶有引數argc,argv,如下 int main int argc,char argv int main int argc,char argv 這兩個引數的作用是什麼呢?argc 是指命令列輸入引數的個數,argv儲存了所有的命令列引數。假如你的程式是hello....

Python 程式入口main函式

在乙個.py檔案中,如果不是在定義函式,也就是說不是在def關鍵字的內嵌結構內,python會預設其餘部分函式是main函式,並自動執行,但正規工程中,一般都會將main函式寫為 if name main 每個人都在寫,但很少有人問,其實這個用法很巧妙!hello.py defsayhello st...