首页 > 代码库 > 标C编程笔记day08~day10代码规范、编译、库函数、命名空间、函数调用、哑元函数

标C编程笔记day08~day10代码规范、编译、库函数、命名空间、函数调用、哑元函数

代码编写规范,命令行编译,库函数简介,命名空间介绍,函数调用介绍,哑元函数介绍


一般来说,有.c实现文件,应该都要有.h头文件,.c文件中的所有函数都应该在.h文件中声明。

命令行编译方法:
1、gcc 后面带所有.c 文件 -o 输出文件名   直接生成可执行文件
2、依次gcc -c .c文件  -o ***.o  生成***.o文件
  然后 gcc 所有.o文件 -o 输出文件   生成可执行文件
程序中的静态全局变量不可以被其他文件中的语句使用。
.c文件使用.h文件中的全局变量:extern 变量类型 变量名;
.h文件应该用#ifdef……#define……#endif  包含,防止重复引用出问题 
经验:
结构体定义时,变量点字节越大的应该声明在最后面,减少空间浪费。

结构体中,student stu;student *pstu; 

取变量地址可直接用&(pstu->member),&stu.member,调用可使用 pstu->member,stu.member



堆内存的使用:
malloc分配的地址,不分局部和全局,如果没有被free,就能在其他地方使用。
calloc(sizeof(int),n);//分配 n个整数的空间
malloc(n*sizeof(int));//分配 n个整数的空间


排序库函数:qsort()   头文件:stdlib.h
qsort 的函数原型是void __cdecl qsort (void *base,size_tnum,size_t width,int (__cdecl *comp)(const void *,const void*))
参数1:数组名
参数2:元素个数
参数3:数据类型大小,如:sizeof(int)
参数:比较函数:
如:int comp(const void *a,const void *b)
   {
return strcmp(*(const char **)a,*(const char **)b);
   }
   int comp(const void* a,const void* b)
   {
return*(int*)a-*(int*)b;
   }
库函数使用:
atoi,atol,atoll,atof   --字符转换成数字   头文件:stdlib.h
char str[50]="123";int id=0;
sscantf(str,"%d",&id);//从字符串读到信息放入变量中
sprintf(str,"hello %d",123);//把变量的值输出到字符串
fscanf(FILE*,"%d",&id);//从文件输入到变量
fprintf(FILE*,"%d",id);//变量输出到文件


命名空间声明:
namespace ns1{
//代码,函数
void fun1(){}
}
//默认命名空间函数
void fun1(){}
调用:
如果是默认的命名空间,可直接调用 fun1();或::fun1();调用
ns1中的函数 ,可用 ns1::fun1(); 调用
重载:
和函数名、参数列表有关,和返回值无关(同一作用域,参数不同,函数名相同才能构成重载)
重载解析:安全匹配>常量转换>升级转换>标准转换>自定义转换>省略号匹配
不同命名空间的同名函数,在作用域内可见时,可构成重载,但不一定是重载。


查看 .o文件中的模块:
nm ***.o
c++和c函数的区别:
c编译器生成的函数名不变,c++编译器生成的函数名会变化(c++换名原则),如果是C++调用c的函数,通过在 声明函数前加 exterm "C" [函数声明]  ,可防止c++在调用时改名,c中不支持重载。
函数在定义时,可指定参数的默认值,或者在声明时可带默认参数。

哑无函数的定义:有参数类型,无参数变量,传任何参数值对函数调用的结果无影响,只是为了重载。