0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何提升C编程能力

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-06-09 10:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

目前C语言被应用得最多的估计就是嵌入式了,在学校学习完C语言,考完等级考试之后,可能就会觉得自己的C语言掌握的还可以了。但这其实只能算入门,像结构体,指针等内容还有很多东西需要去深究,还有GNU的一些补充语法。接下来,我们来探讨一下如何提升!

打怪升级

1. C语言三剑客

C语言经典三剑客《C和指针》《C陷阱与缺陷》《C专家编程》,这三本书相信很多人都听过。对于想提升C编程能力,这三本是绝对要去阅读一下的。单纯阅读肯定很枯燥,所以阅读过程中还是要去动动手的。这三本书的章节其实也没什么必然的关联性,所以建议大家可以挑着看,最近想看研究一下指针,就看"指针"的章节, 想研究动态内存分配, 就看"动态内存分配"章节。毕竟这不是入门书籍。

2. GNU C语法

首先我们先来了解一些概念,ANSI C 、POSIX C、GNU C到底是啥?之间到底有啥关系?

  • ANSI C :由美国国家标准局为C语言制定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。

  • POSIX C :POSIX中文翻译:可移植操作系统接口,POSIX标准的诞生是为了统一个操作系统的接口,方便开发者开发程序,写出可移植的代码程序

  • GNU C:GNU的C函数库,其实就是glibc,它是Linux上最重要的函数库,它定义了 ANSI C 标准指定的所有的库函数,以及由POSIX或其他UNIX操作系统变种指定的附加特色,还包括有与GNU系统相关的扩展。

OK, 有了上面的概念之后。你可能会明白为什么有时候会看到一些奇怪的语法,然后去查课本又找不到。目前大学里的课本是按ANSI C来编写的,都是标准的C语言语法。所以也不用课本垃圾,语法编写不完整!

回到GNU C上面,GUN C提供了一些新的语法功能,对于做Linux开发的,肯定是必须要接触的。比如:GNU C支持零长度数组。


