在实践中怎么去写好一手代码,这个还真的得多看看人家的代码;个人觉得,我们可以多参照Linux的编程风格。现在,小编就来为大家推荐一篇c语言的总结!

【分享】关于C语言程序设计小结

真正的程序设计高手不是语法上的精通而是程序总体架构,算法上的周密。当初大学时都是利用C51写的51单片机的程序,根本就不管程序的可维护性,程序大小,就是一个C文件中包含了全部的函数体。在工作中这是一个完全不能接受的习惯和致命错误。

其实C语言的语法真的很简单,很快就能掌握,但是将这简单的语句组织成一个良好的架构那可就是一件很难的事了。最近在工作中编写的程序都是我们总监打好的架构,然后在里面进行添砖加瓦的。看着我们总监写的程序,那简直就是一个神。同样能实现的功能函数,虽然我也能编写,可相比之下我们总监的思想就更加的开阔和先进。

现将最近学到的一些方法写下,来提示自己:

1.在编写各类单片机功能程序时,不要急于书写,一定要先想出一个很好的结构和方法,虽然你写出来的程序可以正常运行,但是你是否想到了它的可维护性,可阅读性等等一些很重要的因素呢?所以一定要先想出一个很好的架构在来开始编写。

2.c文件,和h文件设计的要求。C语言显得非常的自由,但我们在工作中为了程序软件的种种原因,一定要规范自己的写法,这对自己和他人都是有利的。在单片机的程序中,我们应该把一个模块功能建立一个单独的C文件,这一C文件中包含和该模块功能全部相关的函数体,同样把和该C文件相关的常量,表达式等等也单独的建立一个h文件,最好是只让它对应的C文件引用,不要让其它的C文件进行引用,这样很好的体现程序的模块化和内聚性。在对单片机的内部寄存器进行操作的程序,我们应该单独的建立一个文件,只允许MCU内部的寄存器名出现在该文件中,你试想一个,在你的所有文件中这这里出现一个寄存器名,那里出现一个寄存器名,是不是可读性不好,没有实现程序的模块化呢?

在程序过程中我们应该把多次用到的变量和常量最好的定义为宏,这样当这些变量 ,常量要更改时,就可以很方便的更改,不用大量的去寻找。在使用文件包含时,一定要注意路径的选择,什么时候用<>," ",不用出现重复编译的情况,有时重复编译可能编译器没有报错,但是这样明显不好。要学会很好的使用条件编译语句,这对我们的程序很有用,在很多小型的操作系统中,都有硬件裁减的功能选择,这正是利用了条件编译,需要这一功能时我们就定义它,不需要时就不去定义,显得很方便。

3.指针的妙用。C语言的特色就在于它的指针。很好的使用指针能让我们的程序更加的有条理性,同样它也是C语言中语法最难的一点了,所以在使用时一定要注意。具体的好处太多了,在这就不在多说了,大家自己体会就能很好的明白了。

总之,C语言算是一门很好的语言,我们不仅要学会它的语句,更重要的是要具有好的思想,思想有多深,就决定你能飞多远!

史上最全C语言编程知识总结

我们是不是在写程序的时候错误很多,就算编译通过了也达不到我们预期的结果。之后自己还找不到错在哪儿。我觉得语言之所以能称之为语言,首先它肯定是一种工具。一种相互交流、相互通信、相互传达之间意图的工具。作为语言那肯定得有自己的语法(比如像表达式,函数,循环,指针)。C语言虽然很强大,但是他也有不少陷阱。所以,写这篇文章有两个目的:一是把C语言一些误用易错的地方总结一下,二是把C语言一些基本语法总结一下。

一、总结一些误用易错的知识点

1.关于自增自减(即++i,i++)

要想给一个数加一或减一我们可以:

i += 1;

j -= 1;

而C语言还允许用++和--运算符,其实这里有误导,因为++和--可以作为前缀和后缀,这样的话他们就有可能改变操作数的值,下面让我们来看看:

i = 1;

printf("i is %d\n",++i); /* prints i is 2 */

printf("i is %d\n",i); /* prints i is 2 */

计算表达式i++的结果是i,但是会引发i随后进行自增:

i = 1;

printf("i is %d\n",i++); /* prints i is 1/ */

printf("i is %d\n",i); /* prints i is 2 */

