
C语言函数
普通函数
text
#include <stdio.h>
// 函数定义
int my_max(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
int main() {
// 函数调用
int res = my_max(100, 200);
printf("res = %d\n", res);
return 0;
}多文件编译
其实就是文件的引用,比如将函数写在另外的文件,然后main函数引用。不过我感觉c的比较麻烦。
- 需要给函数先建立一个 xx.h 的文件,里面只声明函数。
- 再建立一个同名字的 xx.c 的文件,实现具体逻辑
- 再在主函数文件引入 xx.h 文件
具体看示例!
main.c 主程序文件入口
text
#include <stdio.h>
#include "xx.h"
int main() {
// 函数调用
int res = min(1,2);
printf("res = %d\n", res);
return 0;
}xx.h
text
#pragma once
// 声明语句
int min(int a,int b);xx.c
text
int min(int a,int b){
return a < b ? a : b;
}配置vscode执行多文件
方法1 - 命令行形式
text
gcc -g main.c xx.c -o main.exe- main.c: 主文件。
- xx.c: 包含具体实现的源文件(必须显式列出,不支持通配符)。
- -o myprogram: 指定生成的可执行文件名为 myprogram (Windows 下会自动变成 myprogram.exe)。
注意:不要写 xx.h,编译器会自动处理头文件。
方法2 - 配置 tasks.json 实现一键编译(适合长期开发)
如果你不想每次都手打命令,可以配置一个任务来自动编译所有 .c 文件。
- 按 Ctrl+Shift+P,输入 Tasks: Configure Task,选择 Create tasks.json file from template


- 将生成的 .vscode/tasks.json 内容修改为如下(以 GCC 为例):
text
{
"version": "2.0.0",
"tasks": [
{
"label": "Build Multi-file C Project",
"type": "shell",
"command": "gcc",
"args": [
"-g",
"${fileDirname}/*.c", // 关键点:编译当前目录下所有的 .c 文件
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe" // 输出文件名
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": ["$gcc"]
}
]
}
然后就可以 终端 > 运行任务 > 弹出任务列表供你选择。会生成一个编译好的exe文件。然后可以在终端运行.
方法2 是可以 Ctrl+Shift+P > 任务: 运行任务 也是同样的效果。

方法3 是可以直接运行 Ctrl+F9 , 这个会执行运行json文件的 构建任务 , 这个更方便一些 
回调函数
注意:int (*p)(int, int) 代表入参需要一个函数。必须要这样写
- 这告诉编译器:p 是一个变量。
- 这个变量的类型是:指向函数的指针。
- 该指针指向的函数特征是:返回 int,接受两个 int。
- 只有指针变量才能作为参数传递,才能在函数内部被调用(通过 p(a, b))
c
#include <stdio.h>
/*
a, b 即将参与计算的数字
p 是函数指针变量,返回类型是int,接收两个int类型的参数。
* 可以接收add、sub、div...
*/
int calc(int a, int b, int (*p)(int, int)) {
// 调用函数指针变量p中的地址对应的函数,将a和b传递过去计算,返回值通过res变量接收。
int res = p(a, b);
return res;
}
int add(int x, int y) {
printf("add被调用了, x=%d, y=%d\n", x, y);
return x + y;
}
int sub(int x, int y) {
printf("sub被调用了, x=%d, y=%d\n", x, y);
return x - y;
}
int main() {
int res = calc(10, 20, add);
printf("res = %d\n", res);
return 0;
}
