继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【学习打卡】第1天 C语言函数结构

慕桂英7474859
关注TA
已关注
手记 6
粉丝 4
获赞 0

课程名称:C语言系统化精讲 重塑编程思想 打造坚实的开发基础

课程章节:第四章 函数与程序结构

授课老师:bennyhuo

课程内容

函数形式

其实程序语言很多特点都与数学一致,函数也不例外。

C语言中的函数输入一般为形式参数,而书写形式则为

<return type> <name> (<parameter>){
		...statement
		return <return value>;
}

命名法

而值得注意的是,Clion 为编写函数名称或变量名称提供了一系列命名法规范可供选择。
于 Editor > C/C++ > Naming Convention 中:

图片描述

如其中的函数命名即为 Pascal Case

Pascal Case: 它主要的特点是将描述变量作用所有单词的首字母大写,然后直接连接起来,单词之间没有连接符。比如:

如果想获取不一致的提示,可以点击右上角的小绿勾,在General 中将 Inconsitent 勾选上,可能是太耗性能,所以默认是关的。打开后 如 f(int a) 这种便会用波浪线提示。之后使用 alt + enter 便可以校正回来。

最后就是变量命名应该明确意义,除非你参加国际 C 语言混乱大赛。

函数原型

C 语言中函数定义如果什么参数都不要,那么记得写void,
而不写是另一重含义,即什么参数都无所谓。
而C++ 不写则默认为void,这是C 和 C++的重要区别。

那么是函数原型呢,就是给函数的输出输出一个定义,也就是是声明,于定义函数输入输出的类型,只关心参数和返回值的类型,函数的实现在哪都无所谓,声明主要表明:

  1. 函数名
  2. 函数返回值类型,如果没有,默认为
  3. 函数的参数列表,参数顺序,参数类型

变量类型和作用域(Compiler Explorer 查看汇编)

  • block scope : 大括号括起来的作用域
  • function scope: : 函数内的作用域
  • function prototype scope: 函数声明内形参的定义域,如
    double Sort(int size, int array[size])
  • file scope :写在整个文件里,在整个文件都是全局的定义域,而经典 static 的变量也是具有文件作用域的。

staticauto 是对立的:

图片描述

其中non-static 在未初始值的情况下是一个乱码,在msvc下不初始化会报错。

而static 未初始化,也会有个初值,即 0。

而gcc 不初始化则会出非常多叉子,可能会赋上一个上次的栈里的值。

总之 auto – 块作用域 、statci – 文件作用域 、register – 加速操作

  • 在设置中的选项中选择搜索 Compiler Explorer, 选择为https://godbolt.org 在线的Compiler Explore,在mingw-gcc下即可查看对应的汇编,不知怎得,应该不支持 msvc 的编译。

函数的变长参数

使用argc (argument count), 指示数量,使用… 指代变长参数。

void HandleVarargs(int arg_count , ...){
  // 1. 定义 va_list
  va_list args;

  int i;
  // 2. 开始遍历
  va_start(args, argc);

  // 3.取出对应参数
  for (int i = 0; i <argc; ++i){
	int arg = va_arg(args, int);
	printf(" %d : %d \n" ,i, arg);
  }

  //4. 结束遍历

  va_end(args);

}

课程收获

  1. 对之前不理解的函数定义,如auto、register、static 属于变量类型,了解的更清楚,如什么是文件定义域。
  2. 对ide 中自动检查的功能,再就是 compiler explorer 有了更清楚的了解。
  3. 知道了变长参数的写法,对于后续使用宏函数实现自定义的打印有很大的作用。

图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP