补习C
来源:互联网 发布:log4j 写入数据库 mdc 编辑:程序博客网 时间:2024/05/17 04:24
前言:
C语言用过两年了,但并没有系统的看过参考文档,这段时间闲来无事,就系统地看了一边,对以前比较陌生的地方,在这里记下来,以供以后参考。
1、assert (assert.h)
这是一个宏,调试时使用,如果条件为假,则输出当前文件名和行号,然后退出程序。
#define NDEBUG#include <assert.h>取消debug功能
2、宏
宏是在一行上定义的,'\' 续行符可以形式上在多行上书写。所以__FILE__, __LINE__可以准确反映是在哪个文件的哪行。先进行宏展开,再进行编译。
#define DBG(msg) \ printf("%s[%s:%d]",msg,__FILE__,__LINE__)DBG("hello world"); //这行代码在哪一行,输出信息中就写着哪一行。3、errno
errno是一个局限于线程的全局的变量,当系统调用出错时,他们会设置此变量,表明是因为什么原因出错的。如果系统调用正常,不保证设置errno为0(success)。
strerror和perror函数可以得到errno变量的字符串描述
4、不咋使用的头文件
ciso646.h,提供了与,或,异或的别名,个人感觉还是符号比较清楚,所以这东西没必要使用。
limits.h定义了char,short,int,long有无符号的最大和最小值,但实际的值取决于系统和编译器,所以这头文件也没用。
setjmp.h,可以是面向过程的C语言,有跳来跳去的功能。这个东西会是我的思路不清晰,还是不要用了
5、setlocale
迄今仍然不会使用
6、stdarg.h
可变参数列表,很酷的功能,以前畏惧,不敢学,不会用。唉,当时的自己真差劲。
#include <cstdarg>#include <iostream>using namespace std;void f(int n,...){ //这只是个示例。最后一个命名变量应该包含可变变量数量,类型的信息。如printf va_list vl; va_start(vl,n); //宏,使vl和最后一个命名变量关联 int i = va_arg(vl,int); //根据变量类型(这里是int)做地址偏移,取出变量值 char *s = va_arg(vl,char*); cout << "int: " << i << endl << "char*:" << s << endl; va_end(vl); //宏嘛,配对的}int main(){ char str[] = "hello"; f(3,12345,str); return 0;}7、stdbool.h
C不支持bool类型,C99引入此头文件。此文件定义了一些宏,来支持bool运算。
#define true 1#define false 08、stddef.h
- size_t,以前很害怕这东西,撒吗。原来是表示数量的无符号整形。
- ptrdiff_t,这是表示两个指针差值的类型
- offsetof,一个宏,用于C中的sruct,可以得到成员在结构体中的便宜bytes。注:这能用于POD类型
- NULL,不用说了
9、stdio.h
- remove, rename可以删除或重命名,要有权限。
- FILE *tmpfile(void); 产生临时文件,当close文件或程序退出后,此文件会自动被删除。(w+b)
- tmpnam产生临时文件名,但不建议使用。请使用int mkstemp(char *template),参加stdlib
- fopen模式r,w,a,b,+; 如果有+,则要注意文件指针,fflush,fseek,fsetpos,rewind
- stderr,stdout,stdin是指向FILE类型的指针。
- freopen可以改变文件流打开模式,或将一个流重新关联到一个新的文件。
- setbuf,设定一块内存区域当做I/O缓冲区使用,如果为空,则编程unbuffered模式;fflush刷新缓冲区。
- vfprintf,格式化可变参数列表数据到文件中
char * gets ( char * str );
char * fgets ( char * str, int num, FILE * stream );
gets和fgets不一样,gets从stdin读数据,直到newline or the end-of-file reached,不保留newline符号。fgets可以指定输入流,str大小,且保留newline符号。相同点是两者都会在str结尾加入'\0'- getc和fgetc是一样子的,getc可能用宏实现
- fputs和puts是不一样的。fputs不会加newline符号,而puts会自动加入newline符号。
- getchar。为什么getc不默认从stdin读数据,因为getchar实现了这个功能。
- fseek和ftell设置和获得position indicator。通过这两个操作,可以获得文件大小。
- ferror可以检测对一个文件流的操作过程中,是否出现了错误。
- feof查看是否达到文件尾。
10、stdlib.h
- strtol。atoi的增强版本,支持错误指示,各种进制转换,8进制,16进制探测。相同的一个是strtoll,long long int型
char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff"; char * pEnd; long int li1, li2, li3, li4; li1 = strtol (szNumbers,&pEnd,10); li2 = strtol (pEnd,&pEnd,16); li3 = strtol (pEnd,&pEnd,2); li4 = strtol (pEnd,NULL,0); printf ("The decimal equivalents are: %ld, %ld, %ld and %ld.\n", li1, li2, li3, li4);
- rand和srand。 这两个之间的差别s,表示seed,种子。相同的种子可以产生相同的随机数序列。
- exit
- 线程存储变量被销毁(C11 only)
- 静态存储变量被销毁(C++),atexit注册函数被执行
- 文件被关闭。tmpfile被删除
- 控制权返还系统
- getevn得到环境变量。printf("PATH:%s\n",getenv("PATH"));
- qsort和bsearch。排序和搜索函数。
- strpbrk和strtok。相比来说,token用的比较多
参考:www.cpluscplus.com
- 补习C
- C补习
- C宏 补习
- C语言补习_day5
- C基础补习
- 补习-----C语言的深入学习
- 补习C语言之在.h文件中定义全局变量
- C语言补习知识点~华清远见上课笔记
- 补习Google
- JDBC补习
- 预处理补习
- ThreadLocal 补习
- C++补习
- 补习册
- 20170720补习
- Linux基础day6,c补习,删除字符串中指定字符串,考虑到删除后可能会产生新的子字符串
- VBScript函数补习课
- 补习基础知识(转载)
- C03-Java同步实践加强班第8周上机任务
- Play Framework 的两种不同的部署模式
- 宁夏从澳大利亚引进1.2万头良种奶牛(图)
- 利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法
- Mac下修改host文件
- 补习C
- js获取窗口的高度
- 如何在三个月掌握三年的经验-职场生活谈
- IIS中寄宿WCF
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- 多线程的生命周期
- Eclipse自动部署项目到Tomcat的webapps下的有效方法
- apache 不执行PHP,显示代码
- ORACLE 10046 Trace