开发环境:
// void -- 无返回类型, 函数体可以写return; 也可以不写
void func (void) { // 函数头 + 无参数
... 函数体
return;
}
// void -- 无返回类型, 函数体可以写return; 也可以不写
void func (uint8_t para) { // 函数头 + 参数
... 函数体
return;
}
// uint8_t -- 具有返回类型,必须写return x;
uint8_t func (uint8_t para) { // 函数头 + 参数
... 函数体
return 0;
}
#include <stdio.h>
/* 函数声明 */
int max(int num1, int num2);
int main () {
/* 局部变量定义 */
int a = 100;
int b = 200;
int ret; // 接收返回值
/* 调用函数来获取最大值 */
ret = max(a, b); // 调用别的函数
printf( "Max value is : %d\n", ret );
return 0;
}
/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2) {
return (num1 > num2) ? num1 : num2;
}
#include <stdio.h>
/* 函数声明 */
void max(int num1, int num2, int *val);
int main () {
/* 局部变量定义 */
int a = 100;
int b = 200;
int ret; // 接收返回值
/* 调用函数来获取最大值 */
max(a, b, &ret); // 调用别的函数
printf( "Max value is : %d\n", ret);
return 0;
}
/* 函数对比两个数,较大的那个数写入val */
void max(int num1, int num2, int *val) {
val = (num1 > num2) ? num1 : num2;
}
递归指在函数中调用函数自身。(无限套娃或者有限套娃)
#include <stdio.h>
#include <stdint.h>
uint64_t test(uint32_t i) {
if(i <= 1) return 1; // 条件满足,退出套娃
return i * test(i - 1);
}
int main() {
int i = 15;
printf("%d 的阶乘为 %ld\n", i, test(i));
return 0;
}
#include <stdio.h>
#include <stdint.h>
typedef void(*key_cb)(uint8_t event); // 定义一个函数指针类型
static key_cb g_key_event_cb = NULL; // 定义一个函数指针变量
void key_event(uint8_t event) { // 根据函数指针类型定义一个函数
switch (event) {
case 0:
printf("按键释放\r\n");
break;
case 1:
printf("按键按下\r\n");
break;
case 2:
printf("单击\r\n");
break;
case 3:
printf("双击\r\n");
break;
case 4:
printf("长按\r\n");
break;
default:
break;
}
}
int main() {
g_key_event_cb = &key_event; // 将函数地址赋值给函数指针
g_key_event_cb(4);
g_key_event_cb(0);
return 0;
}
函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。
#include <stdio.h>
#include <stdint.h>
typedef void(*key_cb)(uint8_t event); // 定义一个函数指针类型
void key_event(uint8_t event) { // 根据函数指针类型定义一个函数
switch (event) {
case 0:
printf("按键释放\r\n");
break;
case 1:
printf("按键按下\r\n");
break;
case 2:
printf("单击\r\n");
break;
case 3:
printf("双击\r\n");
break;
case 4:
printf("长按\r\n");
break;
default:
break;
}
}
void call(key_cb func) {
func(1);
}
int main() {
call(&key_event);
return 0;
}
#include <stdio.h>
#include <stdint.h>
void __attribute__((weak)) abc(void) {
printf("弱函数\r\n");
}
void abc(void) {
printf("强函数\r\n");
}
int main() {
abc();
return 0;
}