逗比学习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);

}

这里的注释第一句是说这个是就是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了。在每个编译单元单独声明外部函数本身就是自找麻烦的做法

我个人觉得说法二比较靠谱,这里为什么要用呢?可能写的时间比较久远了吧。

时间: 2024-11-09 02:40:59

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

逗比学习MariaDB源码日记01--一切的开始

--一切的开始 作为一个合格的逗比,决定做一件逗比的大事情,作为一个把C和C++全部还给老师的逗比,打算通读一遍Mysql的核心代码,额,不知道能坚持多久,争取不要半途而废吧,不过逗比的事情哪里说的清楚呢 那么我们就开始吧. 1.你得先有一份源码,mysql的官网不知道为什么,我下载不了,下载的MariaDB的源码,基本是一回事. 2.你得有一个看C和C++源码的工具,有人推荐source insight,不过我试了下不太好用,比较乱.然后有人推荐eclipse,WTF,这不是写java的么,结

(2)学习ArduPilot源码——shetch范例

(2)学习ArduPilot源码--shetch范例 我的tip:在了解了ArduPilot源码的基本信息和架构后,下面开始实战,下面开始学习第一个范例. 你自己探索这些代码的第一步是使用libraries的例程.根据arduino的传统,我们的大部分libraies都会有范例.范例("sketch")是写成cpp文件的主程序. 认识Ardupilot使用的API库和协议是理解代码的前提,因此使用范例是入门的好方法.刚开始你应该阅读.编译和运行下面的库的范例: ·        lib

一起学习redis源码

redis的一些介绍,麻烦阅读前面的几篇文章,想对redis的详细实现有所了解,强力推荐<redis设计与实现>(不仅仅从作者那儿学习到redis的实现,还有项目的管理.思想等,作者可能比你我都年轻欧).如果阅读了上面的文档,激起你对redis的强力好奇,那么就只能阅读源码了.不管是在校学生,还是已工作的,redis的代码都值得阅读.我们可以了解如何编写一个工程可用软件,可以学习一些开源常用软件,通过redis丰富的数据结构,可以熟悉大学学习的那点儿数据结构,可以了解如何实现一个自己高效的网络

Struts2+Spring+Ibatis用户注册、登录、管理入门学习实例源码下载

原文:Struts2+Spring+Ibatis用户注册.登录.管理入门学习实例源码下载 源代码下载地址:http://www.zuidaima.com/share/1550463735532544.htm Struts2+Spring+Ibatis用户注册.登录.管理入门学习实例源码下载 项目截图: jar包和sql文件都在源码包中. 运行截图: 用户注册页面: 用户管理页面:

Linux学习之源码1:入口流程

有地方看到,启动流程是arch/arm/boot/compressed/head.s ----->调用arch/arm/boot/compressed/misc.c的decompress_kernel()函数解压内核.---->arch/arm/kernel/head-common.S初始化 ---->init/main.c的asmlinkage void __init start_kernel(void) 注意在arch/arm/kernel/smp.c文件中有一个启动多核处理器的函数

编译安装MariaDB源码包

因为MySQL的发展趋势不甚乐观,MariaDB已替代MySQL被CentOS 7做为默认组件,如果想在CentOS 6中使用最新的MariaDB,则需要我们手动安装,其安装方式有三种: 1.RPM包安装 2.二进制包安装 3.源码包安装 下面我们来介绍如何使用源码包来安装MariaDB,系统平台:CentOS 6.5:MariaDB版本:10.0.19 一.获得MariaDB源码包 可以通过MariaDB的官方网站来获得MariaDB的最新源码包,下载地址为:https://downloads

WEB前端开发学习:源码canvas 雪

WEB前端开发学习:源码canvas 雪 双旦节要到了,程序员们为了响应气氛,特别用代码制作了动态雪花,WEB前端开发学习的初学者们一起跟着案例做一遍吧! <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body style="overflow: hidden;margin:

一个jeecg整合activiti的学习例子,源码下载

社区成员:刘京华采用技术:jeecg+ activiti源码下载地址:http://pan.baidu.com/s/1dDxOHrV 截图演示:  2.jpg (71.81 KB, 下载次数: 0) 4.jpg (41.98 KB, 下载次数: 0) 5.jpg (64.07 KB, 下载次数: 0) 5.jpg (64.07 KB, 下载次数: 0) 一个jeecg整合activiti的学习例子,源码下载

Linux学习之源码2:start_kernel流程

一.X86的流程可以参考http://www.kerneltravel.net/kernel-book/第十三章%20启动系统/13.5.htm 二.arm的流程,在http://www.cnblogs.com/gangsaleisi/archive/2013/01/09/2851734.html基础上进行分析. 并且是在3.9.7版本上进行分析的,差别不是太大. 1.lockdep_init():lockdep哈希表初始化,lockdep是linux内核的一个调试模块,用来检查内核互斥机制尤其