难点:下面几个都不是真正的核心,但也是拦路虎。虽然可以靠人工,但是,真的好麻烦。

1、子类型:void* 实现泛型。【大概率不干】

【C语言唯一实现泛型的方式,就是void * 空指针,就是不限类型,如果参数是void * ,那么就可以传入任意指针类型!】

  • 还得考虑指针,不能直接忽略了!!

(1)可能解决方案:

出现void* 时,单独考虑,可以传入任意指针类型。
把指针类型单独考虑,至少在算法中通过 * 判断是不是指针类型。

(2)涉及的问题

1 考虑参数的泛型,是一定要求值的,你只有类型没有值,就算解决了,也没有用武之地。【除非考虑求值】
2 关系:subtype【其实忽略了也就不用管了】

subtype:子类型关系, 又称安全替代原则. 用于实现泛型。
S<:T表示类型S的元素是类型T的元素的子集, 一个需要T类型的上下文中,任何S类型都可以安全使用. 例如int<:float.

子集关系?如何得来的?


void* 泛型实现方式: https://blog.csdn.net/ljianhui/article/details/18748657 https://www.runoob.com/w3cnote/c-general-function.html

2、对于跨文件的全局函数调用,如何找到所有include文件,这很难。【有时间得弄下】

如果不实现,就无法通过include判断是否可调用!

(1)可能解决方法:

1 需要写个跨文件搜索工具,实现类似编译器链接的过程!!!【生编估计也行,实在不行还要去学编译原理】
2 利用Linux本身的工具:内部命令vim,外部命令find,sed,grep,awk,perl。【可以尝试】

在linux平台上,有很多优秀的shell命令组合来做多文件查找/替换,比如这些命令:find,sed,grep,awk,perl。
但其他平台比如windows上就没那么方便了,这时候vim内置的多文件查找命令就有用武之地了,虽然比起外部命令来稍微慢了一点。

3 人工,利用vscode全局搜索,或者看能不能导出结果

4 人工,利用bootlin搜索,看能不能导出结果

10、C语法问题

posted on 2022-03-06 17:47  西伯尔  阅读(97)  评论(0编辑  收藏  举报