一、编程习惯
头文件包含完整
stdio.h:fopen/fwrite/fread/fprintf/printf/scanf等
stdlib.h:strtol/atoi/malloc/free/rand/abs等
string.h:memcpy/memset/strcpy/strlen/strncpy等
编译调试时使用-Wall显示所有错误
gcc编译会出现将error报成warning的情况,造成程序执行异常,可以再调试的时候使用-Wall来查看所有警告。
gcc a.c -Wall
习惯以函数为单位解决问题
如实现加减乘除四个功能,分为四个功能函数,需要的时候去调用,增加复用性。
声明部分和实现部分区别开
注释注释注释
/* 程序说明 */
//小注释
#if 0
void example(void)
{
//大段函数注释
}
#endif
二、零散知识点
return 0与exit(0)
return返回函数值,是关键字; exit 是一个函数。
return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
return是函数的退出(返回);exit是进程的退出。
二者在单进程单线程中无区别,返回值是给父进程看,如在linux中创建.c程序其父进程就是shell;没有return时,看语句如最后一句如下的话,使用echo $?语句可以看到程序返回值为13。
printf("Hello world!\n"); \\13个字符
inline内联函数
c++中的函数类型,与c中的宏定义相似,一般在h文件中定义,在调用的时候展开,以空间换时间。内联函数与宏:
宏函数的优点:
1.没有函数栈帧的开销,效率提升。
宏函数的缺点:
1.宏替换在预处理阶段完成,不能调试。
2.可读性差,不易维护,容易误用
没有类型安全的检查
sizeof和strlen
sizeof用于返回运算对象的内存大小,单位是字节,若制定数组大小为20,则sizeof固定为20。
strlen函数求得的字符串长度是从字符串第一个元素到第一个'\0'之间元素的个数(如果字符串中间有'\0',则结果不是整个字符串的长度),同时不包括该'\0'
int main(void)
{
int size,len;
char array[] = "Hello";
size = sizeof(array);
len = strlen(array);
printf("Size of array is: %d\n", size);
printf("strlen of array is: %d\n", len);
exit(0);
}
Size of array is: 6
strlen of array is: 5