第一个printf 显示了i自增前的原始值,第二个printf显示了i变化后的新值;当然 -- 类似我就不举例了~

但在同一个表达式中多次使用++和--往往很难理解我们看看下面的例子:

i = 1;

j = 2;

k = ++i + j++;

i,j,k最终值分别是2,3,4而++i是2 j++是2;

总结:不管是++i还是i++执行这条语句后i的值都加一了只是(++i)的值加一了而(i++)没变。

2.typedef与#define

2.1.typedef

C语言除了直接使用标准的类型名(如 int char float double)和自己声明的结构体、共用体、指针、枚举类型外,还可以用typedef声明新的类型名来代替现有的类型名。

typedef unsigned char u8;

typedef unsigned int u16;

u8 count;

u16 time;

typedef struct

{

u8 month;

u8 day;

u16 year;

}DATE;

DATE brithday;

总结一下,声明新的类型名的方法:

1.先按定义变量的方法写出定义体(如 unsigned int i)

2.在变量名换成新的变量名(如将 i换成u16)

3.在最前面加上typedef (typedef unsigned int u16)

4.然后用新类型名去定义变量

2.2 #define

2.1.1不带参数的宏定义

#define 标识符 字符串

#define PI 3.1415926

注意:

1.它的作用是在本程序中用指定的标识符PI来代替3.1415926

2.宏定义是用宏来代替字符串也就是做简单的置换,不做正确性检查如果写成

#define PI 3.l4l6926

即把1写成了字母l但是预处理照常代入不做任何语法检查!!

2.1.2带参数的宏定义

#define 宏名(参数) 字符串

#define S(a,b) a*b

area = S(a,b);

#define MAX(x,y) (x)>(y) ? (x):(y)

3.typedef和#define的区别

一般来说typedef 因为它能正确处理指针类型

typedef char *String1;

#define String2 char *

String1 s1,s2;

String2 s3,s4;

s1,s2,s3 被定义为了char* 但s4却被定义为了char型

3. static 变量

static变量大致分为三种用法

1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期.

2. 用于全局变量,主要作用是限制此全局变量被其他的文件调用.

3. 用于类中的成员.表示这个成员是属于这个类但是不属于类中任意特定对象

1. 静态局部变量

静态局部变量属于静态存储方式,它具有以下特点:

(1)静态局部变量在函数内定义 它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。

(2)允许对构造类静态局部量赋初值 例如数组,若未赋以初值,则由系统自动赋以0值。

(3) 对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。

举例如下:

void fun()

{

static int a = 1;

a++;

}

在第一次进入这个函数的时候,变量a被初始化为1!并接着自增1,以后每次进入该函数,a就不会被再次初始化了,仅进行自增1的操作;在static发明前,要达到同样的功能,则只能使用全局变量:

int a = 1;

void fun()

{

a++;

}

2.静态全局变量

全局变量(外部变量)的之前再加上static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于,非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。

3.static的类成员变量

static关键字有两种意思,你看上下文来判断

1.表示变量是静态存储变量,表示变量存放在静态存储区.

2.

表示该变量是内部连接(这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static),也就是说在其它的.cpp文件中,该变量是不可见的(你不能用).

二、static 函数 —— 内部函数和外部函数

当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。

1 内部函数(又称静态函数)

如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。

定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示:

static 函数类型 函数名(函数参数表)

{……}

关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。

使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。

2 外部函数

外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数:

[extern] 函数类型 函数名(函数参数表)

{……}

调用外部函数时,需要对其进行说明:

[extern] 函数类型 函数名(参数类型表)[,函数名2(参数类型表2)……];

个人总结相关文章:

