概述
函数
- 编程的最小单位
- 分类:
- 1.库函数:printf,scanf,包含头文件#include<stdio.h>
- 2.自定义函数
- 组成:
函数类型,函数名,参数,函数体 - 参数:
-
实参:函数调用的参数
-
形参:函数实现的参数
-
参数传递:
- 值传递:只是访问变量值
- 地址传递:修改变量值
-
不定参:
#include <stdarg.h> 表示不定参头文件 -
void va_start(va_list ap, last);//初始化
- 第一个参数:表示不定参列表
- 第二个参数:表示有名参数最后一个参数
-
type va_arg(va_list ap, type);//访问
- 第一个参数:表示不定参列表
- 第二个参数:表示数据类型
-
void va_end(va_list ap);//销毁
-
void va_copy(va_list dest, va_list src);//拷贝
-
#include <stdio.h>
#include <stdarg.h>
void test(int a, ...)
{
va_list ap;
//不定参链表初始化
va_start(ap, a);
//访问数据
printf("a : %dn", a);
printf("sec : %cn", va_arg(ap, int));
printf("three : %fn", va_arg(ap,double));
printf("four : %sn", va_arg(ap, char *));
//销毁
va_end(ap);
}
int main(void)
{
test(123, 'A', 3.44, "hello");
return 0;
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kY4tkSZZ-1620219306395)(2021-05-04-20-32-27.png)]
#include <stdio.h>
#include <stdarg.h>
int test(int a, int b, ...)
{
int sum = a + b;
int tmp;
va_list ap;
va_start(ap, b);
while ((tmp = va_arg(ap, int)) != 0)
{
/*printf("tmp : %dn", tmp);*/
sum += tmp;
}
va_end(ap);
return sum;
}
int main(void)
{
int a = 10, b = 20, c = 30, d = 40;
printf("add : %dn", test(a, b, c, d, 0));
printf("add : %dn", test(1,2,3,4,5,6,7, 0));
return 0;
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gruiFANP-1620219306422)(2021-05-04-20-34-30.png)]
头文件
- 头文件:
-
<> : 表示会从系统头文件的目录中查找 /usr/include/
-
“” : 表示从当前工作目录中查找,如果当前的工作目录没有,则从系统头文件的目录中查找。
-
为了防止头文件重复包含
-
#ifndef __FUNC_H__
#define __FUNC_H__
#endif //FUNC_H
- 源文件生成二进制可执行文件分四步
- 1 预处理:就是把以下的伪代码和特殊字符展开,并保存源文件中
gcc -E file.c -o file.i
伪代码和特殊字符
以#开头统称伪代码
头文件 宏命令 条件编译 - 2 编译:就是检查语法错误和词法规则
gcc -S file.i -o file.s - 3 汇编 生成目标代码
gcc -c file.s -o file.o - 4 连接
gcc file.o -o file
- 1 预处理:就是把以下的伪代码和特殊字符展开,并保存源文件中
makefile :
一门规则性语言
-
实现makefile开发流程
1 创建一个makefile文件
touch Makefile or makefile -
2 打开makefile文件
vim Makfile -
3 实现:
定义规则 => 默认规则
all:
echo hello -
4 执行
make -
依赖:
1 规则名
2 变量
3 文件名
变量:
varname=value
-
符号
- = 表示替换掉原来值
- += 表示在原有的基础上累加
- ?= 判断这个变量是否有值,如果有,则保留原理的值。如果没有,则赋值给这个变量
- := 如果取变量值给当前变量,
如果这个变量定义在当前变量后面,则无法获取
如果这个变量定义在当前变量前面,则可以获取
-
取值:
${varname} -
自动变量:
- $@ : 表示规则名
- $^ : 表示所有依赖
- $< : 表示第一个依赖
- $+ : 表示所有依赖
-
注释:
# -
指定执行makefile文件
- make -f filename rule
- make + 规则名(当前路径)
-
静态编译
make -s filename -
伪代码:
确保有限执行makefile的规则
.PHONY:clean
递归
就是函数自己调用自己
- 直接递归:A => A
- 间接递归:A => B => A
最后
以上就是无语帅哥为你收集整理的C语言—Linux的全部内容,希望文章能够帮你解决C语言—Linux所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复