自我记录:C语言编写代码可能发生的问题与注意事项【陆续补充】

前言:该文章原创,不仅针对新手还是老手,均有一定帮助。若有错误地方,请不惜赐教。主要结合《C与指针》这本书,后续看过《C专家编程》、《C语言的XXX个问题》等书后会继续补充。【非计算机类学生,目前更新进度缓慢】


编写代码前的注意

①、编程风格影响代码的可读性,这像是一个人的脸,学习并保持良好的编程风格是我们应该做的。

②、代码不能正常编译可能不是代码的错误,也可能是编译器的错误,换个编译器试试看,而且要记住不同的编译器有着不同的编译方式。

③、注重C语言标准,比如C89C99C11等。


正文:

、不要在注释符 /* ... */ 中再添加 /* ... */,即不允许嵌套(/* 会匹配下面离的最近的 */,而同时注释掉其中包含的所有的 /*),且要注意注释之间是否有不需要注释的有效代码。

另用

#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语言关键字,加上自定义头文件里的函数名不能用于标识符,标识符不能以纯数字开头。

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】下午编写于 -十五-

猜你喜欢

转载自blog.csdn.net/Higashino_Keigo/article/details/80257815