当前位置: 首页 > >

c语言show函数_C语言“隐秘的角落”??typedef的妙用

写在前面:此文将摘录C语言中容易被忽视的一些知识,并且加以思考为什么要那么做。


它可以存在的道理是:所有语言或多或少都有共同点,举一反三或许可以得到的更多。



我将以tip 1,2,3 当做标识持续更新下去,感兴趣的可以关注+收藏,谢谢。

PS: 双击屏幕可以使自己更专心哦,下面开始咯。



公众号: 黄桃罐头与蜘蛛 写一写可爱的事物。

为什么是黄桃罐头与蜘蛛??mp.weixin.qq.com





Tip2: typedef 的妙用

最早发现typedef的好处是在刚接触函数指针的时候。

代码大概是这样:










这大概是typedef定义中最难理解的样子了。



比如:typedef关键字的定义是:






牛刀小试的时候,我们一般会把它当做#define的替代品:






这就非常容易理解,typedef用后面的标记代表了前面声明的类型。


它与#define的声明各有所长,且放后话。


回到上面的例子,


这里的typedef应该这么理解:


在原来的声明里逐步用别名替换一部分复杂声明,如此循环,把带变量名的部分留到最后替换,得到的就是原声明的最简化版。


所以可以看出来spec_show_func 是那个变量名






顺理成章我们就可以用它来声明一种类型。


比如 : spec_show_func[10] , 数组中每一种都是函数指针,对应的参数,和返回值类型都一致。


为什么要这么写呢?正常的写法又是什么样子?






这里的含义是:


声明并定义一个含有10个元素的数组,数组中是如此类型的函数指针。


下面是对这个数组的赋值。


看起来还行?


那么如果我们需要两个数组呢?






对,复制粘贴就可以。看起来也不是很难。


那么来看一下用typedef的代码吧:






高下立判。


下面我总结了一些关于typedef的使用技巧和使用时机。


当然,还会有一些阻挠你的陷阱。


用typedef来定义与*台无关的类型。

如上文所述:






在更多的情况下,它可以声明一些类型可以起到隐藏信息的目的。



陷阱1:由于typedef本身就是关键字,它不能够与其他如static , const一起使用。
陷阱2: 请注意它与#define的区别,并且选择适当的情况下使用。举一个例子,
typedef char * p_char , 在函数中 void func ( const p_char p) 传参const p_char
是一个指针常量,翻译过来是char* const p, 并不是const char* p;

用来优化代码结构,使代码避免臃肿,增加复用性。

总的来说,就是归类。


C语言并不是OOP语言,它一半是火焰,一半是海水。它非常的细腻,将所有的类型恨不得都给你分的很细,同时它也变得非常的严格,它会对你的代码要求很高。


我们会有很多场景下有一些相同的参数要求,可是我们不需要每次都去声明定义它们,就像上述的函数指针一样。


那么使用typedef 来统一归类是一个非常不错的选择。


它还会让你的代码看起来更有层次。


在你想要声明函数指针的时候,请想到它。

我非常建议你在使用函数指针的时候使用它,除非你只想在一个函数中使用。


同时:


我也希望你在声明struct 和 union的时候使用它。


无脑使用它。


除了一种情况:



陷阱:当你使用链表的时候,请不要使用typedef关键字,因为当你声明的结构体中含有你自身结构体的指针时,会编译不通过。

xxx ;

node
t * p_node;

} node_t ;

这样是错误的,请你老老实实使用stuct node{}; 的方式去定义。至于为什么,可以参考这篇文章中chapter 4.


黄桃咬住葡萄出逃:malloc函数??一个低调的C语言学*者宝藏?zhuanlan.zhihu.com




思考:

其实typedef 这个关键字起的很妙: type define。 基本就很直白的告诉了我们它可以为我们做到什么。

我在学*python的时候,python号称万物皆对象,而class其实又何尝不是type define,只不过它在实现类型的声明之外,还可以对它的操作加入了方法,方法+变量已经形成了一种定式。

C语言是非常底层的语言,可是它随着标准的革新,也一步步得被赋予了新的使命,其实就我个人的理解,这都是程序员们想要“偷懒”的结果。
正是是因为想要偷懒,所以才抛弃那些繁复的重叠,一步步进步了起来。
而我也是为了偷懒,才学*python用来写一些自动化的脚本。

可能正是人类的这些想要偷懒的思想,才让这个社会慢慢步入现代自动化吧。



友情链接: year2525网 工作范文网 QS-ISP 138资料网 528200 工作范文网 baothai 表格模版