首页 > 代码库 > 标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中不支持重载。
函数在定义时,可指定参数的默认值,或者在声明时可带默认参数。
哑无函数的定义:有参数类型,无参数变量,传任何参数值对函数调用的结果无影响,只是为了重载。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。