前言:该文章原创,不仅针对新手还是老手,均有一定帮助。若有错误地方,请不惜赐教。主要结合《C与指针》这本书,后续看过《C专家编程》、《C语言的XXX个问题》等书后会继续补充。【非计算机类学生,目前更新进度缓慢】
编写代码前的注意:
①、编程风格影响代码的可读性,这像是一个人的脸,学习并保持良好的编程风格是我们应该做的。
②、代码不能正常编译可能不是代码的错误,也可能是编译器的错误,换个编译器试试看,而且要记住不同的编译器有着不同的编译方式。
③、注重C语言标准,比如C89、C99、C11等。
正文:
一、不要在注释符 /* ... */ 中再添加 /* ... */,即不允许嵌套(/* 会匹配下面离的最近的 */,而同时注释掉其中包含的所有的 /*),且要注意注释之间是否有不需要注释的有效代码。
另用
#if 0
statement
#endif
进行注释更加安全。(statement 为要注释的模块)
二、若以double型输入标量参数,最好请用float型输出。在出现编译结果为 0.000000 的时候,请考虑这条建议。
double a;
scanf("%lf",&a);
printf("%f",a);
三、scanf函数用 %s 格式码输入字符串时,中间不能包含空白,否则只有空白前面的内容有效;用puts函数输入时可以包含空白。
四、用scanf函数时,标量参数的前面必须加上"&"符号,如果是数组参数,则分两种情况:1、出现下标引用,即 a[i] 的时候,则需加"&"号。2、下标为纯数字,即 a[5] 的时候,可加可不加。
五、printf函数对参数的计算顺序是从右往左,函数参数计算顺序也是一样,而输出顺序是从左往右。
int a = 0;
printf("%d,%d,%d",++a,++a,++a);
六、for循环语句的三个表达式都是可选的。
for(表达式1;表达式2;表达式3){...}
七、"==" 与 "=" 不同,在if语句里千万要注意。还有"&&" 与 "&" 等也不同。
八、 "\ddd" ddd表示1~3个八进制数字。 "\xddd" ddd表示1~3个十六进制数字。
九、下面这组语句,前4条等价,第5条非法。
int a;
int
a;
int a;
int/*comment*/a;
非法:
inta;
十、C语言关键字,加上自定义头文件里的函数名不能用于标识符,标识符不能以纯数字开头。
auto | do | goto | signed | unsigned |
break | double | if | sizeof | void |
case | else | int | static | volatile |
char | enum | long | struct | while |
const | extern | register | switch | |
continue | float | return | typedef | |
default | for | short | union |
十一、在声明整形变量时,如果声明中有(unsigned signed short long等)至少一个说明符,关键字int可以省略。
short a; //等同于 short int a;
十二、声明指针:
int *a;
int* a; //两者相等。
但对于声明多个指针则推荐第一种方法。
十三、你应该使用typedef而不是#define来创建新的类型名,因为后者无法正确处理指针类型。
#defiine a_char char*;
a_char a, b;
//正确声明 a ,但 b 声明为字符。
十四、const 关键字声明常量:
int const a;
const int a;
//两者相等。
另对于指针:
int const *a;//一个指向整型常量的指针。可以修改指针的值,但不能修改它所指向的值。
int *const a;//一个指向整型的常量指针。指针的值不能修改,但可以修改它所指向的值。
int const *const a;//无论是指针本身的值还是所指向的值都不能修改。
十五、对于 goto语句,
1974年,D•E•克努斯对于goto语句争论作了全面公正的评述,其基本观点是:不加限制地使用goto语句,特别是使用往回跳的goto语句,会使程序结构难于理解,在这种情形,应尽量避免使用goto语句。但在另外一些情况下,为了提高程序的效率,同时又不致于破坏程序的良好结构,有控制地使用一些goto语句也是必要的。
本人认为在清理代码、返回错误、跳出多重循环的时候使用goto语句是很有效的,但从一个函数跳到另一个函数,或是重复回调,或是死循环里则不应该使用,多数情况下影响可读性则避免使用。
另死循环的体现:
1、while(1);
2、for(;;);
3、Loop:
...
goto Loop;
更新日志:
【2018/5/9】开始于5月9日晚编写于 -十-
【2018/5/10】下午编写于 -十五-