標籤:mysql 源碼 source mariadb
--第一個檔案main.cc
1簡單的一段代碼,好有 hello world的感覺啊
/*
main() for mysqld.
Calls mysqld_main() entry point exported by sql library.
*/
externintmysqld_main(int argc, char **argv);
int main(int argc, char**argv)
{
returnmysqld_main(argc,argv);
}
這裡的注釋第一句是說這個是就是mysqld的main
但是第二句是啥意思呢?沒看懂,字面的意思似乎是說sql的lib來調用這個main(也就是調用mysqld),額,mysqld不是啟動的進程麼,怎麼還要別人來調用呢?
然後就是典型的C寫法了,嗯,基本都還給老師了,還是把C的相關也記錄下,免得忘了。
int argc, char **argv 用於運行時,把命令列參數傳入主程式。
argc -- 命令列參數總個數,包括可執行程式名。
argv[i] -- 第 i 個參數。
argv[0] -- 可執行程式名。
例如運行:
abc.exe
argc 等於1, argv[0] 是 "abc.exe"
例如運行:
rec.exe 4 5.2
argc 等於3, argv[0] 是 "rec.exe", argv[1] 是"4", argv[2] 是 "5.2".
另外extern是個啥米意思呢?戳了下度娘
說法一:
寫extern 是比較正規的寫法,一是告訴編譯器,要建外部連結,二是給讀程式的人方便,到另一個程式去看來源程式。
現在的編譯器比較聰明,找不到函數定義,你不寫extern ,它也知道到外面去找。
C++裡也許有用,C++可以寫同名函數,如果加了extern,編譯器就用外邊的,不寫extern,就用裡面的同名函數。
說法二:
實際上沒有任何區別
函式宣告前加extern表示這個函數的實現不在當前檔案中(嚴格地說是編譯元),但是不加extern一樣會在其他編譯元中尋找實現。而加了extern也一樣會在當前編譯元中尋找。
--
別被誤導... C/C++不允許函數重名(基本上也就是指令碼語言允許... 後定義的會把先定義的覆蓋...)。C++看似有名字一樣的函數,只不過把參數表也算在函數名裡了。
至於是否規範。起碼20年前的stdio.h裡的函式宣告就已經不帶extern了。在每個編譯單元單獨聲明外部函數本身就是自找麻煩的做法
我個人覺得說法二比較靠譜,這裡為什麼要用呢?可能寫的時間比較久遠了吧。
本文出自 “熊二” 部落格,請務必保留此出處http://9638712.blog.51cto.com/9628712/1637437
逗比學習MariaDB源碼日記02--第一個檔案main.cc