typedef struct test1{    int len;    char a[0];    // 零长度数组}TEST1;

这个时候数组是不占用内存的,如果声明指针是会占用内存的。这玩意有什么作用呢?简单看一下下面的代码:


#include#include #include 
typedef struct test1{  int a;  char b[0]; //零长度数组}TEST1;

int main(){  char str[] = "helloworld";//malloc分配空间  TEST1* test1 = (TEST1*)malloc(sizeof(TEST1) + 20);  printf("%p
", &(test1->a));  printf("%p
", (test1->b));  //字符串复制  memcpy(test1->b, str, sizeof(str));  printf("%s
", test1->b);}

这个时候我们就可以通过结构体(TEST1)成员b去访问后面的地址了。它更多是被用在长度不确定的数据上。大家还可以去思考对比一下和指针的差异!

3.阅读开源代码

个人认为,阅读一下好的开源代码或者原厂提供的一些SDK,对于个人编码能力会有很大提升。学习他们一些好的编码规范和整体架构设计理念,最最经典的当然就是Linux系统了。其实阅读源码并不一定要完全理解代码功能之类的 ,我们更多是去学习为什么这么写, 这么写用什么好处。当然了,也并不是所有都是好的,我们也是取其精华去其糟粕嘛!

来看个小例子


#defineMAX(a,b)((a)>(b)?(a):(b))int max( int a, int b){return((a>b)?a:b);}

上面是要对比两个数的大小,一个是用宏实现,一个使用函数实现。你觉得哪个比较好

首先,宏会比较简洁;然后宏可以传递各种类型的参数,而函数只能传递int类型的;最后函数调用会带来额外的开销,它需要开辟一片栈空间,记录返回地址,将形参压栈,从函数返回还要释放堆栈。

但是宏也有缺点,宏在预编译时会拷贝到所有调用的位置,这样就会使编译出来的文件变大。

所以这需要看实际情况来选择了,这个东西我也是在Linux源码上发现的,Linux最近更新的版本很经常将一些函数替换成宏的形式。所以多阅读,多思考,会提升很快的!

4. 多踩坑,多思考

这东西说起来很虚,实践出真知!只有在做项目的时候,你才会知道,原来某些东西组合起来一起用会有这么多坑。还有就是多思考,多总结,这绝对会事半功倍!不要觉得,反正是“面向浏览器编程”,记那么多干嘛。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    7329

    浏览量

    128653
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144636
  • GNU
    GNU
    +关注

    关注

    0

    文章

    144

    浏览量

    18231

原文标题:如何提高C编程能力

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式应掌握的几种能力

    1. 编程语言 基本掌握嵌入式必备的编程语言。C语言为主,C++为辅。在资源有限的情况下,大多数嵌入式产品还是使用C语言为主的,特别是底层
    发表于 12-08 06:05

    C语言的编程技巧

    设计,分层开发代码,便于理解和维护。 ‌8、避免使用GOTO语句‌:尽管GOTO语句在某些情况下仍然有用,但现代编程更倾向于使用函数和循环控制结构,以提高代码的可读性和维护性。 ‌9、利用C语言的灵活性
    发表于 11-27 06:46

    一文了解Mojo编程语言

    Mojo 是一种由 Modular AI 公司开发的编程语言,旨在将 Python 的易用性与 C 语言的高性能相结合,特别适合人工智能(AI)、高性能计算(HPC)和系统级编程场景。以下是关于
    发表于 11-07 05:59

    芯盾时代助力辽宁某银行提升移动端安全防护能力

    芯盾时代中标辽宁某银行!芯盾时代设备指纹技术具备高精度的设备识别能力,通过基于自主研发的算法,结合后台设备信息,为设备产生专有的ID,能够帮助银行提升移动端安全防护能力,精准区分合法与风险行为。
    的头像 发表于 10-31 09:48 281次阅读
    芯盾时代助力辽宁某银行<b class='flag-5'>提升</b>移动端安全防护<b class='flag-5'>能力</b>

    电网结构优化具体是如何提升新能源发电的消纳能力的?

    电网结构优化提升新能源消纳能力的核心逻辑,是 针对新能源消纳的核心痛点(时空分布不均、出力波动大、并网通道不足、局部承载有限),通过重构电网的 “输送路径、分配方式、平衡机制、调节能力”,构建 “能
    的头像 发表于 10-14 17:40 540次阅读

    技能+1!如何在树莓派上使用C++控制GPIO?

    和PiGPIO等库,C++可用于编程控制树莓派的GPIO引脚。它提供了更好的性能和控制能力,非常适合对速度和精度要求较高的硬件项目。在树莓派社区中,关于“Python
    的头像 发表于 08-06 15:33 3600次阅读
    技能+1!如何在树莓派上使用<b class='flag-5'>C</b>++控制GPIO?

    在STM32F103c8上做DLQR最优控制算法的C编程资料

    这是我近期做的一个项目--基于STM32F103c8的DLQR控制算法的C编程,涉及DLQR最优控制算法、嵌入式STM32F103编程、CMSIS-DSP库使用。    附有完整的程序
    发表于 07-23 15:30 0次下载

    D3502C:低静态电流设计,延长设备续航能力

            在当今电子设备日益便携化和智能化的背景下,电源管理芯片的低功耗设计成为提升设备续航能力的关键因素之一。D3502C 高压降压转换器,凭借其低静态电流设计,显著延长了电池供电设备
    的头像 发表于 07-14 14:53 383次阅读

    DevEco CodeGenie 鸿蒙AI 辅助编程初次使用

    一、工具概述与核心能力 DevEco CodeGenie 是集成在 DevEco Studio 中的 AI 辅助编程插件,专为 HarmonyOS 应用开发设计,提供三大核心能力: 智能知识问答
    的头像 发表于 06-26 08:48 530次阅读

    单片机c语言编程实例大全

    单片机c语言编程实例大全_18
    发表于 04-30 16:11 6次下载

    如何提升自己的电路设计能力,以及编程能力

    想自己设计一个电路,但是不知道如何开始,需要哪些流程,电路相关的知识融合不到一起去,求教
    发表于 04-09 16:08

    接入DeepSeek后智慧场馆的能力提升

    的飞跃。以下是DeepSeek赋能智慧场馆后的核心能力提升: 1. 认知智能升级,实现更自然的交互体验 智能语音助手2.0:基于DeepSeek强大的NLP能力,场馆智能客服可支持多轮复杂对话,准确理解模糊语义(如"离我最近的洗
    的头像 发表于 04-02 11:57 440次阅读

    Triton编译器如何提升编程效率

    在现代软件开发中,编译器扮演着至关重要的角色。它们不仅将高级语言代码转换为机器可执行的代码,还通过各种优化技术提升程序的性能。Triton 编译器作为一种先进的编译器,通过多种方式提升编程效率,使得
    的头像 发表于 12-25 09:12 1204次阅读

    运动控制卡网络通讯的心跳检测之C#上位机编程

    使用C#上位机编程实现运动控制卡网络通讯的心跳检测功能
    的头像 发表于 12-24 10:54 1983次阅读
    运动控制卡网络通讯的心跳检测之<b class='flag-5'>C</b>#上位机<b class='flag-5'>编程</b>

    外资制造业可利用AI提升决策能力

    实现其他目标。通过运筹优化技术,企业可以提升有限资源的配置效率,快速适应市场变化。尤其在竞争日益激烈的存量市场中,灵活精准的规划与决策能力无疑是企业保持竞争力的关键。
    的头像 发表于 12-24 10:01 714次阅读