--第一个文件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了。在每个编译单元单独声明外部函数本身就是自找麻烦的做法
我个人觉得说法二比较靠谱,这里为什么要用呢?可能写的时间比较久远了吧。