返回列表 发新帖

c语言的新玩法

[复制链接]

39

主题

349

回帖

1676

积分

高中生

Rank: 4

金币
643
好评
11
信誉
125

考神MT论坛新人MT论坛最佳新人

发表于 2023-1-7 15:21:25 | 显示全部楼层 | 阅读模式  来自 江苏
本人c语言新人

近期学到了一个叫typeof的关键字,发现挺有意思的,似乎可以用于实现类似c++的“模板函数“(我不确定怎么称呼)
由于本人才疏学浅,可能很早以前就有人这么玩了,但我不知道吧
感觉挺实用的,比void*好一点
别问我为啥不用c++,问就是不会

假设定义一个用于交换int型变量的函数add1,可以这么做:
  1. void exchange1(int* var1, int* var2)
  2. {
  3.         int var = *var1;
  4.         *var1 = *var2;
  5.         *var2 = var;
  6. }
复制代码
如果是float的话:
  1. void exchange2(float* var1, float* var2)
  2. {
  3.         float var = *var1;
  4.         *var1 = *var2;
  5.         *var2 = var;
  6. }
复制代码

传统c语言是这么复用代码的:
  1. void exchange3(void* var1, void* var2, size_t size)
  2. {
  3.         char var[size];
  4.         memcpy(var, var1, size);
  5.         memcpy(var1, var2, size);
  6.         memcpy(var2, var, size);
  7. }
复制代码

但其实可以这么操作:
  1. #define exchange(ret_type, name, var1, var2)\
  2. void name(typeof(ret_type)* var1, typeof(ret_type)* var2)\
  3. {\
  4.         typeof(ret_type) var = *var1;\
  5.         *var1 = *var2;\
  6.         *var2 = var;\
  7. }

  8. exchange(int, exchange1, var1, var2)
  9. exchange(float, exchange2, var1, var2)
复制代码

回复

使用道具 举报

41

主题

3248

回帖

9145

积分

硕士生

睡觉

Rank: 6Rank: 6

金币
1276
好评
45
信誉
130

考神

QQ
发表于 2023-1-7 16:15:03 来自手机  | 显示全部楼层  来自 江西
看看大佬
回复

使用道具 举报

30

主题

6068

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
6243
好评
12
信誉
98
发表于 2023-1-7 16:35:09 来自手机  | 显示全部楼层  来自 安徽
感谢分享,学习了
回复

使用道具 举报

2

主题

5826

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
3569
好评
1
信誉
96
发表于 2023-1-7 16:46:58 | 显示全部楼层  来自 湖北
学习下大佬的思路。
回复

使用道具 举报

172

主题

4654

回帖

1万

积分

博士生

水怪

Rank: 7Rank: 7Rank: 7

金币
4521
好评
23
信誉
99

MT论坛灌水老大MT论坛活跃会员

发表于 2023-1-7 19:54:32 来自手机  | 显示全部楼层  来自 四川
看看操作
回复

使用道具 举报

3

主题

2454

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
2026
好评
0
信誉
101

考神MT论坛新人MT论坛最佳新人MT论坛帅哥

发表于 2023-1-9 13:25:04 | 显示全部楼层  来自 广东
谢谢大佬分享
回复

使用道具 举报

4

主题

4987

回帖

1万

积分

博士生

知识分子

Rank: 7Rank: 7Rank: 7

金币
1733
好评
2
信誉
117
发表于 2023-1-9 14:55:59 来自手机  | 显示全部楼层  来自 广东
学习学习
回复

使用道具 举报

0

主题

2976

回帖

7010

积分

硕士生

Rank: 6Rank: 6

金币
2394
好评
0
信誉
100
发表于 2023-3-14 23:08:26 | 显示全部楼层  来自 浙江
感谢分享
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表