Skip to content
鼓励作者:欢迎打赏犒劳

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的比较麻烦。

  1. 需要给函数先建立一个 xx.h 的文件,里面只声明函数。
  2. 再建立一个同名字的 xx.c 的文件,实现具体逻辑
  3. 再在主函数文件引入 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 文件。

  1. 按 Ctrl+Shift+P,输入 Tasks: Configure Task,选择 Create tasks.json file from template
  2. 将生成的 .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;
}

如有转载或 CV 的请标注本站原文地址