c语言程序设计总结与体会,c语言程序设计个人总结相关推荐

  1. 对c语言课程的心得体会,C语言课程设计心得体会

    C语言课程设计心得体会 回想这三周C语言课程设计的过程,真是痛并快乐着. 从领到书的那一刻,我就很郁闷?<C语言程序设计>到底事学什么的,到底有什么用.刚开始上课时?还在迷茫这门课程是用来 ...

  2. c语言程序实习心得体会,c语言实习心得体会

    学习c语言不能停留在学习它的语法规则,而是利用学到的知识编写c语言程序,解决实际问题.下面是学习啦带来的c语言实习的心得体会,仅供参考. 一周的C语言实训,虽然时间略显仓促,但却让我学到了很多实际运用 ...

  3. c语言数据类型的心得体会,C语言学习与感悟——《C语言学习基本框架》

    前言 博主在几年前的C语言后中,结合自身学习情况和学习感悟在当时的一个寒假做了两份C语言学习的经验总结,分别为 <C语言学习基本框架> 和 <C语言学习基础程序>, 现在把它们 ...

  4. c语言心得100,c语言课程设计心得体会

    c语言课程设计心得体会 c语言课程设计心得体会范文一: 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技 ...

  5. c语言程序设计作业心得,C语言程序设计实习心得体会

    C 语言程序设计实习心得体会 在这个星期里,我们的学生在老师的带领下进行了 c 语言程序实习学习.在这之前,我们已经对 c 语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围 ...

  6. 江苏大学c语言程序设计,江苏大学201级C语言课程设计要求及题目.doc

    江苏大学201级C语言课程设计要求及题目 C语言程序课程设计 C programming curriculum design 课程设计大纲 一.学时与学分 总学时:1.5周 总学分:2 二.课程设计的 ...

  7. c语言成绩管理程序设计,成绩管理程序设计报告(含代码C语言

    <成绩管理程序设计报告(含代码C语言>由会员分享,可在线阅读,更多相关<成绩管理程序设计报告(含代码C语言(19页珍藏版)>请在人人文库网上搜索. 1.大连民族学院计算机科学与 ...

  8. C语言程序设计教程的读后感,c语言程序设计观后感

    一实验名称计算出1000以内10个最大素数之和二.实验目的1.熟练掌握if.if-else.if-else if语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和s ...

  9. c语言对编程对作用,c语言编程心得体会

    c语言编程心得体会 c语言是在国内外广泛使用的一种计算机语言.以下是小编整理的c语言编程心得体会,欢迎大家阅读! c语言编程心得体会1 说到我学习c语言时,真是用千言万语呀!记得刚开始学的时候,我的c ...

  10. c语言课程教学的建议,C语言程序设计课程教学思考.doc

    C语言程序设计课程教学思考 C语言程序设计课程教学思考 摘要:"C++语言程序设计"是理工科大学生未来科研或工作中一种实用的工具,也可以成为学习其他语言的基础.本文从对学生综合能力 ...

最新文章

  1. 2020上半年收集到的优质AI文章 – 自然语言处理
  2. 浅淡Windows7 32位与64位/x86与x64的区别
  3. the Differences between abstract class interface in C#接口和抽象类的区别
  4. Immutable 详解及 React 中实践
  5. mysql delete temporary denied_这些错误是什么意思?djang中的mysql
  6. python推导式多行书写_python三种推导式的详细介绍及其应用示例,强调字典推导的重要性...
  7. Ubuntu16.04下,Firefox每次打开新网页都是以新建Windows而不是Tab的解决方案:
  8. python 参数_python脚本命令行参数解析
  9. FreeRTOS源码分析与应用开发04:消息队列
  10. linux shell和配置文件的执行顺序
  11. CISCO路由器连接ADSL之PPPoE配置
  12. soap xml_SOAP XML消息–使用Liquid XML Studio进行了解和创建
  13. 学校管理系统设计java(数据库、源码、演讲内容、ppt等)
  14. html中居中的三种方式
  15. wd移动硬盘测试软件,西数硬盘修复工具(WD HDD Repair Tools)
  16. iPhone4s(iOS 6.1.3 越狱) 登录微信(6.2.0.19)
  17. php 许愿墙 阶段案例_PHP+jQueryUI实现许愿墙功能、贴便签、贴标签功能(案例)...
  18. 团队作业3 需求改进系统设计
  19. 再谈OT算法的协同文档制作的底层基础架构记录
  20. python32位与62位可以随便装吗_电脑32位和64位可以随便换吗???

热门文章

  1. java 判定1个IP地址是否是合法IP
  2. MATLAB二次规划和整数规划
  3. mdt 计算机名_MDT配置数据库
  4. mac虚拟机桌面图标隐藏_教你隐藏 Mac 的桌面文件
  5. 亲测:真正免费的音频转文字软件
  6. 计算机的电子报表模板,Excel记账本
  7. Java程序员面试简历模板
  8. QFIL刷机失败Download Fail:Sahara Fail:QSaharaServer Fail:Process fail
  9. python爬取西刺网代理IP地址
  10. 基于Spark的电影推荐系统实现