重新认识C语言------关于C语言以及其概述

一、背景

      工作毕业也有三年左右,本科专业学的是测控仪器仪表,毕业后并没有如愿进入对应的研发岗位,现在终于回归到本专业已经差不多一年左右时间,工作嵌入式软件开发,在工作一年左右后,想跳槽去更好一点的平台,面试几个大公司发现自己连笔试都通过不了,也意识到自己C语言基础太差。平时工作过程中,都只是以能实现功能为目标,却没有关心代码的质量,以至于C的基础一直也就那水平,现在下定决心回过头好好复习下C语言。希望自己坚持将笔记记录到网上和大家一起分享学习。

       学习参考书籍:《C Primer Plus第6版》/Stephen Prata。

       格式规范说明:一级标题使用24号字体,二级标题使用18号字体,个人觉得重要部分加粗显示。重重要提示使用蓝色字体。疑惑部分用红色字体。

       如文章有错误之处,还望指出。

二、关于C语言

      首先C语言是一种以内存,要学好C语言必须要有计算机基础,虽然我计算机基础一般,但是一些硬件知识还是能看明白的。其次C语言是一种面向过程的编程语言,关于面向过程和面向对象的区别可参考链接:https://www.cnblogs.com/Grand-Jon/p/7404917.html

      2.1语言标准 

        第一个ANSI/ISO C标准,1989年由ANSI提出,1990年经ISO批准,故可简称为C89/C90.在该标准中,委员会提到了C语言的指导精神:

        @信任程序员

        @不要妨碍程序员做需要做的事

        @保持语言精练简单

        @只提供一种方法执行一项操作

        @让程序运行更快,即使不能保证其可移植性

在最后一点上,标准委员会的意思是:作为实现,应该针对目标计算机定义最合适的某特定操作,而不是强加一个抽象、统一的定义。但是在实际工作中,同一种硬件平台,应该尽量保持程序的可移植性,可维护性。关于倒数第二点,暂时还没理解。有些概念性文字,看起来很不起眼,但是或许只有经过成千上万的实践后会恍然大悟领悟其中的道理。

    后面随着C语言的发展,进行了两次修改,分别为C99和C11.新的C标准会有一些新的功能支持,后续运用到了再介绍。

      2.2使用C语言的步骤

         定义程序目标、设计程序(可绘制流程图)、编写代码、测试和调试程序、维护和修改程序。前面两步非常重要,绘制流程图可以整理设计逻辑,避免出现因为漏考虑某种情况的发生而出现程序BUG的现象,所以很有必要在写程序前绘制流程图。即使偷懒不想画,也要绘制逻辑流程图,除非你抽象逻辑能力非常强。

       2.3 编程机制

      关于编程机制本人一直理解比较模糊,现结合书本知识进行整理。

      C编程的基本策略是,用程序把源代码文件转换为可执行文件。典型的C实现通过编译和连接两个步骤来完成这一过程。目标文件中包含机器语言代码,但是并不能直接运行该文件,因为目标文件中存储的是编辑器翻译的源代码,这还不是一个完整的程序。流程如下:


      问:为什么在VS2017中编写几行C语言代码,就能生成窗口可执行程序?

      源代码即用户编写的.C/.cpp文件,首先编译器将文件中的函数或者变量等,翻译成机器能识别的机器语言即目标代码。目标代码虽然是机器能识别的文件,但是并不能直接运行,因为它是不完整的文件。还需要链接器链接器的作用是:把你编写的目标代码、系统的标准启动码和库代码这3部分合并成一个文件,即可执行文件。对于库代码,链接器只会吧程序中要用到的库函数代码提取出来。这样才是一个完整的机器能识别并且能执行的文件,即使用VS2017编写代码后运行的窗口程序。由于平时工作都是使用Keil/IAR集成开发环境工具,所以这部分也只是概念理解,没有实际操作训练,后续如果有机会实践了,再进行补充。

三、C语言概述

        首先看一个简单的C程序:

#include <stdio.h>//编译时,从标准库加载文件stdio.h

int main(void)//主程序入口
{
   int num;//声明变量
   
   num = 1;//给变量赋值
   
   printf("The num is%d\n",num);//调用printf函数,输出

   return 0;//返回0

}
      首先#include,是一条预编译指令,用法为#include“文件名”或者#include<文件名>,作用是加载对应“文件名”中的内容,比如该范例程序中,执行到printf函数时,就会从“stdio.h”文件中找到函数原型,进行运行。它的两种形式,使用“”表示优先从当前文件路径进行查找文件,使用<>表示优先从标准库路径查找文件。 注意:#include "文件名"中的文件名后缀不一定是.h也可以是.c等其他编译器可打开的文件
      其次main函数是主函数的固定程序入口,总是第一个被调用的函数。int main(void)表示main函数返回参数为整数型数据。本例中mian函数没有带形参,其实,main函数可以带两个参数,关于main函数的深入解析可参考文章链接: 《main函数的参数》。 

      接下来是声明变量num,使用语句“int num;”其中,int是C语言关键字,表示整形数据类型,num是标识符。该语句的作用是在内存中分配一个整数型数据size,并且和num这个变量名关联,当使用赋值语句num = 1时,即num对应的内存上的值为1.在我们声明变量时,一定要选择合适的变量名称,提高程序可读性。

      接下来是printf函数,printf函数原型在stdio.h这个标准头文件中。它的作用是将内容打印输出,printf是个多参数函数。在实际应用中,可以将printf进行重定义,输出到我们想输出的外设上,比如串口打印等。

      关于return 0,return语句表示返回退出函数,对于带返回值的函数return 需要返回对应的类型数据。但是main函数可以省略return 0这个语句,函数会在执行完右花括号}后,自动返回0.

       在介绍完上面的例子后,我就自己的理解而言说一下C语言概述。

       C语言由关键字、标识符、运算符、数据四部分组成,这四部分又可组成6种语句:标号语句/复合语句/表达式语句/选择语句/迭代语句/跳转语句。这些是C语言最基本的元素,比如刚才的声明就使用了关键字int 和标识符num。这些元素构成不同功能的函数模块,很多个函数模块最后组成具有特定功能的C程序。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值