逗比学习MariaDB源码日记02--第一个文件main.cc

--第一个文件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);

}

 

这里的注释第一句是说这个是就是mysqldmain

但是第二句是啥意思呢?没看懂,字面的意思似乎是说sqllib来调用这个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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。