Chapter 2 - Introducing C
synopsis
本章节作为introduction主要介绍了C语言的一些基本编程知识,同时用一个基本的printf例子逐行讲解了C语言的经典代码中各部分的作用与规范。另外本章还介绍了诸如printf的用法以及multiple function在编程中的写法,以帮助初学者很快地能够写出自己的第一个简单的C语言程序。
Anatomy of a C Program
C语言从非常专业的分类上来看,其基本组成框架如下
(img)
基本上所有的语句按照数据类型都可以分为 ++这里的我也还是一知半解,等涉及到这一部分了再回来补吧++
- Keywords 关键词
int main
- identifiers
- operators 运算符
- data 数据
或者分为 - declaration Ex:
int i
- assignment Ex:
i = 1
- function Ex:
printf("This is a function\n")
- control ++还不是特别懂这里++
- null ++我也不是特别懂++
Some basic C rules
- Comment
//
注释是提高程序可读性的一大功臣,一个优秀程序员写出来的code其中必然会在必要的地方加上各种注释,以方便理解与修改。
// comment
或是/* comment */
这两者都可以用于书写C语言程序中的注释,前者更为优秀一些,这是因为前者更加简明,不容易在注释这一块引入语句错误(syntax error)。 - 程序主体
{}
大括号包裹着的为程序的主体结构block,这个以后会进一步详细讨论 -
%
这个符号告诉了程序,接下来的地方将会出现一个十进制的int数值,以后会详细说。++好像是叫转义字符来着?++ -
include
预处理header files,相当于将整个include的文件内容复制粘贴进了本程序,能够很好地协助程序调用函数,实现每个程序的个性化调用函数。 -
return
在返回值不为void的程序中,必须要有return值,如果不打算利用函数的return值作进一步的计算处理的话,就可以直接return 0。++如果打算用的话则看情况而定++ -
int main(void)
无论何时,main函数的名字都不能变,并且main函数一般是放在第一个展现在程序中的,子函数一般会跟在main函数中。
关于main函数中的参数,括号中填void代表不需调用任何数值,照此填写是很好的编程习惯。int则代表main函数返回值为一个int,所以main程序的结尾一般都写上return 0
,代表main函数返回了一个值为0的int。
Declaration
int i
; int i, j, k
在程序中,一般都要在程序的开头进行本程序中用到的各种变量的declaration,不进行declaration的变量是不能用的!另一方面,declaration也可以等到用之前再临时进行,但是个人觉得还是放在程序一开始比较好,因为这样的好处是:
- 让阅读你代码的人能够快速对你的程序中包含了什么有个基本了解
- 让你在正式开始写程序之前通过思索要用到哪些变量declaration来进一步提前设计一下程序
另外,在declaration的过程中其实就可以进行赋值assignment了。
同时可以看到,也可以在一行中进行多个同类型variable的declaration。
Assignment
assignment的基本格式为i = 1
,这读作将1的值赋予i,也就是等号右边的值赋予左边。更多详细信息在后面会讲到
printf()*
这是这本书中第一次提到的可调用函数,也是整个编程中最简单和用途最广的一个程序。详见Fucnitons
escape sequence
\n
为代表的escape sequence是编程中常用的一个概念,因为在编程中常要用到一些超越字母输入以外的操作,比如调整输入位置,改写编码位置等,这时候就要使用escape sequence了。
debug
程序出错分为两大类:语法错误和语义错误,语法错误就是写的不合C语言规范,语义错误则是程序运行后与原设想不同。相比之下,语义错误更难处理。
想要debug,主要有以下几种方法:
- track program state假设自己是电脑一样,顺着代码一点一点读下来,然后边读边追踪电脑都在运行些什么,看看和自己编码时想的一不一样这样。
- printf method在一些程序运行的节点使用printf来展示一些variable的值,从而分析程序出问题的地方在哪里。
- use of degubber使用debugger这种专门用于debug的程序来帮助寻找bug所在。++Xcode里面也有,但是还没有试用过++
Multiple functions
在一个程序中,可以把某部分重复使用的代码单独编为一个函数然后在程序中调用使用,这样可以提高编码效率和形成模块化编程,降低代码维护的成本。
基本要求分为三部分:
-
prototype
位置在include等预处理部分,必须在main函数之前。格式就照抄function definition的开头一行就可以。` -
function call
这是在main函数中调用子函数,其实就和调用其他程序一样。 -
function definition
这里是子函数的主体,包含了所有的子函数代码,一般放在main函数之后,格式为:
''#include<stdio.h>
''int Kotori(int kawaii); //prototype
''
''int main(void)
''{
'' int cute = 19;
'' cute = Kotori(cute); //function call
'' printf("Minami Kotori is so cute as %d!\n", cute);
''
'' return 0;
''}
''
''int Kotori(int kawaii) //function definition
''{
'' int minami = 10;
'' return kawaii + minami;
''}