ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CPrimer Plus学习手记——第二章-快速概要-命名

2019-09-20 11:57:40  阅读:208  来源: 互联网

标签:语句 函数 int C语言 手记 Plus CPrimer 表达式 变量


命名

  1. 给变量命名时要使用有意义的变量名或标识符(如,程序中需要一个变量数羊,该变量名应该是sheep_count而不是x3)。
  2. 如果变量名无法清楚地表达自身的用途,可在注释中进一步说明。这是一种良好的编程习惯和编程技巧。
  3. C99和C11允许使用更长的标识符名,但是编译器只识别前63个字符。对于外部标识符(参阅第12章),只允许使用31个字符。〔以前C90只允许6个字符,这是一个很大的进步。旧式编译器通常最多只允许使用8个字符。〕
  4. 实际上,你可以使用更长的字符,但是编译器会忽略超出的字符。也就是说,如果有两个标识符名都有63个字符,只有一个字符不同,那么编译器会识别这是两个不同的名称。
  5. 如果两个标识符都是64个字符,只有最后一个字符不同,那么编译器可能将其视为同一个名称,也可能不会。标准并未定义在这种情况下会发生什么。(忽略掉了超过的字符)

 

可以用小写字母、大写字母、数字和下划线(_)来命名。而且,名称的第1个字符必须是字符或下划线,不能是数字。

有效和无效的名称

无效的名称
第一个$符号不是字母、也不是下划线。**
第二个不能用数字2。
第三个-符号
第四个使用空格符号了
第五个‘符号

 

  1. 操作系统和C库经常使用以一个或两个下划线字符开始的标识符(如,_kcab),因此最好避免在自己的程序中使用这种名称。
  2. 标准标签都以一个或两个下划线字符开始,如库标识符。这样的标识符都是保留的。这意味着,虽然使用它们没有语法错误,但是会导致名称冲突。
  3. C语言的名称区分大小写,即把一个字母的大写和小写视为两个不同的字符。因此,stars和Stars、STARS都不同。
  4. 为了让C语言更加国际化,C99和C11根据通用字符名(即UCN)机制添加了扩展字符集。其中包含了除英文字母以外的部分字符。欲了解详细内容,请参阅附录B的“参考资料VII:扩展字符支持”。(UCN 允许在 C 源码中使用任何字符,而不仅仅是英文字符。)

声明变量的4个理由

一些更老的语言(如,FORTRAN 和 BASIC 的最初形式)都允许直接使用变量,不必先声明。为何 C语言不采用这种简单易行的方法?

原因如下。

把所有的变量放在一处,方便读者查找和理解程序的用途。

如果变量名都是有意义的(如,taxtate而不是 r),这样做效果很好。

如果变量名无法表述清楚,在注释中解释变量的含义。

这种方法让程序的可读性更高。

 

声明变量会促使你在编写程序之前做一些计划。程序在开始时要获得哪些信息?希望程序如何输出?表示数据最好的方式是什么?
声明变量有助于发现隐藏在程序中的小错误,如变量名拼写错误。例如,假设在某些不需要声明就可以直接使用变量的语言中,编写如下语句:

RADIUS1 = 20.4;
/*在后面的程序中,误写成:*/
CIRCUM = 6.28 * RADIUSl;

  你不小心把数字1打成小写字母l。这些语言会创建一个新的变量RADIUSl,并使用该变量中的值(也许是0,也许是垃圾值),导致赋给CIRCUM的值是错误值。你可能要花很久时间才能查出原因。

(a是一个int类型的变量,p是一个int *类型的变量。输出a,那么就是输出一个垃圾的int值。输出*p,那么就是输出一个垃圾int *变量指向的内存的值,由于这个垃圾int *变量指向的内存的使用权很可能是不属于你的,所以这是一种“不安全”的行为,编译器一般会报错的。就是未知地址)

 

这样的错误在C语言中不会发生(除非你很不明智地声明了两个极其相似的变量),因为编译器在发现未声明的RADIUSl时会报错。

 

如果要声明变量,应该声明在何处?前面提到过,C99之前的标准要求把声明都置于块的顶部,这样规定的好处是:把声明放在一起更容易理解程序的用途。

C99 允许在需要时才声明变量,这样做的好处是:在给变量赋值之前声明变量,就不会忘记给变量赋值。但是实际上,许多编译器都还不支持C99。

 

赋值

n = 1;

  程序清单中的这行代码是赋值表达式语句[2]。赋值是C语言的基本操作之一。该行代码的意思是“把值1赋给变量num”。在执行int num;声明时,编译器在计算机内存中为变量num预留了空间,然后在执行这行赋值表达式语句时,把值储存在之前预留的位置。可以给num赋不同的值,这就是num之所以被称为变量(variable)的原因。注意,该赋值表达式语句从右侧把值赋到左侧。

  【2】:C语言是通过赋值运算符而不是赋值语句完成赋值操作。根据C标准,C语言并没有所谓的“赋值语句”,本书及一些其他书籍中提到的“赋值语句”实际上是表达式语句(C语言的6种基本语句之一)。本书把“赋值语句”均译为“赋值表达式语句”,以提醒初学者注意。

  赋值是C语言中的基本操作之一

printf()函数

 

printf("I am a simple ");
printf("computer.\n");
printf("My favorite number is %d because it is first.\n", num);

 

  这3行都使用了C语言的一个标准函数:printf()。

  圆括号表明printf是一个函数名。圆括号中的内容是从main()函数传递给printf()函数的信息。

  

 

例如,上面的第1行把I am a simple传递给printf()函数。该信息被称为参数,或者更确切地说,是函数的实际参数(actual argument),如图2.3所示。〔在C语言中,实际参数(简称实参)是传递给函数的特定值。

实际参数:

//当我调用函数fun时,例如:
int n,i=1,j=2;
n=fun(i,j);
//调用fun(i,j)形式中的i,j就是实参。

  形式参数(简称形参)是函数中用于储存值的变量。第5章中将详述相关内容。〕printf()函数用参数来做什么?该函数会查看双引号中的内容,并将其打印在屏幕上。

  形式参数:

main (int argc,char *argv[])
//这里就是两个形参了
 int fun(int a,int c){some operation;}
//a和c都是形参。

  第1行printf()演示了在C语言中如何调用函数。只需输入函数名,把所需的参数填入圆括号即可。当程序运行到这一行时,控制权被转给已命名的函数(该例中是printf())。

  函数执行结束后,控制权被返回至主调函数(calling function),该例中是main()。

return语句

  在C语言中,return语句是一种跳转语句。

  int main(void)中的int表明main()函数应返回一个整数。C标准要求main()这样做。有返回值的C函数要有return语句。该语句以return关键字开始,后面是待返回的值,并以分号结尾。

  如果遗漏 main()函数中的 return 语句,程序在运行至最外面的右花括号(})时会返回0。因此,可以省略main()函数末尾的return语句。

  但是,不要在其他有返回值的函数中漏掉它。因此,强烈建议读者养成在 main()函数中保留 return 语句的好习惯。在这种情况下,可将其看作是统一代码风格。

  但对于某些操作系统(包括Linux和UNIX),return语句有实际的用途。第11章再详述这个主题。

简单程序的结构

在看过一个具体的程序示例后,我们来了解一下C程序的基本结构。

程序由一个或多个函数组成,必须有 main()函数。函数由函数头和函数体组成。

函数头包括函数名、传入该函数的信息类型和函数的返回类型。

 

int cat(size,color)
{
return 0;
}

 

  通过函数名后的圆括号可识别出函数,圆括号里可能为空,可能有参数。

  

 

函数体被花括号括起来,由一系列语句、声明组成,如图2.4所示。

本章的程序示例中有一条声明,声明了程序使用的变量名和类型。然后是一条赋值表达式语句,变量被赋给一个值。

 

市面上许多书籍(包括本书)都把这种语句叫作“函数调用语句”,但是历年的C标准中从来没有函数调用语句!

值得一提的是,函数调用本身是一个表达式,圆括号是运算符,圆括号左边的函数名是运算对象。在C11标准中,这样的表达式是一种后缀表达式。

在表达式末尾加上分号,就成了表达式语句。请初学者注意,这样的“函数调用语句”实质是表达式语句。本书的错误之处已在翻译过程中更正。

 

总结:历年的C标准中从来没有函数调用语句,函数调用本身是一个表达式。

(“%d is neat.\n”,q) 圆括号是运算符,圆括号左边的函数名,也就是printf,是运算对象。

在C11标准中,这样的表达式是一种后缀表达式。在表达式末尾加上分号,就成了表达式语句。"函数调用语句"实质是表达式语句。

 提高程序可读性的技巧

编写可读性高的程序是良好的编程习惯。可读性高的程序更容易理解,以后也更容易修改和更正。提高程序的可读性还有助于你理清编程思路。

前面介绍过两种提高程序可读性的技巧:选择有意义的函数名和写注释。

注意,使用这两种技巧时应相得益彰,避免重复啰嗦。如果变量名是width,就不必写注释说明该变量表示宽度但是如果变量名是video_routine_4,就要解释一下该变量名的含义

 

 提高程序可读性的第3个技巧是:在函数中用空行分隔概念上的多个部分。

例如,程序清单2.1中用空行把声明部分和程序的其他部分区分开来。C 语言并未规定一定要使用空行,但是多使用空行能提高程序的可读性。

提高程序可读性的第4个技巧是:每条语句各占一行。同样,这也不是C语言的要求。C语言的格式比较自由,可以把多条语句放在一行,也可以每条语句独占一行。下面的语句都没问题,但是不好看:

int main( void ) { int four; four
=
4
;
printf(
"%d\n",
four); return 0;}

  分号告诉编译器一条语句在哪里结束、下一条语句在哪里开始。如果按照本章示例的约定来编写代码(见图2.5),程序的逻辑会更清晰。

  

 

 

 

 

 

 

 

 

 

 

  

  

标签:语句,函数,int,C语言,手记,Plus,CPrimer,表达式,变量
来源: https://www.cnblogs.com/zxz1999/p/11556040.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有