├── C language ├── C语言函数库详解.docx ├── C语言深度解剖 │ ├── C语言深度解剖(第2版)解开程序员面试笔试的秘密 PDF电子书下载 带书签目录 完整版.pdf │ ├── C语言深度解剖(自己注释).pdf │ ├── 冷知识(可用于面试) │ │ ├── 1、signed 和 unsigned.txt │ │ ├── 2、void指针.txt │ │ ├── 3、volatile中的使用.txt │ │ ├── 4、空结构体有多大?.txt │ │ ├── 5、柔性数组.txt │ │ ├── 6、贪心法.txt │ │ └── 7、预处理.txt │ ├── 目录.txt │ └── 计算机网络(谢希仁第五版).pdf ├── LinuxC冷知识 │ ├── .a和.o文件.txt │ ├── .bin和,elf.txt │ ├── Linux文件夹下各种目录.docx │ ├── Sleep和sleep函数.txt │ ├── close(1)和输出到文件中.txt │ ├── dup()和dup2().txt │ ├── gdb使用.docx │ ├── linux命令 │ │ ├── Linux命令--pushd和popd.md │ │ ├── arm-linux-readelf.txt │ │ ├── basename命令.txt │ │ ├── cat命令.txt │ │ ├── chmod命令.txt │ │ ├── cp -d命令.txt │ │ ├── df -h.txt │ │ ├── dmesg命令.txt │ │ ├── dos2unix.txt │ │ ├── echo命令.txt │ │ ├── find命令.txt │ │ ├── grep命令.txt │ │ ├── mknod命令.txt │ │ ├── more.txt │ │ ├── mount命令.txt │ │ ├── ps命令.txt │ │ ├── read命令.txt │ │ ├── sed命令.txt │ │ ├── shell if命令.txt │ │ ├── tail命令.txt │ │ ├── tar命令.txt │ │ ├── uname命令.txt │ │ └── 各种符号.docx │ ├── linux定义的64种信号量.txt │ ├── man手册.txt │ ├── mmap函数.docx │ ├── perror和strerr的区别.txt │ ├── 二叉树.docx │ ├── 内存管理.rtf │ ├── 如何将vim和系统剪切板中文本互相复制粘贴.txt │ ├── 守护进程.docx │ ├── 快速定位.txt │ ├── 文件权限.docx │ ├── 标准输入输出.txt │ ├── 正则表达式.txt │ ├── 行缓冲和全缓冲.txt │ ├── 软链接和硬链接.txt │ └── 进程组和会话期.docx └── 冷知识 │ ├── #include的区别.txt │ ├── %02x.txt │ ├── 0x 0b.txt │ ├── C与汇编的混合编程.txt │ ├── C和C++混合编程.txt │ ├── DEBUG宏定义.txt │ ├── E-R图.txt │ ├── EOF语句.txt │ ├── INT_MAX和INT_MIN.txt │ ├── MSB和LSB.txt │ ├── UL宏定义.txt │ ├── UTF-8.txt │ ├── __stdcall、__cdcel和__fastcall三者的区别.txt │ ├── a[-1].txt │ ├── ascLii码表.txt │ ├── assert函数.txt │ ├── code dump.docx │ ├── const用法.txt │ ├── c语言三个点啥意思.md │ ├── do{}while(0)的作用.txt │ ├── exit(0)和exit(-1)的区别.txt │ ├── int main(int argc, char argv[])详解.txt │ ├── push函数和pop函数.md │ ├── size_t和int区别.txt │ ├── sizeof.txt │ ├── srand(time(NULL));.txt │ ├── structure │ ├── 双向链表.tif │ ├── 栈.tif │ └── 队列2.tif │ ├── switch.md │ ├── typedef用法.txt │ ├── va_list函数如何实现不定参数.txt │ ├── volatile关键字.txt │ ├── 一些运算公式.txt │ ├── 不用额外的变量交换同类型的变量.txt │ ├── 优先级.txt │ ├── 位域.txt │ ├── 位运算符.txt │ ├── 八进制.txt │ ├── 内存 │ ├── 内存分布.jpg │ ├── 内存分配.txt │ └── 内存对齐.txt │ ├── 几种编码方式的区别.txt │ ├── 函数 │ ├── getopt1.png │ ├── getopt2.png │ ├── getopt函数.md │ ├── inline函数.txt │ ├── malloc函数.txt │ ├── mmap函数.docx │ └── 函数调用原理 │ │ ├── 函数传递参数的原理.txt │ │ └── 函数调用过程.rtf │ ├── 卫语句.md │ ├── 原码补码反码.txt │ ├── 反斜杠r和反斜杠n的区别.txt │ ├── 变量取值范围.txt │ ├── 变量名命名规则.txt │ ├── 只读变量和常量.txt │ ├── 可变参数的c函数.txt │ ├── 声明一个返回数组指针的函数.txt │ ├── 声明与定义.txt │ ├── 大小端.txt │ ├── 字符和字符串 │ ├── getchar和putchar.rtf │ ├── getchar和scanf.rtf │ ├── gets和getchar.rtf │ ├── lh │ │ └── lh.cpp │ ├── snprintf()函数.txt │ ├── strcmp.txt │ ├── strcpy_s函数.txt │ ├── string.txt │ ├── 字符串处理函数 │ │ ├── sprintf.txt │ │ ├── sscanf函数.txt │ │ ├── strcat.c │ │ ├── strcpy.c │ │ ├── strcpy函数用法.txt │ │ ├── strncpy.c │ │ ├── strstr.c │ │ └── strstr函数.txt │ └── 字符和字符串.txt │ ├── 宏定义 │ ├── #define和typedef的区别.txt │ ├── #endif.txt │ ├── #ifdef.txt │ ├── #ifndef.txt │ ├── #和##的用法.txt │ ├── C语言中##__VA_ARGS__宏.txt │ ├── DEBUG宏定义.txt │ ├── __ATTRIBUTE__ .c │ ├── __ATTRIBUTE__ .txt │ ├── __attribute__.md │ ├── __attribute__.txt │ ├── __function__函数.txt │ ├── __line__和__FILE__.txt │ ├── 枚举和#define.txt │ └── 预处理.txt │ ├── 小端模式和大端模式.txt │ ├── 局部变量保存在栈中.docx │ ├── 局部静态变量,全局静态变量.txt │ ├── 常用转义字符.txt │ ├── 强符号与弱符号.md │ ├── 悬挂指针.docx │ ├── 悬挂指针.txt │ ├── 指针冷知识 │ ├── NULL指针内存.txt │ ├── a和&a.txt │ ├── int p.txt │ ├── 二维数组与指针.rtf │ ├── 函数指针 │ │ ├── void fun().txt │ │ └── 函数指针.txt │ ├── 地址的强制转换.txt │ ├── 指针与数组的定义与声明.txt │ ├── 指针数组和数组指针.txt │ ├── 指针面试题.txt │ ├── 数组的内存布局.txt │ └── 能否向函数传递一个数组.txt │ ├── 排序 │ ├── 冒泡排序的优缺点.txt │ ├── 希尔排序.jpg │ ├── 希尔排序.rtf │ ├── 归并排序.rtf │ ├── 快速排序.rtf │ ├── 直接插入排序.rtf │ └── 选择排序.rtf │ ├── 接续符.txt │ ├── 斜杠b的转义字符.txt │ ├── 无符号和有符号.txt │ ├── 无返回值return.txt │ ├── 时间复杂度.txt │ ├── 柔性数组.txt │ ├── 标识符.txt │ ├── 符号表.docx │ ├── 类型转换.txt │ ├── 线性结构和非线性结构的区别.txt │ ├── 编译和链接 │ ├── ELF文件结构描述.md │ ├── README.md │ ├── c编译、汇编、链接、加载.rtf │ ├── gdb编译器的使用.docx │ ├── 动态库和静态库的那些事.docx │ ├── 符号.txt │ ├── 符号表.docx │ ├── 调试信息.docx │ ├── 链接器的作用.md │ └── 预处理的过程.txt │ ├── 贪心法.txt │ ├── 赋值.txt │ ├── 静态函数的作用.txt │ └── !和~的区别.txt └── README.txt /C language/C语言函数库详解.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/C语言函数库详解.docx -------------------------------------------------------------------------------- /C language/C语言深度解剖/C语言深度解剖(第2版)解开程序员面试笔试的秘密 PDF电子书下载 带书签目录 完整版.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/C语言深度解剖/C语言深度解剖(第2版)解开程序员面试笔试的秘密 PDF电子书下载 带书签目录 完整版.pdf -------------------------------------------------------------------------------- /C language/C语言深度解剖/C语言深度解剖(自己注释).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/C语言深度解剖/C语言深度解剖(自己注释).pdf -------------------------------------------------------------------------------- /C language/C语言深度解剖/冷知识(可用于面试)/1、signed 和 unsigned.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/C语言深度解剖/冷知识(可用于面试)/1、signed 和 unsigned.txt -------------------------------------------------------------------------------- /C language/C语言深度解剖/冷知识(可用于面试)/2、void指针.txt: -------------------------------------------------------------------------------- 1 | void 指针 2 | 3 | 4 | void *pvoid; 5 | pvoid++; //这样是错误的; 6 | pvoid+=1; //这样是错误的; 7 | 按照ANSI标准, 不能对void指针进行算法操作; 8 | 9 | 而按照GNU标准, 则不这么认定的; 10 | pvoid++; //GNU:正确 11 | pvoid += 1; //GNU:正确 12 | 13 | 在实际的程序设计中,为符合 ANSI 标准,并提高程序的可移植性,我们可以这样编写 14 | 实现同样功能的代码: 15 | void * pvoid; 16 | (char *)pvoid++; //ANSI:正确; GNU:正确 17 | (char *)pvoid += 1; //ANSI:错误; GNU:正确 -------------------------------------------------------------------------------- /C language/C语言深度解剖/冷知识(可用于面试)/3、volatile中的使用.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/C语言深度解剖/冷知识(可用于面试)/3、volatile中的使用.txt -------------------------------------------------------------------------------- /C language/C语言深度解剖/冷知识(可用于面试)/4、空结构体有多大?.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/C语言深度解剖/冷知识(可用于面试)/4、空结构体有多大?.txt -------------------------------------------------------------------------------- /C language/C语言深度解剖/冷知识(可用于面试)/5、柔性数组.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/C语言深度解剖/冷知识(可用于面试)/5、柔性数组.txt -------------------------------------------------------------------------------- /C language/C语言深度解剖/冷知识(可用于面试)/6、贪心法.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/C语言深度解剖/冷知识(可用于面试)/6、贪心法.txt -------------------------------------------------------------------------------- /C language/C语言深度解剖/冷知识(可用于面试)/7、预处理.txt: -------------------------------------------------------------------------------- 1 | 预处理 2 | #error 3 | 示例: 4 | #include 5 | #define SIZE 100 6 | int main() 7 | { 8 | // int SIZE = 100; 9 | #if SIZE<1 || SIZE<100 10 | #error ("SIZE must be between 1 and 200") 11 | #endif 12 | return 0; 13 | } 14 | 15 | 16 | #line处理 17 | #include "stdio.h" 18 | void Test(); 19 | #line 10 "Hello.c" 20 | int main(int argc, char* argv[]) 21 | { 22 | #define CONST_NAME1 "CONST_NAME1" 23 | printf("%s/n",CONST_NAME1); 24 | #undef CONST_NAME1 25 | printf("%s/n",CONST_NAME1); 26 | { 27 | #define CONST_NAME2 "CONST_NAME2" 28 | printf("%s/n",CONST_NAME2); 29 | } 30 | printf("%s/n",CONST_NAME2); 31 | return 0; 32 | } 33 | void Test() 34 | { 35 | printf("%s/n",CONST_NAME2); 36 | } 37 | 提示如下的编译信息: 38 | Hello.c(15) : error C2065: 'CONST_NAME1' : undeclared identifier 39 | 表示当前文件的名称被认为是Hello.c, #line 10 "Hello.c"所在的下一行被认为是第10行,因此提示第15行出错。 40 | 41 | 42 | #pragma预处理 43 | 44 | #pragma once 45 | 46 | 一般用于头文件开始,预编译时,只插入一次此头文件。 47 | 例如 头文件 "grandfather.h" 48 | #pragma once 49 | #ifndef GRANDFATHER_H 50 | #define GRANDFATHER_H 51 | struct foo 52 | { 53 | int member; 54 | }; 55 | #endif /* GRANDFATHER_H */ 56 | 当这段程序多次被include ( 多文件编译,相互include时会遇到),只插入和编译一次。 57 | #pragma once 的编译速度 比 #ifndef GRANDFATHER_H #define GRANDFATHER_H ..快, 58 | 所以往往 全用。 59 | 60 | 与#ifndef #define的区别可见:http://www.cppblog.com/cxiaojia/archive/2013/03/18/198526.html 61 | 62 | 63 | #pragma comment 64 | #pragma comment(...) 65 | 该指令将一个注释记录放入一个对象文件或可执行文件中。 66 | 常用于链接一个动态库,如 67 | #pragma comment(lib, "user32.lib"); 68 | 也有linker:将一个链接选项放入目标文件中,你可以使用这个指令来代替由命令行传入的或者在开发环境中设置的链接选项来强制包含某个对象,例如: 69 | #pragma comment(linker, "/include:_mySymbol") 70 | 71 | 72 | #pragma code_seg 73 | void func1() { // 默认存储在代码段.text中 74 | } 75 | 76 | #pragma code_seg(".my_data1") 77 | 78 | void func2() { // 存储在代码段.my_data1中 79 | } 80 | 81 | #pragma code_seg(push, r1, ".my_data2") 82 | 83 | void func3() { // 存储在代码段.my_data2中 84 | } 85 | 86 | #pragma code_seg(pop, r1) 87 | 88 | void func4() { // 存储在代码段.my_data1中 89 | } 90 | 它能够设置程序中函数代码存放的代码段,当我们开发驱动程序的时候就会使用到它。 91 | 92 | 93 | #pragma hdrstop 94 | 95 | #pragma hdrstop 表示预编译头文件到此为止,后面的头文件不进行预编译。 BCB 可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘空间,所以使用这个选项排除一些头文件。 96 | 97 |   98 | 99 | #pragma warning 100 | 101 | #pragma warning( disable : 4507 34; once : 4385; error : 164 ) 102 | 等价于: 103 | #pragma warning(disable:4507 34) // 不显示 4507 和 34 号警告信息 104 | #pragma warning(once:4385) // 4385 号警告信息仅报告一次 105 | #pragma warning(error:164) // 把 164 号警告信息作为一个错误。 106 | 同时这个 pragma warning 也支持如下格式: 107 | #pragma warning( push [ ,n ] ) 108 | #pragma warning( pop ) 109 | 这里 n 代表一个警告等级(1---4)。 110 | #pragma warning( push )保存所有警告信息的现有的警告状态。 111 | #pragma warning( push, n)保存所有警告信息的现有的警告状态,并且把全局警告 112 | 等级设定为 n。 113 | #pragma warning( pop )向栈中弹出最后一个警告信息,在入栈和出栈之间所作的 114 | 一切改动取消。例如: 115 | #pragma warning( push ) 116 | #pragma warning( disable : 4705 ) 117 | #pragma warning( disable : 4706 ) 118 | #pragma warning( disable : 4707 ) 119 | //....... 120 | #pragma warning( pop ) 121 | 在这段代码的最后,重新保存所有的警告信息(包括 4705, 4706 和 4707)。 -------------------------------------------------------------------------------- /C language/C语言深度解剖/目录.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/C语言深度解剖/目录.txt -------------------------------------------------------------------------------- /C language/C语言深度解剖/计算机网络(谢希仁第五版).pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/C语言深度解剖/计算机网络(谢希仁第五版).pdf -------------------------------------------------------------------------------- /C language/LinuxC冷知识/.a和.o文件.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/.a和.o文件.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/.bin和,elf.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/.bin和,elf.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/Linux文件夹下各种目录.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/Linux文件夹下各种目录.docx -------------------------------------------------------------------------------- /C language/LinuxC冷知识/Sleep和sleep函数.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/Sleep和sleep函数.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/close(1)和输出到文件中.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/close(1)和输出到文件中.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/dup()和dup2().txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/dup()和dup2().txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/gdb使用.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/gdb使用.docx -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/Linux命令--pushd和popd.md: -------------------------------------------------------------------------------- 1 | Linux有三个关于目录切换的常用命令,分别是cd,pushd,popd。cd大家再熟悉不过了,今天学习了一下pushd的使用。 2 | 3 | cd用于切换工作目录,但是如果你在两个目录之间需要频繁切换时,比如/etc/httpd/log/error和/home/testUser/Desktop/shell_test,那这样一直 cd cd会发疯的。所以pushd在此时是个好选择。 4 | 5 | 6 | pushd的 功能是创建一个目录栈,你可以把你目前常见的几个目录压入栈中,并可以迅速地进行切换,非常方便。如: 7 | 8 | 9 | ``` 10 | [root@localhost etc]# pushd ~/Desktop/shell_test/ 11 | ~/Desktop/shell_test /etc 12 | [root@localhost shell_test]# 13 | ``` 14 | 15 | 可以看到我本来的工作目录是/etc,执行pushd ~/Desktop/shell_test/后将 ~/Desktop/shell_test/路径压入栈中,得到返回值。而且当前目录也跳转了。 16 | 17 | 此时,再输入pushd会将栈顶目录和下一目录对调。即: 18 | 19 | 20 | ``` 21 | [root@localhost shell_test]# pushd 22 | /etc ~/Desktop/shell_test 23 | [root@localhost etc]# 24 | ``` 25 | 26 | 27 | 可以看到此时栈顶目录又变为/etc 28 | 29 | 至于popd,作用则是与pushd相反,将栈顶的目录弹出,此时除非再一次使用pushd压栈,否则pushd无法再找到已弹出的目录。 30 | 31 | 32 | ``` 33 | 34 | [root@localhost etc]# popd 35 | ~/Desktop/shell_test 36 | [root@localhost shell_test]# 37 | ----- 38 | #popd [+N|-N]还可以指定目录栈的哪个目录优先出栈 39 | ``` 40 | 41 | 42 | 建议:在使用pushd时,最好是在三两个目录频繁切换的场景下,否则目录栈变得过多就失去了pushd的优势了。 43 | 44 | 当然,在两个目录进行切换时,”cd -” 是一个不错的命令 45 | 46 | ### 如何在多个目录之间切换? 47 | 48 | 用 pushd +n即可 49 | 50 | 说明: 51 | 52 | - n是一个数字,有此参数时,是切换到堆栈中的第n个目录,并把此目录以堆栈循环的方式推到堆栈的顶部 需要注意: 堆栈从第0个开始数起 53 | 54 | 55 | 56 | ``` 57 | ~/Hi3559A/work/REMO_HI3559AV100_SDK/Hi3559AV100_Remo_SDK ~/Hi3559A/work/REMO_HI3559AV100_SDK ~/Hi3559A/work/REMO_HI3559AV100_SDK/Hi3559AV100_SDK_V2.0.1.0/osdrv 58 | ``` 59 | 60 | 第一个为2的数字,第二个为1的数字,第三个为0的数字 -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/arm-linux-readelf.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/arm-linux-readelf.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/basename命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/basename命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/cat命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/cat命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/chmod命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/chmod命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/cp -d命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/cp -d命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/df -h.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/df -h.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/dmesg命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/dmesg命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/dos2unix.txt: -------------------------------------------------------------------------------- 1 | 在windows操作系统中,dos换行符是CR与LF两个符号,则仅有LF($),可以使用dos2unix命令 -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/echo命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/echo命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/find命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/find命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/grep命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/grep命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/mknod命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/mknod命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/more.txt: -------------------------------------------------------------------------------- 1 | more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。 2 | more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。 3 | 该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:--More--(XX%)可以用下列 4 | 不同的方法对提示做出回答: 5 | 6 | 7 | 8 | 按Space键:显示文本的下一屏内容。 9 | 10 | 按Enier键:只显示文本的下一行内容。 11 | 12 | 按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。 13 | 14 | 按H键:显示帮助屏,该屏上有相关的帮助信息。 15 | 16 | 按B键:显示上一屏内容。 17 | 18 | 按Q键:退出rnore命令 19 | 20 | 来自: http://man.linuxde.net/more -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/mount命令.txt: -------------------------------------------------------------------------------- 1 | 挂接命令(mount) 2 | 3 |   首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的。 4 | 5 |   命令格式: 6 | 7 |   mount [-t vfstype] [-o options] device dir 8 | 9 |   其中: 10 | 11 |   1.-t vfstype 指定文件系统的类型,通常不必指定。mount 会自动选择正确的类型。常用类型有: 12 | 13 |   光盘或光盘镜像:iso9660 14 | 15 |   DOS fat16文件系统:msdos 16 | 17 |   Windows 9x fat32文件系统:vfat 18 | 19 |   Windows NT ntfs文件系统:ntfs 20 | 21 |   Mount Windows文件网络共享:smbfs 22 | 23 |   UNIX(LINUX) 文件网络共享:nfs 24 | 25 |   2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有: 26 | 27 |   loop:用来把一个文件当成硬盘分区挂接上系统 28 | 29 |   ro:采用只读方式挂接设备 30 | 31 |   rw:采用读写方式挂接设备 32 | 33 |   iocharset:指定访问文件系统所用字符集 34 | 35 |   3.device 要挂接(mount)的设备。 36 | 37 |   4.dir设备在系统上的挂接点(mount point)。 38 | 39 | 更加详细具体的用法,可以参看man mount 40 | 41 | -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/ps命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/ps命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/read命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/read命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/sed命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/sed命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/shell if命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/shell if命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/tail命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/tail命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/tar命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/tar命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/uname命令.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/uname命令.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux命令/各种符号.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux命令/各种符号.docx -------------------------------------------------------------------------------- /C language/LinuxC冷知识/linux定义的64种信号量.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/linux定义的64种信号量.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/man手册.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/man手册.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/mmap函数.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/mmap函数.docx -------------------------------------------------------------------------------- /C language/LinuxC冷知识/perror和strerr的区别.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/perror和strerr的区别.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/二叉树.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/二叉树.docx -------------------------------------------------------------------------------- /C language/LinuxC冷知识/如何将vim和系统剪切板中文本互相复制粘贴.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/如何将vim和系统剪切板中文本互相复制粘贴.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/守护进程.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/守护进程.docx -------------------------------------------------------------------------------- /C language/LinuxC冷知识/快速定位.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/快速定位.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/文件权限.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/文件权限.docx -------------------------------------------------------------------------------- /C language/LinuxC冷知识/标准输入输出.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/标准输入输出.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/正则表达式.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/正则表达式.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/行缓冲和全缓冲.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/行缓冲和全缓冲.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/软链接和硬链接.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/软链接和硬链接.txt -------------------------------------------------------------------------------- /C language/LinuxC冷知识/进程组和会话期.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/LinuxC冷知识/进程组和会话期.docx -------------------------------------------------------------------------------- /C language/冷知识/#include的区别.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/#include的区别.txt -------------------------------------------------------------------------------- /C language/冷知识/%02x.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/%02x.txt -------------------------------------------------------------------------------- /C language/冷知识/0x 0b.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/0x 0b.txt -------------------------------------------------------------------------------- /C language/冷知识/C与汇编的混合编程.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/C与汇编的混合编程.txt -------------------------------------------------------------------------------- /C language/冷知识/C和C++混合编程.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/C和C++混合编程.txt -------------------------------------------------------------------------------- /C language/冷知识/DEBUG宏定义.txt: -------------------------------------------------------------------------------- 1 | http://www.cnblogs.com/lixiaohui-ambition/archive/2012/08/21/2649052.html 2 | 3 | 我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的 时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了 调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。 4 | 比如,定义一个宏开关: 5 | #define __DEBUG 6 | 当需要调试的时候,使用语句: 7 | #ifdef __DEBUG 8 | printf(xxx); 9 | #endif 10 | 这种方式的调试,可以通过undef __DEBUG的方式让告知编译器不编译这些语句,从而不再输出这些语句。但是这种方式的麻烦之处也是显而易见的,每一条调试语句都需要使用两条宏定义来包围,这不但在代码的编写上不便,源码结构也不好看,工作量依然不小。 11 | 如果我们能够把这三条语句编程一条,那该多舒服呀~,于是,我们想到使用这样的语句: 12 | #ifdef __DEBUG 13 | #define DEBUG(info) printf(info) 14 | #else 15 | #define DEBUG(info) 16 | #endif 17 | 这样,我们在编写代码的时候,使用DEBUG一条语句就可以了,我们把宏开关__DEBUG打开,所有的DEBUG(info)宏定义信息都会被替换为 printf(info),关上则会被替换成空,因此不会被编译。嗯,这次方便多了,一条语句就可以了~~~ 但是,问题也随之而来了,printf是支持多个参数的,而且是不定参数,当你使用下面这样的语句时就会报错: 18 | DEBUG("%s",msg) 19 | 这是因为,DEBUG(info)这条宏定义只支持一个参数的替换。 20 | 因此,我们希望DEBUG能够像printf那样,支持多个参数,并且这些参数刚好展开成为printf语句本身使用的参数,譬如:我们希望DEBUG("%s",msg)能够展开为printf("%s",msg) 21 | 正文: 22 | 通过网上的资料查阅,发现自C99规范以后,编译器就开始支持不定参数的宏定义,就像printf一样。 23 | 大家可以看看这篇文章:http://blog.csdn.net/aobai219/archive/2010/12/22/6092292.aspx 24 | (这个链接也转的,我已经找不到原始作者到底是谁了,唉,互联网啊。。。) 25 | 于是,我们定义了一个这样的东东: 26 | #define DEBUG(format, ...) printf (format, ##__VA_ARGS__)(' ## '的意思是,如果可变参数被忽略或为空,将使预处理器( preprocessor )去除掉它前面的那个逗号。) 27 | 于是乎,我们神奇地发现,DEBUG完全取代了printf,所有的DEBUG(…)都被完成的替换成了printf(…),再也不会因那个可恶的逗号而烦恼了。 28 | 但是,我们发现,光有printf还不够,虽然调试信息是输出了,可是很多的调试信息输出,我们并不能一下子知道这条信息到底是在那里打印出来的,于是, 我们又想,能不能把当前所在文件名和源码行位置也打印出来呢,这样不就一目了然了吗,哪里还用的着去想,去找调试信息在哪里输出的呢,都已经打印出来了! 29 | 于是我们就有了下面的故事。。。 30 | 编译器内置宏: 31 | 先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。 32 | ANSI C标准中有几个标准预定义宏(也是常用的): 33 | __LINE__:在源代码中插入当前源代码行号; 34 | __FILE__:在源文件中插入当前源文件名; 35 | __DATE__:在源文件中插入当前的编译日期 36 | __TIME__:在源文件中插入当前编译时间; 37 | __STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1; 38 | __cplusplus:当编写C++程序时该标识符被定义。 39 | 编译器在进行源码编译的时候,会自动将这些宏替换为相应内容。 40 | 看到这里,你的眼睛应该一亮了吧,嗯,是的,__FILE__和__LINE__正是我们前面想要的输出的,于是,我们的每一条语句都变成了: 41 | DEBUG("FILE: %s, LINE: %d…",__FILE__,__LINE__,…) 42 | 其实没有必要,__FILE__本身就会被编译器置换为字符常量,于是乎我们的语句又变成了这样: 43 | DEBUG("FILE:"__FILE__", LINE: %d…",__LINE__,…) 44 | 但是,我们还是不满足,依然发现,还是很讨厌,为什么每条语句都要写"FILE:"__FILE__", LINE: %d 以及,__LINE,这两个部分呢?这不是浪费我们时间么? 45 | 哈哈,是的,这就是本次大结局,把DEBUG写成这样: 46 | DEBUG(format,...) printf("FILE: "__FILE__", LINE: %d: "format"/n", __LINE__, ##__VA_ARGS__) 47 | 没错,就是这样!下面,所有的DEBUG信息都会按照这样的方式输出: 48 | FILE: xxx, LINE: xxx, ……. -------------------------------------------------------------------------------- /C language/冷知识/E-R图.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/E-R图.txt -------------------------------------------------------------------------------- /C language/冷知识/EOF语句.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/EOF语句.txt -------------------------------------------------------------------------------- /C language/冷知识/INT_MAX和INT_MIN.txt: -------------------------------------------------------------------------------- 1 | INT_MIN在标准头文件limits.h中定义。 2 | 3 | #define INT_MAX 2147483647 4 | #define INT_MIN (-INT_MAX - 1) 5 | 6 | 在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限, 7 | 所以定义为(-INT_MAX -1)。 8 | 9 | C中int类型是32位的,范围是-2147483648到2147483647 。 10 | (1)最轻微的上溢是INT_MAX + 1 :结果是 INT_MIN; 11 | (2)最严重的上溢是INT_MAX + INT_MAX :结果是-2; 12 | (3)最轻微的下溢是INT_MIN - 1:结果是是INT_MAX; 13 | (4)最严重的下溢是INT_MIN + INT_MIN:结果是0 。 14 | 15 | -------------------------------------------------------------------------------- /C language/冷知识/MSB和LSB.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/MSB和LSB.txt -------------------------------------------------------------------------------- /C language/冷知识/UL宏定义.txt: -------------------------------------------------------------------------------- 1 | C语言中UL的意思 2 | 3 | C语言中有一些宏定义使用到”UL“这个东西是说明是unsigned long 4 | 整常数缺省类型应该是integer。如果本意就是integer类型的话,自然不用加ul。 5 | example 6 | 7 | 8 | #define SECOND 10UL 9 | 10 | 如果不加UL的话说明缺省值是int 假如不是用int 的话就要更改成为自己的类型,故在后面加上UL代表的就是unsigned long的类型。 -------------------------------------------------------------------------------- /C language/冷知识/UTF-8.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/UTF-8.txt -------------------------------------------------------------------------------- /C language/冷知识/__stdcall、__cdcel和__fastcall三者的区别.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/__stdcall、__cdcel和__fastcall三者的区别.txt -------------------------------------------------------------------------------- /C language/冷知识/a[-1].txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/a[-1].txt -------------------------------------------------------------------------------- /C language/冷知识/ascLii码表.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/ascLii码表.txt -------------------------------------------------------------------------------- /C language/冷知识/assert函数.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/assert函数.txt -------------------------------------------------------------------------------- /C language/冷知识/code dump.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/code dump.docx -------------------------------------------------------------------------------- /C language/冷知识/const用法.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/const用法.txt -------------------------------------------------------------------------------- /C language/冷知识/c语言三个点啥意思.md: -------------------------------------------------------------------------------- 1 | C语言三个点...表示什么意思 2 | 3 | 1. 可变参数 4 | 2. 数组批量赋相同值 5 | 3. 一种数组赋值方法 6 | 7 | 8 | ## 1,可变参数 9 | 当参数个数可变的时候会使用三个点来表示,比如内核中的printk的定义: 10 | 11 | 12 | ``` 13 | static inline int printk(const char *fmt, ...) 14 | ``` 15 | 16 | 17 | ## 2.数组批量赋相同值 18 | 比如指定从某个下标到另外一个下标初始化为同一个值,比如 19 | 20 | 21 | ``` 22 | 1 23 | 2 #include 24 | 3 25 | 4 int main(){ 26 | 5 int table[7]={ 27 | 6 [3 ... 6]=7, 28 | 7 }; 29 | 8 int i = 0; 30 | 9 for(i=0;i<7;i++) 31 | 10 { 32 | 11 printf("table[%d]=%d\n",i,table[i]); 33 | 12 } 34 | 13 } 35 | 36 | ``` 37 | 这里表示数组table 下标从3 开始到6的元素赋值为7. 如下: 38 | 39 | 40 | ![image](https://img-blog.csdnimg.cn/20201020182736571.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NwcmluZ19FdA==,size_16,color_FFFFFF,t_70#pic_center) 41 | 42 | 43 | ## 3. 一种数组赋值方法 44 | 先用三点方法初始化数组,再用宏定义来对特定的值进行赋值,linux的系统调用就是使用这种方法来定义的系统调用号。 45 | 46 | 47 | ``` 48 | 69 const syscall_fn_t sys_call_table[__NR_syscalls] = { 49 | 70 [0 ... __NR_syscalls - 1] = __arm64_sys_ni_syscall, 50 | 71 #include 51 | } // 这个是linux系统代码实例,下面用一个相对简单的例子来理解这种方法 52 | 53 | ``` 54 | 主函数,用[0 … 6] 对数组的所有变量赋值为7 。使用include方式包含对特定值的处理 55 | 56 | 57 | ``` 58 | 1 59 | 2 #include 60 | 3 61 | 4 int main(){ 62 | 5 int table[7]={ 63 | 6 [0 ... 6]=7, 64 | 7 #include "b.h" 65 | 8 }; 66 | 9 int i = 0; 67 | 10 for(i=0;i<7;i++) 68 | 11 { 69 | 12 printf("table[%d]=%d\n",i,table[i]); 70 | 13 } 71 | 14 } 72 | 73 | ``` 74 | 特定值处理头文件b.h ,_CALL(3,5) 表示对下标为3的赋值为5。 75 | 76 | 77 | ``` 78 | 2 #ifndef _CALL 79 | 3 #define _CALL(x,y) 80 | 4 #endif 81 | 5 82 | 6 #undef _CALL 83 | 7 #define _CALL(x,y) [x]=y,//这里是重新定义参数的形式 84 | 8 85 | 9 _CALL(3,5) 86 | 10 _CALL(4,9) 87 | 88 | ``` 89 | 运行结果: 90 | ![image](https://img-blog.csdnimg.cn/20201020184848865.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NwcmluZ19FdA==,size_16,color_FFFFFF,t_70#pic_center) -------------------------------------------------------------------------------- /C language/冷知识/do{}while(0)的作用.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/do{}while(0)的作用.txt -------------------------------------------------------------------------------- /C language/冷知识/exit(0)和exit(-1)的区别.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/exit(0)和exit(-1)的区别.txt -------------------------------------------------------------------------------- /C language/冷知识/int main(int argc, char argv[])详解.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/int main(int argc, char argv[])详解.txt -------------------------------------------------------------------------------- /C language/冷知识/push函数和pop函数.md: -------------------------------------------------------------------------------- 1 | 这个算是数据结构的内容讲解的是一个叫做栈类型的数据结构,这个数据结构的特点就是后进先出--最后放进去的数据最先拿出来。pop函数就是拿出数据的操作,push是放入是数据的操作。 -------------------------------------------------------------------------------- /C language/冷知识/size_t和int区别.txt: -------------------------------------------------------------------------------- 1 | size_t和int 2 | size_t是一些C/C++标准在stddef.h中定义的。这个类型足以用来表示对象的大小。size_t的真实类型与操作系统有关。 3 | 4 | 5 | 在32位架构中被普遍定义为: 6 | 7 | typedef unsigned int size_t; 8 | 9 | 而在64位架构中被定义为: 10 | 11 | typedef unsigned long size_t; 12 | size_t在32位架构上是4字节,在64位架构上是8字节,在不同架构上进行编译时需要注意这个问题。而int在不同架构下都是4字节,与size_t不同;且int为带符号数,size_t为无符号数。 13 | 14 | 为什么有时候不用int,而是用size_type或者size_t: 15 | 16 | 与int固定四个字节不同有所不同,size_t的取值range是目标平台下最大可能的数组尺寸,一些平台下size_t的范围小于int的正数范围,又或者大于unsigned int. 使用Int既有可能浪费,又有可能范围不够大 -------------------------------------------------------------------------------- /C language/冷知识/sizeof.txt: -------------------------------------------------------------------------------- 1 | 定义一个空的类型,里面没有任何成员函数和成员变量,对该类型求sizeof,得到的结果是多少? 2 | 3 | 答:1,为什么不是0呢?空类型的实例中不包含任何信息,本来求sizeof应该是0,但是当我们声明该类型的实例的时候,它必须在内存中占有一定的空间,否则无法使用这些实例。至于占有多少内存空间,由编译器决定; 4 | 5 | 6 | 如果在该类型中添加一个构造函数和析构函数,在对该类型求sizeof,得到的结果是多少? 7 | 8 | 答:1,调用析构函数和构造函数只需要知道函数地址即可 9 | 10 | 11 | 如果是虚函数呢? 12 | 答:虚函数由函数表并在该类型添加一个指向虚函数表的指针,在32位机器上,一个指针占4个空间,如果是64位机器上,则一个指针占8个字节的指针; 13 | 14 | 15 | -------------------------------------------------------------------------------- /C language/冷知识/srand(time(NULL));.txt: -------------------------------------------------------------------------------- 1 | srand()的功能就是就是设置产生随机数的公式的参数(随机数种子),如果使用相同的种子,那么得到的随机数也就是相同的。自然,如果使用不同的种子,得出的随机数序列也是不同的。 2 | 不同的种子会得到 固定 的 不同的随机数序列。 3 | 4 | 例如: 5 | void main() 6 | { 7 | srand(1); 8 | cout< 41 | #include -------------------------------------------------------------------------------- /C language/冷知识/structure/双向链表.tif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/structure/双向链表.tif -------------------------------------------------------------------------------- /C language/冷知识/structure/栈.tif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/structure/栈.tif -------------------------------------------------------------------------------- /C language/冷知识/structure/队列2.tif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/structure/队列2.tif -------------------------------------------------------------------------------- /C language/冷知识/switch.md: -------------------------------------------------------------------------------- 1 | ``` 2 | #include 3 | main() 4 | { 5 | int k; 6 | scanf("%d",&k); 7 | switch(k) 8 | { 9 | printf("hello world\n"); //注意这里不会执行到 10 | case 1: printf("a"); break; 11 | case 2: printf("b"); break; 12 | default: printf("c"); break; 13 | } 14 | } 15 | ``` 16 | 17 | -------------------------------------------------------------------------------- /C language/冷知识/typedef用法.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/typedef用法.txt -------------------------------------------------------------------------------- /C language/冷知识/va_list函数如何实现不定参数.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/va_list函数如何实现不定参数.txt -------------------------------------------------------------------------------- /C language/冷知识/volatile关键字.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/volatile关键字.txt -------------------------------------------------------------------------------- /C language/冷知识/一些运算公式.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/一些运算公式.txt -------------------------------------------------------------------------------- /C language/冷知识/不用额外的变量交换同类型的变量.txt: -------------------------------------------------------------------------------- 1 | 有两种方式可以不使用中间变量,交换同类型的变量a,b的值: 2 | 1 使用加法操作。 3 | a+=b; 4 | b=a-b; 5 | a -= b; 6 | 2 使用异或操作: 7 | a^=b; 8 | b^=a; 9 | a^=b; -------------------------------------------------------------------------------- /C language/冷知识/优先级.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/优先级.txt -------------------------------------------------------------------------------- /C language/冷知识/位域.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/位域.txt -------------------------------------------------------------------------------- /C language/冷知识/位运算符.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/位运算符.txt -------------------------------------------------------------------------------- /C language/冷知识/八进制.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/八进制.txt -------------------------------------------------------------------------------- /C language/冷知识/内存/内存分布.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/内存/内存分布.jpg -------------------------------------------------------------------------------- /C language/冷知识/内存/内存分配.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/内存/内存分配.txt -------------------------------------------------------------------------------- /C language/冷知识/内存/内存对齐.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/内存/内存对齐.txt -------------------------------------------------------------------------------- /C language/冷知识/几种编码方式的区别.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/几种编码方式的区别.txt -------------------------------------------------------------------------------- /C language/冷知识/函数/getopt1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/函数/getopt1.png -------------------------------------------------------------------------------- /C language/冷知识/函数/getopt2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/函数/getopt2.png -------------------------------------------------------------------------------- /C language/冷知识/函数/getopt函数.md: -------------------------------------------------------------------------------- 1 | C/C++ 命令解析:getopt 方法详解和使用示例 2 | 3 | ## 一、简介 4 | 5 | getopt() 方法是用来分析命令行参数的,该方法由 Unix 标准库提供,包含在 头文件中。 6 | 7 | 8 | 9 | ## 二、定义 10 | 11 | ``` 12 | int getopt(int argc, char * const argv[], const char *optstring); 13 | 14 | extern char *optarg; 15 | extern int optind, opterr, optopt; 16 | ``` 17 | 18 | getopt 参数说明: 19 | 20 | - argc:通常由 main 函数直接传入,表示参数的数量 21 | - argv:通常也由 main 函数直接传入,表示参数的字符串变量数组 22 | - optstring:一个包含正确的参数选项字符串,用于参数的解析。例如 “abc:”,其中 -a,-b 就表示两个普通选项,-c 表示一个必须有参数的选项,因为它后面有一个冒号 23 | 24 | 外部变量说明: 25 | 26 | - optarg:如果某个选项有参数,这包含当前选项的参数字符串 27 | - optind:argv 的当前索引值 28 | - opterr:正常运行状态下为 0。非零时表示存在无效选项或者缺少选项参数,并输出其错误信息 29 | - optopt:当发现无效选项字符时,即 getopt() 方法返回 ? 字符,optopt 中包含的就是发现的无效选项字符 30 | 31 | 32 | 33 | 34 | ## 三、实例分析 35 | 36 | 让我们通过一系列的实例来掌握 getopt 方法的使用吧。 37 | 38 | ### 1. 简单实例 39 | 40 | OptDemo.c 如下: 41 | 42 | ``` 43 | #include 44 | #include 45 | 46 | int main(int argc, char *argv[]) { 47 | int o; 48 | const char *optstring = "abc:"; // 有三个选项-abc,其中c选项后有冒号,所以后面必须有参数 49 | while ((o = getopt(argc, argv, optstring)) != -1) { 50 | switch (o) { 51 | case 'a': 52 | printf("opt is a, oprarg is: %s\n", optarg); 53 | break; 54 | case 'b': 55 | printf("opt is b, oprarg is: %s\n", optarg); 56 | break; 57 | case 'c': 58 | printf("opt is c, oprarg is: %s\n", optarg); 59 | break; 60 | case '?': 61 | printf("error optopt: %c\n", optopt); 62 | printf("error opterr: %d\n", opterr); 63 | break; 64 | } 65 | } 66 | return 0; 67 | } 68 | ``` 69 | 70 | 编译和运行: 71 | 72 | ![](./getopt1.png) 73 | 74 | 分析: 75 | 76 | 命令 gcc OptDemo.c -o OptDemo 是使用 gcc 把 OptDemo.c 编译成可执行程序,命名为 OptDemo 77 | 78 | 第一次运行 ./OptDemo -a -b -c afei 正常执行和输出 79 | 80 | 第二次运行 ./OptDemo -abc 由于选项 c 后没有输入参数,于是报错 81 | 82 | 第三次运行 ./OptDemo -d 由于选项 d 不是我们在 optstring 中预定义的选项,于是报错 83 | 84 | 85 | 86 | 87 | 88 | ### 2. 可选参数 89 | 90 | 一个冒号表示选项后必须有参数,没有参数就会报错。如果有两个冒号的话,那么这个参数就是可选参数了,即可有可没有。 91 | 92 | OptDemo.c 如下: 93 | 94 | ``` 95 | #include 96 | #include 97 | 98 | void usage() { 99 | printf("Usage:\n"); 100 | printf("\tOptDemo [-a] [-b] [-c message]"); 101 | } 102 | 103 | int main(int argc, char *argv[]) { 104 | int o; 105 | const char *optstring = "abc::"; // 有三个选项-abc,其中c选项后有两个冒号,表示后面可选参数 106 | while ((o = getopt(argc, argv, optstring)) != -1) { 107 | switch (o) { 108 | case 'a': 109 | printf("opt is a, oprarg is: %s\n", optarg); 110 | break; 111 | case 'b': 112 | printf("opt is b, oprarg is: %s\n", optarg); 113 | break; 114 | case 'c': 115 | printf("opt is c, oprarg is: %s\n", optarg); 116 | break; 117 | case '?': 118 | printf("发生错误时提示用户正确的使用方式\n"); 119 | usage(); // 提示使用说明 120 | break; 121 | } 122 | } 123 | return 0; 124 | } 125 | ``` 126 | 127 | 编译和运行: 128 | 129 | ![](./getopt2.png) 130 | 131 | 冒号隔开: 132 | 133 | ``` 134 | #include 135 | #include 136 | #include 137 | 138 | int main(int argc, char *argv[]) 139 | { 140 | int opt; 141 | char *optstring = "a:b:c:d"; 142 | 143 | while ((opt = getopt(argc, argv, optstring)) != -1) 144 | { 145 | printf("opt = %c\n", opt); 146 | printf("optarg = %s\n", optarg); 147 | printf("optind = %d\n", optind); 148 | printf("argv[optind - 1] = %s\n\n", argv[optind - 1]); 149 | } 150 | 151 | return 0; 152 | } 153 | ``` 154 | 155 | 编译上述程序并运行,有如下结果: 156 | 157 | ``` 158 | cashey@ubuntu:~/Desktop/getopt$ ./test_getopt -a 100 -b 200 -c admin -d 159 | opt = a 160 | optarg = 100 161 | optind = 3 162 | argv[optind - 1] = 100 163 | 164 | opt = b 165 | optarg = 200 166 | optind = 5 167 | argv[optind - 1] = 200 168 | 169 | opt = c 170 | optarg = admin 171 | optind = 7 172 | argv[optind - 1] = admin 173 | 174 | opt = d 175 | optarg = (null) 176 | optind = 8 177 | argv[optind - 1] = -d 178 | ``` 179 | 180 | -------------------------------------------------------------------------------- /C language/冷知识/函数/inline函数.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/函数/inline函数.txt -------------------------------------------------------------------------------- /C language/冷知识/函数/malloc函数.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/函数/malloc函数.txt -------------------------------------------------------------------------------- /C language/冷知识/函数/mmap函数.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/函数/mmap函数.docx -------------------------------------------------------------------------------- /C language/冷知识/函数/函数调用原理/函数传递参数的原理.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/函数/函数调用原理/函数传递参数的原理.txt -------------------------------------------------------------------------------- /C language/冷知识/卫语句.md: -------------------------------------------------------------------------------- 1 | 什么是卫语句?更优雅的代码方式 2 | 3 | 4 | 5 | 不知你有没有被多层嵌套的 if-else 语句所折磨过,就像下面这种 “横放着的金字塔”: 6 | 7 | ``` 8 | if(true){ 9 | if(true){ 10 | if(true){ 11 | if(true){ 12 | if(true){ 13 | if(true){ 14 | } 15 | } 16 | } 17 | } 18 | } 19 | } 20 | ``` 21 | 22 | 实际项目中你要是真敢这样写,保证你过几天就忘了这里面的逻辑是什么。一开始一顿操作猛如虎,到后来怀疑自己二百五。 23 | 24 | 其实我们仔细看看上面的判断语句,它们都是在 if 里面的条件是真的情况才执行,也就是说它们都是走的正常情况,才会导致这么无限嵌套下去,那么我们从反面思考是不是就可以终止这种情况呢?也就是我们把不正常的条件先摘出来处理,剩下的就都是正常情况了。这其实就是卫语句的思考模式,也就是逆向思考。卫语句可以减少 if-else 语句嵌套的情况出现。所以在阿里巴巴 Java 规范里也写到 “多层条件语句建议使用卫语句、策略模式、状态模式等方式重构。” 25 | 26 | 为了让大家对卫语句有一个直观的认识,我将给大家举一个例子。if-else 语句一般在 for 循环里面使用,用于分支控制,如求 100 以内同时是 3、4、5 的倍数的题,如果我们根据题目所说的老老实实地判断符合倍数的情况,将会写成这样(假设每个 if 语句只判断一个条件): 27 | 28 | ``` 29 | for (int i = 1; i <= 100; i++) { 30 | if (i%3 == 0){ 31 | if (i%4 == 0){ 32 | if (i%5 == 0){ 33 | System.out.println(i); 34 | } 35 | } 36 | } 37 | } 38 | ``` 39 | 40 | 41 | 42 | 这就是前面说的 “横放着的金字塔”,而如果我们逆向思考,从是 3、4、5 的倍数的反面思考,也就是哪些情况不是 3、4、5 的倍数,先把这些情况摘出来,然后结束本次循环,继续找下一个数。这样我们就能防止多层嵌套了: 43 | 44 | ``` 45 | for (int i = 1; i <= 100; i++) { 46 | if (i%3 != 0){ 47 | continue; 48 | } 49 | if (i%4 != 0){ 50 | continue; 51 | } 52 | if (i%5 != 0){ 53 | continue; 54 | } 55 | System.out.println(i); 56 | } 57 | ``` 58 | 59 | 只有在上面三个条件都不成立的情况下,才会走到最后一步输出的语句。也就是排除那些不符合条件的情况,剩下的自然就是符合条件的了。希望通过这个小例子能让你明白到底什么是卫语句。 60 | 61 | 其实在写这篇文章之前我也在网上搜了一下什么是卫语句,但都没有讲到精髓上,大都是举一个例子,然后举一个反例,没有提高到思考模式上来。这样你也只是会这一个例子,如果换了一个你可能又不会了。所以我总结了一下,决定写一遍讲卫语句背后的思考模式的文章,希望大家真正掌握这个编程方式。虽然给大家解释了什么是卫语句,但是这种逆向思维模型的 if-else 语句为什么叫卫语句我还没有找到出处,可能它就是保卫代码不臃肿吧。 -------------------------------------------------------------------------------- /C language/冷知识/原码补码反码.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/原码补码反码.txt -------------------------------------------------------------------------------- /C language/冷知识/反斜杠r和反斜杠n的区别.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/反斜杠r和反斜杠n的区别.txt -------------------------------------------------------------------------------- /C language/冷知识/变量取值范围.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/变量取值范围.txt -------------------------------------------------------------------------------- /C language/冷知识/变量名命名规则.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/变量名命名规则.txt -------------------------------------------------------------------------------- /C language/冷知识/只读变量和常量.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/只读变量和常量.txt -------------------------------------------------------------------------------- /C language/冷知识/可变参数的c函数.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/可变参数的c函数.txt -------------------------------------------------------------------------------- /C language/冷知识/声明一个返回数组指针的函数.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/声明一个返回数组指针的函数.txt -------------------------------------------------------------------------------- /C language/冷知识/声明与定义.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/声明与定义.txt -------------------------------------------------------------------------------- /C language/冷知识/大小端.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/大小端.txt -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/getchar和putchar.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}} 2 | {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang2052\f0\fs22 getchar();\par 3 | \'b4\'d3\'bc\'fc\'c5\'cc\'b6\'c1\'c8\'a1\'d2\'bb\'b8\'f6\'d7\'d6\'b7\'fb\'b2\'a2\'ca\'e4\'b3\'f6\'a3\'ac\'b8\'c3\'ba\'af\'ca\'fd\'b5\'c4\'b7\'b5\'bb\'d8\'d6\'b5\'ca\'c7\'ca\'e4\'c8\'eb\'b5\'da\'d2\'bb\'b8\'f6\'d7\'d6\'b7\'fb\'b5\'c4ASCII\'c2\'eb\'a3\'bb\'c8\'f4\'d3\'c3\'bb\'a7\'ca\'e4\'c8\'eb \'b5\'c4\'ca\'c7\'d2\'bb\'c1\'ac\'b4\'ae\'d7\'d6\'b7\'fb\'a3\'ac\'ba\'af\'ca\'fd\'d6\'b1\'b5\'bd\'d3\'c3\'bb\'a7\'ca\'e4\'c8\'eb\'bb\'d8\'b3\'b5\'ca\'b1\'bd\'e1\'ca\'f8\'a3\'ac\'ca\'e4\'c8\'eb\'b5\'c4\'d7\'d6\'b7\'fb\'c1\'ac\'cd\'ac\'bb\'d8\'b3\'b5\'d2\'bb\'c6\'f0\'b4\'e6\'c8\'eb\'bc\'fc\'c5\'cc\'bb\'ba \'b3\'e5\'c7\'f8\'a1\'a3\'c8\'f4\'b3\'cc\'d0\'f2\'d6\'d0\'d3\'d0\'ba\'f3\'bc\'cc\'b5\'c4getchar();\'ba\'af\'ca\'fd\'a3\'ac\'d4\'f2\'d6\'b1\'bd\'d3\'b4\'d3\'bb\'ba\'b3\'e5\'c7\'f8\'d6\'f0\'b8\'f6\'b6\'c1\'c8\'a1\'d2\'d1\'ca\'e4\'c8\'eb\'b5\'c4\'d7\'d6\'b7\'fb\'b2\'a2\'ca\'e4\'b3\'f6 \'a3\'ac\'d6\'b1\'b5\'bd\'bb\'ba\'b3\'e5\'c7\'f8\'ce\'aa\'bf\'d5\'ca\'b1\'b2\'c5\'d6\'d8\'d0\'c2\'b6\'c1\'c8\'a1\'d3\'c3\'bb\'a7\'b5\'c4\'bc\'fc\'c5\'cc\'ca\'e4\'c8\'eb\'a1\'a3\par 4 | \par 5 | putchar()\par 6 | \'c6\'e4\'b8\'f1\'ca\'bd\'ce\'aaputchar(c)\'a3\'ac\'c6\'e4\'d6\'d0c\'bf\'c9\'d2\'d4\'ca\'c7\'b1\'bb\'b5\'a5\'d2\'fd\'ba\'c5\'a3\'a8\'d3\'a2\'ce\'c4\'d7\'b4\'cc\'ac\'cf\'c2\'a3\'a9\'d2\'fd\'c6\'f0\'c0\'b4\'b5\'c4\'d2\'bb\'b8\'f6\'d7\'d6\'b7\'fb\'a3\'ac\'bf\'c9\'d2\'d4\'ca\'c7\'bd\'e9\'d3\'da0~127\'d6\'ae\'bc\'e4\'b5\'c4\'d2\'bb\'b8\'f6\'ca\'ae\'bd\'f8\'d6\'c6\'d5\'fb\'d0\'cd\'ca\'fd\'a3\'a8\'b0\'fc\'ba\'ac0\'ba\'cd127\'a3\'a9\'a3\'ac\'d2\'b2\'bf\'c9\'d2\'d4\'ca\'c7\'ca\'c2\'cf\'c8\'d3\'c3char\'b6\'a8\'d2\'e5\'ba\'c3\'b5\'c4\'d2\'bb\'b8\'f6\'d7\'d6\'b7\'fb\'d0\'cd\'b1\'e4\'c1\'bf;\par 7 | #include \par 8 | int main(void)\par 9 | \{\par 10 | \tab int i;\par 11 | \tab putchar(25);\par 12 | \tab putchar('\\n');\par 13 | \tab return 0;\par 14 | \}\par 15 | /*********\'ca\'e4\'b3\'f6\'bd\'e1\'b9\'fb**********\par 16 | ****************************/\par 17 | /******\par 18 | \pard\sa200\sl240\slmult1{\pict\wmetafile8\picw5953\pich1005\picwgoal3375\pichgoal570 19 | 0100090000036432000000004e3200000000050000000b0200000000050000000c02ed0341174e 20 | 320000430f2000cc0000002600e10000000000ed0341170000000028000000e100000026000000 21 | 010018000000000058640000c40e0000c40e000000000000000000000000000000000000000000 22 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 23 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 24 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 25 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 26 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 27 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 28 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 29 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 30 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 31 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 32 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 33 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 34 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 35 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 36 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 37 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 38 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 39 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 40 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 41 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 42 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 43 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 44 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 45 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 46 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 47 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 48 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 49 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 50 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 51 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 52 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 53 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 54 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 55 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 56 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 57 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 58 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 59 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 60 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 61 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 62 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 63 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 64 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 65 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 66 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 67 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 68 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 69 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 70 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 71 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 72 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 73 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 74 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 75 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 76 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 77 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 78 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 79 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 80 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 81 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 82 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 83 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 84 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 85 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 86 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 87 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 88 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 89 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 90 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 91 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 92 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 93 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 94 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 95 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 96 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 97 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 98 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 99 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 100 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 101 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 102 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 103 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 104 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 105 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 106 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 107 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 108 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 109 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 110 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 111 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 112 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 113 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 114 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 115 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 116 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 117 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 118 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 119 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 120 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 121 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 122 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 123 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 124 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 125 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 126 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 127 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 128 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 129 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 130 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 131 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 132 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 133 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 134 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 135 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 136 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 137 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 138 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 139 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 140 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 141 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 142 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 143 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 144 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 145 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 146 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 147 | 0000000000000000000000000000000000000000000000000000000000000000000000000000c0 148 | c0c0c0c0c0c0c0c0c0c0c000000000000000000000000000000000000000000000000000000000 149 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 150 | 0000000000000000000000000000000000c0c0c0c0c0c0c0c0c0c0c0c000000000000000000000 151 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 152 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 153 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 154 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 155 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 156 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 157 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 158 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 159 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 160 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 161 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 162 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 163 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 164 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 165 | 000000000000000000000000000000000000000000c0c0c0c0c0c0000000000000000000000000 166 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 167 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 168 | c0c0c0c0c0c0000000000000000000000000000000000000000000000000000000000000000000 169 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 170 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 171 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 172 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 173 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 174 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 175 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 176 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 177 | 00000000000000000000000000000000000000000000000000000000c0c0c0c0c0c0c0c0c0c0c0 178 | c0000000000000000000000000c0c0c0c0c0c0c0c0c0c0c0c00000000000000000000000000000 179 | 00c0c0c0c0c0c0c0c0c0c0c0c0000000000000000000000000c0c0c0c0c0c0c0c0c0c0c0c00000 180 | 00000000000000000000c0c0c0c0c0c0c0c0c0c0c0c00000000000000000000000000000000000 181 | 00000000000000000000000000000000000000c0c0c0c0c0c0c0c0c0000000c0c0c0c0c0c00000 182 | 00c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000000000000000000000000000c0c0 183 | c0c0c0c0000000000000000000000000000000000000000000000000000000000000c0c0c0c0c0 184 | c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0c0c0c0c0c0c00000000000 185 | 00000000000000000000000000000000c0c0c0c0c0c00000000000000000000000000000000000 186 | 00000000000000000000000000000000000000c0c0c0c0c0c0c0c0c00000000000000000000000 187 | 00c0c0c0c0c0c0c0c0c0c0c0c00000000000000000000000000000000000000000000000000000 188 | 00000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0000000000000000000000000c0c0c0c0c0 189 | c0c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c00000000000 190 | 00000000000000c0c0c0c0c0c0c0c0c0000000000000000000000000c0c0c0c0c0c0c0c0c0c0c0 191 | c0c0c0c0c0c0c0000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000000000c0c0 192 | c0c0c0c0c0c0c0000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0c0c0c0c0c0c00000000000 193 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 194 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 195 | 0000000000c0c0c0c0c0c0000000000000000000000000000000000000c0c0c0c0c0c000000000 196 | 0000000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0 197 | c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000 198 | 0000000000000000000000000000000000000000000000000000000000c0c0c0c0c0c000000000 199 | 0000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000000000000000 200 | 0000000000c0c0c0c0c0c0c0c0c0c0c0c000000000000000000000000000000000000000000000 201 | 0000000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000c0c0c0c0c0c000 202 | 0000000000c0c0c0c0c0c0000000000000000000000000c0c0c0c0c0c0c0c0c0c0c0c000000000 203 | 0000000000000000000000000000000000000000000000000000000000c0c0c0c0c0c0000000c0 204 | c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000000000000000000000 205 | 0000000000000000000000000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000 206 | 0000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000000000 207 | 0000c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0000000c0c0c0c0c0c000000000000000 208 | 0000000000000000c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0 209 | c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000 210 | 0000000000c0c0c0c0c0c000000000000000000000000000000000000000000000000000000000 211 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 212 | 000000000000000000000000000000000000c0c0c0c0c0c0000000000000000000000000000000 213 | 000000c0c0c0c0c0c0000000000000000000000000000000c0c0c0c0c0c0000000000000000000 214 | 000000000000000000000000000000000000c0c0c0c0c0c0000000000000000000000000000000 215 | 000000c0c0c0c0c0c0000000000000000000000000000000000000000000000000000000000000 216 | 000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000 217 | c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000 218 | 000000000000000000000000000000000000000000000000c0c0c0c0c0c0000000c0c0c0c0c0c0 219 | 000000000000c0c0c0c0c0c0000000000000000000000000000000000000000000c0c0c0c0c0c0 220 | 000000000000c0c0c0c0c0c0000000000000000000000000000000000000000000000000000000 221 | 000000c0c0c0c0c0c0000000000000000000000000000000c0c0c0c0c0c0000000000000c0c0c0 222 | c0c0c0000000000000000000000000000000000000000000000000000000000000c0c0c0c0c0c0 223 | 000000000000000000000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000 224 | 000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0000000 225 | 000000000000000000000000000000000000000000c0c0c0c0c0c0000000000000000000c0c0c0 226 | c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0 227 | 000000000000c0c0c0c0c0c0000000000000000000000000000000000000000000000000000000 228 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 229 | 00000000000000000000000000000000000000000000000000000000000000c0c0c0c0c0c00000 230 | 00000000000000000000000000000000c0c0c0c0c0c0c0c0c0000000c0c0c0c0c0c0000000c0c0 231 | c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0000000000000000000c0c0c0c0c0c00000000000000000 232 | 00000000000000000000c0c0c0c0c0c00000000000000000000000000000000000000000000000 233 | 00000000000000000000000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0c0c0c00000000000 234 | 00c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000000000c0c0c0c0c0c00000000000 235 | 00c0c0c0c0c0c0000000000000000000000000000000000000000000000000000000000000c0c0 236 | c0c0c0c0c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c00000 237 | 00000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c00000000000000000000000000000 238 | 00000000000000000000000000000000c0c0c0c0c0c0000000000000000000000000000000c0c0 239 | c0c0c0c0000000000000c0c0c0c0c0c00000000000000000000000000000000000000000000000 240 | 00000000000000c0c0c0c0c0c0000000000000000000000000000000000000c0c0c0c0c0c00000 241 | 00000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c00000000000 242 | 00000000c0c0c0c0c0c0000000000000000000000000000000000000000000000000c0c0c0c0c0 243 | c0000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0 244 | c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c00000 245 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 246 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 247 | 0000000000c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0000000c0 248 | c0c0c0c0c0c0c0c0000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0 249 | c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000 250 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 251 | 0000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000000000000000 252 | 0000c0c0c0c0c0c0000000000000c0c0c0c0c0c000000000000000000000000000000000000000 253 | 0000000000000000000000c0c0c0c0c0c0000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000 254 | 0000000000c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000 255 | 0000000000000000000000000000000000000000000000000000000000c0c0c0c0c0c000000000 256 | 0000000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000000000000000000000 257 | 0000000000000000000000000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000 258 | 0000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000000000 259 | 0000c0c0c0c0c0c0000000000000000000c0c0c0c0c0c000000000000000000000000000000000 260 | 0000000000000000c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0 261 | c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000 262 | 0000000000c0c0c0c0c0c000000000000000000000000000000000000000000000000000000000 263 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 264 | 000000000000000000000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000 265 | c0c0c0c0c0c0c0c0c0000000c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0 266 | 000000000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0000000000000000000000000c0c0c0 267 | c0c0c0c0c0c0c0c0c0000000000000000000000000000000000000000000000000000000000000 268 | 000000000000c0c0c0c0c0c0c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0 269 | c0c0c0000000000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0000000000000 270 | 000000000000000000000000000000000000000000000000c0c0c0c0c0c0000000000000c0c0c0 271 | c0c0c0000000000000c0c0c0c0c0c0c0c0c0c0c0c0000000000000000000000000c0c0c0c0c0c0 272 | 000000000000c0c0c0c0c0c0000000000000000000000000000000000000000000000000000000 273 | c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0 274 | 000000000000000000000000000000000000000000000000000000000000000000000000c0c0c0 275 | c0c0c0c0c0c0c0c0c0000000000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0000000000000 276 | 000000c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0 277 | c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0000000000000000000c0c0c0 278 | c0c0c0c0c0c0c0c0c0c0c0c0000000000000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c0 279 | 000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0000000000000000000000000000000000000 280 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 281 | 00000000000000000000000000000000000000000000000000000000000000c0c0c0c0c0c00000 282 | 00000000c0c0c0c0c0c00000000000000000000000000000000000000000000000000000000000 283 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 284 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 285 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 286 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 287 | 00000000000000000000000000000000000000000000000000000000000000000000000000c0c0 288 | c0c0c0c00000000000000000000000000000000000000000000000000000000000000000000000 289 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 290 | 00000000000000000000000000000000c0c0c0c0c0c00000000000000000000000000000000000 291 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 292 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 293 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 294 | 00000000c0c0c0c0c0c00000000000000000000000000000000000000000000000000000000000 295 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 296 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 297 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 298 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 299 | 0000000000c0c0c0c0c0c0000000000000c0c0c0c0c0c000000000000000000000000000000000 300 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 301 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 302 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 303 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 304 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 305 | 0000000000000000000000c0c0c0c0c0c000000000000000000000000000000000000000000000 306 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 307 | 0000000000000000000000000000000000000000000000000000000000000000c0c0c000000000 308 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 309 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 310 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 311 | 0000000000000000000000000000000000000000c0c0c000000000000000000000000000000000 312 | 0000000000000000c0c0c0c0c0c000000000000000000000000000000000000000000000000000 313 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 314 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 315 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 316 | 000000000000000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0000000000000 317 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 318 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 319 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 320 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 321 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 322 | 000000000000000000000000000000000000000000c0c0c0c0c0c0c0c0c0000000000000000000 323 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 324 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 325 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 326 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 327 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 328 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 329 | 000000000000000000000000000000000000000000c0c0c0c0c0c0000000000000000000000000 330 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 331 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 332 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 333 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 334 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 335 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 336 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 337 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 338 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 339 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 340 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 341 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 342 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 343 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 344 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 345 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 346 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 347 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 348 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 349 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 350 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 351 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 352 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 353 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 354 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 355 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 356 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 357 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 358 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 359 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 360 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 361 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 362 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 363 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 364 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 365 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 366 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 367 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 368 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 369 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 370 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 371 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 372 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 373 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 374 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 375 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 376 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 377 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 378 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 379 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 380 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 381 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 382 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 383 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 384 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 385 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 386 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 387 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 388 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 389 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 390 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 391 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 392 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 393 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 394 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 395 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 396 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 397 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 398 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 399 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 400 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 401 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 402 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 403 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 404 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 405 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 406 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 407 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 408 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 409 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 410 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 411 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 412 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 413 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 414 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 415 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 416 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 417 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 418 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 419 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 420 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 421 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 422 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 423 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 424 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 425 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 426 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 427 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 428 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 429 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 430 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 431 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 432 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 433 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 434 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 435 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 436 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 437 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 438 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 439 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 440 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 441 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 442 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 443 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 444 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 445 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 446 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 447 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 448 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 449 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 450 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 451 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 452 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 453 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 454 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 455 | 0000000000000000000000c0c0c0c0c0c000000000000000000000000000000000000000000000 456 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 457 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 458 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 459 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 460 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 461 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 462 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 463 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 464 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 465 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 466 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 467 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 468 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 469 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 470 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 471 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 472 | 000000000000000000000000000000000000000000c0c0c0c0c0c0c0c0c0c0c0c0000000000000 473 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 474 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 475 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 476 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 477 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 478 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 479 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 480 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 481 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 482 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 483 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 484 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 485 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 486 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 487 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 488 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 489 | 00000000000000000000000000000000000000000000000000000000000000c0c0c0c0c0c0c0c0 490 | c0c0c0c0c0c0c0c0c0c00000000000000000000000000000000000000000000000000000000000 491 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 492 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 493 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 494 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 495 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 496 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 497 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 498 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 499 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 500 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 501 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 502 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 503 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 504 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 505 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 506 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 507 | 0000000000000000000000c0c0c0c0c0c000000000000000000000000000000000000000000000 508 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 509 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 510 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 511 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 512 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 513 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 514 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 515 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 516 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 517 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 518 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 519 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 520 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 521 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 522 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 523 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 524 | 000000000000000000000000000000000000000000000000c0c0c0c0c0c0000000000000000000 525 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 526 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 527 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 528 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 529 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 530 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 531 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 532 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 533 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 534 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 535 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 536 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 537 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 538 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 539 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 540 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 541 | 00000000000000000000000000000000000000000000000000000000000000000000000000c0c0 542 | c0c0c0c00000000000000000000000000000000000000000000000000000000000000000000000 543 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 544 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 545 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 546 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 547 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 548 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 549 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 550 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 551 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 552 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 553 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 554 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 555 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 556 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 557 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 558 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 559 | 0000000000000000000000c0c0c0c0c0c000000000000000000000000000000000000000000000 560 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 561 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 562 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 563 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 564 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 565 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 566 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 567 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 568 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 569 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 570 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 571 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 572 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 573 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 574 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 575 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 576 | 000000000000000000000000000000000000000000000000c0c0c0c0c0c0000000000000000000 577 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 578 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 579 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 580 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 581 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 582 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 583 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 584 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 585 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 586 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 587 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 588 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 589 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 590 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 591 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 592 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 593 | 00000000000000000000000000000000000000000000000000000000000000000000000000c0c0 594 | c0c0c0c00000000000000000000000000000000000000000000000000000000000000000000000 595 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 596 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 597 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 598 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 599 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 600 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 601 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 602 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 603 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 604 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 605 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 606 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 607 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 608 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 609 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 610 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 611 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 612 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 613 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 614 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 615 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 616 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 617 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 618 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 619 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 620 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 621 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 622 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 623 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 624 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 625 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 626 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 627 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 628 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 629 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 630 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 631 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 632 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 633 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 634 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 635 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 636 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 637 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 638 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 639 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 640 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 641 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 642 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 643 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 644 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 645 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 646 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 647 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 648 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 649 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 650 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 651 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 652 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 653 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 654 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 655 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 656 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 657 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 658 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 659 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 660 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 661 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 662 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 663 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 664 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 665 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 666 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 667 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 668 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 669 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 670 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 671 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 672 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 673 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 674 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 675 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 676 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 677 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 678 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 679 | 000000000000000000000000000000000000000000000000000000000000000000000000000000 680 | 000000000000000000000000000000030000000000 681 | }\par 682 | */\par 683 | \'a3\'a81\'a3\'a9\'b5\'b1c\'ce\'aa\'d2\'bb\'b8\'f6\'b1\'bb\'b5\'a5\'d2\'fd\'ba\'c5\'a3\'a8\'d3\'a2\'ce\'c4\'d7\'b4\'cc\'ac\'cf\'c2\'a3\'a9\'d2\'fd\'c6\'f0\'c0\'b4\'b5\'c4\'d7\'d6\'b7\'fb\'ca\'b1\'a3\'ac\'ca\'e4\'b3\'f6\'b8\'c3\'d7\'d6\'b7\'fb\'a3\'a8\'d7\'a2\'a3\'ba\'b8\'c3\'d7\'d6\'b7\'fb\'d2\'b2\'bf\'c9\'ce\'aa\'d7\'aa\'d2\'e5\'d7\'d6\'b7\'fb\'a3\'a9\'a3\'bb\par 684 | \'a3\'a82\'a3\'a9\'b5\'b1c\'ce\'aa\'d2\'bb\'b8\'f6\'bd\'e9\'d3\'da0~127\'a3\'a8\'b0\'fc\'c0\'a80\'bc\'b0127\'a3\'a9\'d6\'ae\'bc\'e4\'b5\'c4\'ca\'ae\'bd\'f8\'d6\'c6\'d5\'fb\'d0\'cd\'ca\'fd\'ca\'b1\'a3\'ac\'cb\'fc\'bb\'e1\'b1\'bb\'ca\'d3\'ce\'aa\'b6\'d4\'d3\'a6\'d7\'d6\'b7\'fb\'b5\'c4ASCII\'b4\'fa\'c2\'eb\'a3\'ac\'ca\'e4\'b3\'f6\'b8\'c3ASCII\'b4\'fa\'c2\'eb\'b6\'d4\'d3\'a6\'b5\'c4\'d7\'d6\'b7\'fb\'a3\'bb\par 685 | \'a3\'a83\'a3\'a9\'b5\'b1c\'ce\'aa\'d2\'bb\'b8\'f6\'ca\'c2\'cf\'c8\'d3\'c3char\'b6\'a8\'d2\'e5\'ba\'c3\'b5\'c4\'d7\'d6\'b7\'fb\'d0\'cd\'b1\'e4\'c1\'bf\'ca\'b1\'a3\'ac\'ca\'e4\'b3\'f6\'b8\'c3\'b1\'e4\'c1\'bf\'cb\'f9\'d6\'b8\'cf\'f2\'b5\'c4\'d7\'d6\'b7\'fb\'a1\'a3\par 686 | \pard\sa200\sl276\slmult1\par 687 | } 688 | -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/getchar和scanf.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1 \ansi \ansicpg936 \deff0 \stshfdbch1 \stshfloch0 \stshfhich0 \deflang2052 \deflangfe2052 {\fonttbl {\f0 \froman \fcharset0 \fprq2 {\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}{\f1 \fnil \fcharset134 \fprq0 {\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt \'cb\'ce\'cc\'e5};}{\f2 \fnil \fcharset2 \fprq0 {\*\panose 05000000000000000000}Wingdings{\*\falt Wingdings};}}{\colortbl ;\red0 \green0 \blue0 ;\red128 \green0 \blue0 ;\red255 \green0 \blue0 ;\red0 \green128 \blue0 ;\red128 \green128 \blue0 ;\red0 \green255 \blue0 ;\red255 \green255 \blue0 ;\red0 \green0 \blue128 ;\red128 \green0 \blue128 ;\red0 \green128 \blue128 ;\red128 \green128 \blue128 ;\red192 \green192 \blue192 ;\red0 \green0 \blue255 ;\red255 \green0 \blue255 ;\red0 \green255 \blue255 ;\red255 \green255 \blue255 ;}{\stylesheet {\qj \li0 \ri0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \f0 \snext0 \spriority0 Normal;}{\*\cs10 \snext10 \sunhideused \spriority99 Default Paragraph Font;}}{\*\latentstyles \lsdstimax260 \lsdlockeddef0 \lsdsemihiddendef1 \lsdunhideuseddef1 \lsdqformatdef0 \lsdprioritydef99 {\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdpriority0 \lsdlocked0 Normal;\lsdpriority99 \lsdlocked0 heading 1;\lsdpriority99 \lsdlocked0 heading 2;\lsdpriority99 \lsdlocked0 heading 3;\lsdpriority99 \lsdlocked0 heading 4;\lsdpriority99 \lsdlocked0 heading 5;\lsdpriority99 \lsdlocked0 heading 6;\lsdpriority99 \lsdlocked0 heading 7;\lsdpriority99 \lsdlocked0 heading 8;\lsdpriority99 \lsdlocked0 heading 9;\lsdpriority99 \lsdlocked0 index 1;\lsdpriority99 \lsdlocked0 index 2;\lsdpriority99 \lsdlocked0 index 3;\lsdpriority99 \lsdlocked0 index 4;\lsdpriority99 \lsdlocked0 index 5;\lsdpriority99 \lsdlocked0 index 6;\lsdpriority99 \lsdlocked0 index 7;\lsdpriority99 \lsdlocked0 index 8;\lsdpriority99 \lsdlocked0 index 9;\lsdpriority99 \lsdlocked0 toc 1;\lsdpriority99 \lsdlocked0 toc 2;\lsdpriority99 \lsdlocked0 toc 3;\lsdpriority99 \lsdlocked0 toc 4;\lsdpriority99 \lsdlocked0 toc 5;\lsdpriority99 \lsdlocked0 toc 6;\lsdpriority99 \lsdlocked0 toc 7;\lsdpriority99 \lsdlocked0 toc 8;\lsdpriority99 \lsdlocked0 toc 9;\lsdpriority99 \lsdlocked0 Normal Indent;\lsdpriority99 \lsdlocked0 footnote text;\lsdpriority99 \lsdlocked0 annotation text;\lsdpriority99 \lsdlocked0 header;\lsdpriority99 \lsdlocked0 footer;\lsdpriority99 \lsdlocked0 index heading;\lsdpriority99 \lsdlocked0 caption;\lsdpriority99 \lsdlocked0 table of figures;\lsdpriority99 \lsdlocked0 envelope address;\lsdpriority99 \lsdlocked0 envelope return;\lsdpriority99 \lsdlocked0 footnote reference;\lsdpriority99 \lsdlocked0 annotation reference;\lsdpriority99 \lsdlocked0 line number;\lsdpriority99 \lsdlocked0 page number;\lsdpriority99 \lsdlocked0 endnote reference;\lsdpriority99 \lsdlocked0 endnote text;\lsdpriority99 \lsdlocked0 table of authorities;\lsdpriority99 \lsdlocked0 macro;\lsdpriority99 \lsdlocked0 toa heading;\lsdpriority99 \lsdlocked0 List;\lsdpriority99 \lsdlocked0 List Bullet;\lsdpriority99 \lsdlocked0 List Number;\lsdpriority99 \lsdlocked0 List 2;\lsdpriority99 \lsdlocked0 List 3;\lsdpriority99 \lsdlocked0 List 4;\lsdpriority99 \lsdlocked0 List 5;\lsdpriority99 \lsdlocked0 List Bullet 2;\lsdpriority99 \lsdlocked0 List Bullet 3;\lsdpriority99 \lsdlocked0 List Bullet 4;\lsdpriority99 \lsdlocked0 List Bullet 5;\lsdpriority99 \lsdlocked0 List Number 2;\lsdpriority99 \lsdlocked0 List Number 3;\lsdpriority99 \lsdlocked0 List Number 4;\lsdpriority99 \lsdlocked0 List Number 5;\lsdpriority99 \lsdlocked0 Title;\lsdpriority99 \lsdlocked0 Closing;\lsdpriority99 \lsdlocked0 Signature;\lsdpriority99 \lsdlocked0 Default Paragraph Font;\lsdpriority99 \lsdlocked0 Body Text;\lsdpriority99 \lsdlocked0 Body Text Indent;\lsdpriority99 \lsdlocked0 List Continue;\lsdpriority99 \lsdlocked0 List Continue 2;\lsdpriority99 \lsdlocked0 List Continue 3;\lsdpriority99 \lsdlocked0 List Continue 4;\lsdpriority99 \lsdlocked0 List Continue 5;\lsdpriority99 \lsdlocked0 Message Header;\lsdpriority99 \lsdlocked0 Subtitle;\lsdpriority99 \lsdlocked0 Salutation;\lsdpriority99 \lsdlocked0 Date;\lsdpriority99 \lsdlocked0 Body Text First Indent;\lsdpriority99 \lsdlocked0 Body Text First Indent 2;\lsdpriority99 \lsdlocked0 Note Heading;\lsdpriority99 \lsdlocked0 Body Text 2;\lsdpriority99 \lsdlocked0 Body Text 3;\lsdpriority99 \lsdlocked0 Body Text Indent 2;\lsdpriority99 \lsdlocked0 Body Text Indent 3;\lsdpriority99 \lsdlocked0 Block Text;\lsdpriority99 \lsdlocked0 Hyperlink;\lsdpriority99 \lsdlocked0 FollowedHyperlink;\lsdpriority99 \lsdlocked0 Strong;\lsdpriority99 \lsdlocked0 Emphasis;\lsdpriority99 \lsdlocked0 Document Map;\lsdpriority99 \lsdlocked0 Plain Text;\lsdpriority99 \lsdlocked0 E-mail Signature;\lsdpriority99 \lsdlocked0 Normal (Web);\lsdpriority99 \lsdlocked0 HTML Acronym;\lsdpriority99 \lsdlocked0 HTML Address;\lsdpriority99 \lsdlocked0 HTML Cite;\lsdpriority99 \lsdlocked0 HTML Code;\lsdpriority99 \lsdlocked0 HTML Definition;\lsdpriority99 \lsdlocked0 HTML Keyboard;\lsdpriority99 \lsdlocked0 HTML Preformatted;\lsdpriority99 \lsdlocked0 HTML Sample;\lsdpriority99 \lsdlocked0 HTML Typewriter;\lsdpriority99 \lsdlocked0 HTML Variable;\lsdpriority99 \lsdlocked0 Normal Table;\lsdpriority99 \lsdlocked0 annotation subject;\lsdpriority99 \lsdlocked0 No List;\lsdpriority99 \lsdlocked0 Table Simple 1;\lsdpriority99 \lsdlocked0 Table Simple 2;\lsdpriority99 \lsdlocked0 Table Simple 3;\lsdpriority99 \lsdlocked0 Table Classic 1;\lsdpriority99 \lsdlocked0 Table Classic 2;\lsdpriority99 \lsdlocked0 Table Classic 3;\lsdpriority99 \lsdlocked0 Table Classic 4;\lsdpriority99 \lsdlocked0 Table Colorful 1;\lsdpriority99 \lsdlocked0 Table Colorful 2;\lsdpriority99 \lsdlocked0 Table Colorful 3;\lsdpriority99 \lsdlocked0 Table Columns 1;\lsdpriority99 \lsdlocked0 Table Columns 2;\lsdpriority99 \lsdlocked0 Table Columns 3;\lsdpriority99 \lsdlocked0 Table Columns 4;\lsdpriority99 \lsdlocked0 Table Columns 5;\lsdpriority99 \lsdlocked0 Table Grid 1;\lsdpriority99 \lsdlocked0 Table Grid 2;\lsdpriority99 \lsdlocked0 Table Grid 3;\lsdpriority99 \lsdlocked0 Table Grid 4;\lsdpriority99 \lsdlocked0 Table Grid 5;\lsdpriority99 \lsdlocked0 Table Grid 6;\lsdpriority99 \lsdlocked0 Table Grid 7;\lsdpriority99 \lsdlocked0 Table Grid 8;\lsdpriority99 \lsdlocked0 Table List 1;\lsdpriority99 \lsdlocked0 Table List 2;\lsdpriority99 \lsdlocked0 Table List 3;\lsdpriority99 \lsdlocked0 Table List 4;\lsdpriority99 \lsdlocked0 Table List 5;\lsdpriority99 \lsdlocked0 Table List 6;\lsdpriority99 \lsdlocked0 Table List 7;\lsdpriority99 \lsdlocked0 Table List 8;\lsdpriority99 \lsdlocked0 Table 3D effects 1;\lsdpriority99 \lsdlocked0 Table 3D effects 2;\lsdpriority99 \lsdlocked0 Table 3D effects 3;\lsdpriority99 \lsdlocked0 Table Contemporary;\lsdpriority99 \lsdlocked0 Table Elegant;\lsdpriority99 \lsdlocked0 Table Professional;\lsdpriority99 \lsdlocked0 Table Subtle 1;\lsdpriority99 \lsdlocked0 Table Subtle 2;\lsdpriority99 \lsdlocked0 Table Web 1;\lsdpriority99 \lsdlocked0 Table Web 2;\lsdpriority99 \lsdlocked0 Table Web 3;\lsdpriority99 \lsdlocked0 Balloon Text;\lsdpriority99 \lsdlocked0 Table Grid;\lsdpriority99 \lsdlocked0 Table Theme;\lsdpriority99 \lsdlocked0 Light Shading;\lsdpriority99 \lsdlocked0 Light List;\lsdpriority99 \lsdlocked0 Light Grid;\lsdpriority99 \lsdlocked0 Medium Shading 1;\lsdpriority99 \lsdlocked0 Medium Shading 2;\lsdpriority99 \lsdlocked0 Medium List 1;\lsdpriority99 \lsdlocked0 Medium List 2;\lsdpriority99 \lsdlocked0 Medium Grid 1;\lsdpriority99 \lsdlocked0 Medium Grid 2;\lsdpriority99 \lsdlocked0 Medium Grid 3;\lsdpriority99 \lsdlocked0 Dark List;\lsdpriority99 \lsdlocked0 Colorful Shading;\lsdpriority99 \lsdlocked0 Colorful List;\lsdpriority99 \lsdlocked0 Colorful Grid;\lsdpriority99 \lsdlocked0 Light Shading Accent 1;\lsdpriority99 \lsdlocked0 Light List Accent 1;\lsdpriority99 \lsdlocked0 Light Grid Accent 1;\lsdpriority99 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority99 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority99 \lsdlocked0 Medium List 1 Accent 1;\lsdpriority99 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority99 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority99 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority99 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority99 \lsdlocked0 Dark List Accent 1;\lsdpriority99 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority99 \lsdlocked0 Colorful List Accent 1;\lsdpriority99 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority99 \lsdlocked0 Light Shading Accent 2;\lsdpriority99 \lsdlocked0 Light List Accent 2;\lsdpriority99 \lsdlocked0 Light Grid Accent 2;\lsdpriority99 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority99 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority99 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority99 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority99 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority99 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority99 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority99 \lsdlocked0 Dark List Accent 2;\lsdpriority99 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority99 \lsdlocked0 Colorful List Accent 2;\lsdpriority99 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority99 \lsdlocked0 Light Shading Accent 3;\lsdpriority99 \lsdlocked0 Light List Accent 3;\lsdpriority99 \lsdlocked0 Light Grid Accent 3;\lsdpriority99 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority99 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority99 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority99 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority99 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority99 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority99 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority99 \lsdlocked0 Dark List Accent 3;\lsdpriority99 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority99 \lsdlocked0 Colorful List Accent 3;\lsdpriority99 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority99 \lsdlocked0 Light Shading Accent 4;\lsdpriority99 \lsdlocked0 Light List Accent 4;\lsdpriority99 \lsdlocked0 Light Grid Accent 4;\lsdpriority99 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority99 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority99 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority99 \lsdlocked0 Medium List 2 Accent 4;\lsdpriority99 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority99 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority99 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority99 \lsdlocked0 Dark List Accent 4;\lsdpriority99 \lsdlocked0 Colorful Shading Accent 4;\lsdpriority99 \lsdlocked0 Colorful List Accent 4;\lsdpriority99 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority99 \lsdlocked0 Light Shading Accent 5;\lsdpriority99 \lsdlocked0 Light List Accent 5;\lsdpriority99 \lsdlocked0 Light Grid Accent 5;\lsdpriority99 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority99 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority99 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority99 \lsdlocked0 Medium List 2 Accent 5;\lsdpriority99 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority99 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority99 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority99 \lsdlocked0 Dark List Accent 5;\lsdpriority99 \lsdlocked0 Colorful Shading Accent 5;\lsdpriority99 \lsdlocked0 Colorful List Accent 5;\lsdpriority99 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority99 \lsdlocked0 Light Shading Accent 6;\lsdpriority99 \lsdlocked0 Light List Accent 6;\lsdpriority99 \lsdlocked0 Light Grid Accent 6;\lsdpriority99 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority99 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority99 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority99 \lsdlocked0 Medium List 2 Accent 6;\lsdpriority99 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority99 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority99 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority99 \lsdlocked0 Dark List Accent 6;\lsdpriority99 \lsdlocked0 Colorful Shading Accent 6;\lsdpriority99 \lsdlocked0 Colorful List Accent 6;\lsdpriority99 \lsdlocked0 Colorful Grid Accent 6;}}{\*\generator WPS Office}{\info {\author lh}{\operator lh}{\creatim \yr2016 \mo10 \dy24 \hr11 \min58 }{\revtim \yr2016 \mo10 \dy24 \hr11 \min59 }{\version1 }}\paperw12240 \paperh15840 \margl1800 \margr1800 \margt1440 \margb1440 \gutter0 \ftnbj \aenddoc \jcompress1 \viewkind4 \viewscale100 \asianbrkrule \allowfieldendsel \snaptogridincell \viewkind4 {\*\fchars !),.:;?]\'7d\'a1\'a7\'a1\'a4\'a1\'a6\'a1\'a5\'a8D\'a1\'ac\'a1\'af\'a1\'b1\'a1\'ad\'a1\'c3\'a1\'a2\'a1\'a3\'a1\'a8\'a1\'a9\'a1\'b5\'a1\'b7\'a1\'b9\'a1\'bb\'a1\'bf\'a1\'b3\'a1\'bd\'a3\'a1\'a3\'a2\'a3\'a7\'a3\'a9\'a3\'ac\'a3\'ae\'a3\'ba\'a3\'bb\'a3\'bf\'a3\'dd\'a3\'e0\'a3\'fc\'a3\'fd\'a1\'ab\'a1\'e9}{\*\lchars ([\'7b\'a1\'a4\'a1\'ae\'a1\'b0\'a1\'b4\'a1\'b6\'a1\'b8\'a1\'ba\'a1\'be\'a1\'b2\'a1\'bc\'a3\'a8\'a3\'ae\'a3\'db\'a3\'fb\'a1\'ea\'a3\'a4}\fet2 {\*\ftnsep \pard \plain {\insrsid \chftnsep \par }}{\*\ftnsepc \pard \plain {\insrsid \chftnsepc \par }}{\*\aftnsep \pard \plain {\insrsid \chftnsep \par }}{\*\aftnsepc \pard \plain {\insrsid \chftnsepc \par }}\sectd \sbkpage \pgwsxn12240 \pghsxn15840 \marglsxn1800 \margrsxn1800 \margtsxn1440 \margbsxn1440 \guttersxn0 \headery720 \footery720 \pgbrdropt0 \sectdefaultcl \endnhere \pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\field \fldedit {\*\fldinst {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \af1 \lang2052 \langnp2052 }{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 HYPERLINK "http://blog.csdn.net/hao5743/article/details/6939661"}}{\fldrslt {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \af1 \lang2052 \langnp2052 }{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \cf13 \ul1 http://blog.csdn.net/hao5743/article/details/6939661}}}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \af1 \lang2052 \langnp2052 \cf13 \ul1 }{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \'d5\'e2\'c0\'ef\'d3\'d0\'d2\'bb\'d0\'a9\'c0\'fd\'d7\'d3\'ba\'dc\'ba\'c3\'cb\'b5\'c3\'f7\'ce\'ca\'cc\'e2\'a3\'bb}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \'b5\'da\'d2\'bb\'a3\'ba\'d2\'aa\'d7\'a2\'d2\'e2\'b2\'bb\'cd\'ac\'b5\'c4\'ba\'af\'ca\'fd\'ca\'c7\'b7\'f1\'bd\'d3\'ca\'dc\'bf\'d5\'b8\'f1\'b7\'fb\'a1\'a2\'ca\'c7\'b7\'f1\'c9\'e1\'c6\'fa\'d7\'ee\'ba\'f3\'b5\'c4\'bb\'d8\'b3\'b5\'b7\'fb\'b5\'c4\'ce\'ca\'cc\'e2!}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \'b6\'c1\'c8\'a1\'d7\'d6\'b7\'fb\'ca\'b1\'a3\'ba}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 scanf()\'d2\'d4Space\'a1\'a2Enter\'a1\'a2Tab\'bd\'e1\'ca\'f8\'d2\'bb\'b4\'ce\'ca\'e4\'c8\'eb\'a3\'ac\'b2\'bb\'bb\'e1\'c9\'e1\'c6\'fa\'d7\'ee\'ba\'f3\'b5\'c4\'bb\'d8\'b3\'b5\'b7\'fb\'a3\'a8\'bc\'b4\'bb\'d8\'b3\'b5\'b7\'fb\'bb\'e1\'b2\'d0\'c1\'f4\'d4\'da\'bb\'ba\'b3\'e5\'c7\'f8\'d6\'d0\'a3\'a9\'a3\'bb}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 getchar()\'d2\'d4Enter\'bd\'e1\'ca\'f8\'ca\'e4\'c8\'eb\'a3\'ac\'d2\'b2\'b2\'bb\'bb\'e1\'c9\'e1\'c6\'fa\'d7\'ee\'ba\'f3\'b5\'c4\'bb\'d8\'b3\'b5\'b7\'fb\'a3\'bb}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \'b6\'c1\'c8\'a1\'d7\'d6\'b7\'fb\'b4\'ae\'ca\'b1\'a3\'ba}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 scanf()\'d2\'d4Space\'a1\'a2Enter\'a1\'a2Tab\'bd\'e1\'ca\'f8\'d2\'bb\'b4\'ce\'ca\'e4\'c8\'eb}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 gets()\'d2\'d4Enter\'bd\'e1\'ca\'f8\'ca\'e4\'c8\'eb\'a3\'a8\'bf\'d5\'b8\'f1\'b2\'bb\'bd\'e1\'ca\'f8\'a3\'a9\'a3\'ac\'bd\'d3\'ca\'dc\'bf\'d5\'b8\'f1\'a3\'ac\'bb\'e1\'c9\'e1\'c6\'fa\'d7\'ee\'ba\'f3\'b5\'c4\'bb\'d8\'b3\'b5\'b7\'fb\'a3\'a1}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \'b5\'da\'b6\'fe\'a3\'ba\'ce\'aa\'c1\'cb\'b1\'dc\'c3\'e2\'b3\'f6\'cf\'d6\'c9\'cf\'ca\'f6\'ce\'ca\'cc\'e2\'a3\'ac\'b1\'d8\'d0\'eb\'d2\'aa\'c7\'e5\'bf\'d5\'bb\'ba\'b3\'e5\'c7\'f8\'b5\'c4\'b2\'d0\'c1\'f4\'ca\'fd\'be\'dd\'a3\'ac\'bf\'c9\'d2\'d4\'d3\'c3\'d2\'d4\'cf\'c2\'b5\'c4\'b7\'bd\'b7\'a8\'bd\'e2\'be\'f6\'a3\'ba}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \'b7\'bd\'b7\'a81\'a3\'baC\'d3\'ef\'d1\'d4\'c0\'ef\'cc\'e1\'b9\'a9\'c1\'cb\'ba\'af\'ca\'fd\'c7\'e5\'bf\'d5\'bb\'ba\'b3\'e5\'c7\'f8\'a3\'ac\'d6\'bb\'d2\'aa\'d4\'da\'b6\'c1\'ca\'fd\'be\'dd\'d6\'ae\'c7\'b0\'cf\'c8\'c7\'e5\'bf\'d5\'bb\'ba\'b3\'e5\'c7\'f8\'be\'cd\'c3\'bb\'ce\'ca\'cc\'e2\'c1\'cb\'a3\'a1}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \'d5\'e2\'b8\'f6\'ba\'af\'ca\'fd\'ca\'c7fflush(stdin)\'a1\'a3}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \'b7\'bd\'b7\'a82\'a3\'ba\'d7\'d4\'bc\'ba\'c8\'a1\'b3\'f6\'bb\'ba\'b3\'e5\'c7\'f8\'c0\'ef\'b5\'c4\'b2\'d0\'c1\'f4\'ca\'fd\'be\'dd\'a1\'a3}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \'a3\'a8\'cb\'b5\'ca\'b5\'bb\'b0\'d5\'e2\'b8\'f6\'d3\'ef\'be\'e4\'ce\'d2\'d2\'b2\'c3\'bb\'bf\'b4\'b6\'ae\'a3\'ac\'ba\'c7\'ba\'c7\'a3\'a1\'ce\'aa\'ca\'b2\'c3\'b4\'b8\'f1\'ca\'bd\'bf\'d8\'d6\'c6\'ca\'c7\'d5\'e2\'d1\'f9\'b5\'c4\'a3\'a1\'cf\'a3\'cd\'fb\'b8\'df\'ca\'d6\'d6\'b8\'b5\'e3\'d2\'bb\'cf\'c2\'a3\'a1\'a3\'a9}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }\pard \plain \ql \li0 \ri0 \lisb0 \sa200 \lisa0 \sl276 \slmult1 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs21 \kerning2 \dbch \af1 \hich \af0 \loch \af0 {\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 scanf("%[^\'5cn]",string);}{\fs22 \kerning2 \loch \af1 \hich \af1 \dbch \f1 \lang2052 \langnp2052 \par }} -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/lh/lh.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/lh/lh.cpp -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/snprintf()函数.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/snprintf()函数.txt -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/strcmp.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/strcmp.txt -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/strcpy_s函数.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/strcpy_s函数.txt -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/string.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/string.txt -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/字符串处理函数/sprintf.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/字符串处理函数/sprintf.txt -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/字符串处理函数/sscanf函数.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/字符串处理函数/sscanf函数.txt -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/字符串处理函数/strcat.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/字符串处理函数/strcat.c -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/字符串处理函数/strcpy.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/字符串处理函数/strcpy.c -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/字符串处理函数/strcpy函数用法.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/字符串处理函数/strcpy函数用法.txt -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/字符串处理函数/strncpy.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/字符串处理函数/strncpy.c -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/字符串处理函数/strstr.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/字符串处理函数/strstr.c -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/字符串处理函数/strstr函数.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/字符串处理函数/strstr函数.txt -------------------------------------------------------------------------------- /C language/冷知识/字符和字符串/字符和字符串.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/字符和字符串/字符和字符串.txt -------------------------------------------------------------------------------- /C language/冷知识/宏定义/#define和typedef的区别.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/宏定义/#define和typedef的区别.txt -------------------------------------------------------------------------------- /C language/冷知识/宏定义/#endif.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/宏定义/#endif.txt -------------------------------------------------------------------------------- /C language/冷知识/宏定义/#ifdef.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/宏定义/#ifdef.txt -------------------------------------------------------------------------------- /C language/冷知识/宏定义/#ifndef.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/宏定义/#ifndef.txt -------------------------------------------------------------------------------- /C language/冷知识/宏定义/#和##的用法.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/宏定义/#和##的用法.txt -------------------------------------------------------------------------------- /C language/冷知识/宏定义/C语言中##__VA_ARGS__宏.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/宏定义/C语言中##__VA_ARGS__宏.txt -------------------------------------------------------------------------------- /C language/冷知识/宏定义/DEBUG宏定义.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/宏定义/DEBUG宏定义.txt -------------------------------------------------------------------------------- /C language/冷知识/宏定义/__ATTRIBUTE__ .c: -------------------------------------------------------------------------------- 1 | #include 2 | struct p 3 | { 4 | int a; 5 | char b; 6 | short c; 7 | }__attribute__((aligned(4))) pp; 8 | 9 | 10 | 11 | struct m 12 | { 13 | char a; 14 | int b; 15 | short c; 16 | }__attribute__ ((aligned(4))) mm; 17 | 18 | 19 | struct o 20 | { 21 | int a; 22 | char b; 23 | short c; 24 | }oo; 25 | 26 | 27 | struct x 28 | { 29 | int a; 30 | char b; 31 | struct p px; 32 | short c; 33 | }__attribute__((aligned(8))) xx; 34 | 35 | int main(int argc, char * argv[]) 36 | { 37 | printf("pp = %d, mm = %d\n", sizeof(pp), sizeof(mm)); 38 | printf("oo = %d, xx = %d\n", sizeof(oo), sizeof(xx)); 39 | return 0; 40 | 41 | 42 | } 43 | 44 | /* 45 | 运行结果: 46 | pp = 8, mm = 12 47 | oo = 8, xx = 24 48 | sizeof(pp): 49 | sizeof(a)+sizeof(b)+sizeof(c)=4+1+1=6<8 所以sizeof(pp)=8 50 | 51 | 52 | sizeof(mm): 53 | 但是 a 后面需要用 3 个字节填充,但是 b 是 4 个字节,所以 a 占用 4 字节, b 占用 4 个字节,而 c 又要占用 4 个字节。所以 sizeof(mm)=12 54 | 55 | sizeof(oo): 56 | sizeof(a)+sizeof(b)+sizeof(c)=4+1+2=7 57 | 因为默认是以4 字节对齐,所以sizeof(oo)=8 58 | 59 | 60 | sizeof(xx): 61 | sizeof(a)+ sizeof(b)=4+1=5 62 | sizeof(pp)=8; 即xx 是采用8 字节对齐的,所以要在a ,b 后面添3 个空余字节,然后才能存储px , 63 | 4+1+(3)+8+1=17 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | */ 72 | -------------------------------------------------------------------------------- /C language/冷知识/宏定义/__ATTRIBUTE__ .txt: -------------------------------------------------------------------------------- 1 | http://www.cnblogs.com/astwish/p/3460618.html 2 | GNU C 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute ) 3 | 和类型属性(Type Attribute )。 4 | 5 | __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数。 6 | 7 | __attribute__ 语法格式为:__attribute__ ((attribute-list)) 8 | 9 | 其位置约束为:放于声明的尾部“ ;” 之前。 10 | 11 | 12 | 关键字__attribute__ 也可以对结构体(struct )或共用体(union )进行属性设置。大致有六个参数值可以被设定,即:aligned, packed, transparent_union, unused, deprecated 和 may_alias 。 13 | 14 | 1、aligned (alignment) 15 | 16 | 该属性设定一个指定大小的对齐格式(以字节 为单位),例如: 17 | 18 | struct S { 19 | short b[3]; 20 | } __attribute__ ((aligned (8))); 21 | 22 | typedef int int32_t __attribute__ ((aligned (8))); 23 | 该声明将强制编译器确保(尽它所能)变量类 型为struct S 或者int32_t 的变量在分配空间时采用8 字节对齐方式。 24 | 25 | 如上所述,你可以手动指定对齐的格式,同 样,你也可以使用默认的对齐方式。如果aligned 后面不紧跟一个指定的数字值,那么编译器将依据你的目标机器情况使用最大最有益的对齐方式。例如: 26 | struct S { 27 | short b[3]; 28 | } __attribute__ ((aligned)); 29 | 30 | 这里,如果sizeof (short )的大小为2 (byte ),那么,S 的大小就为6 。取一个2 的次方值,使得该值大于等于6 ,则该值为8 ,所以编译器将设置S 类型的对齐方式为8 字节。 31 | aligned 属性使被设置的对象占用更多的空间,相反的,使用packed 可以减小对象占用的空间。 32 | 需要注意的是,attribute 属性的效力与你的连接器也有关,如果你的连接器最大只支持16 字节对齐,那么你此时定义32 字节对齐也是无济于事的。 33 | 34 | 35 | 36 | 37 | 2、packed: 38 | 使用该属性对struct 或者union 类型进行定义,设定其类型的每一个变量的内存约束。当用在enum 类型 定义时,暗示了应该使用最小完整的类型(it indicates that the smallest integral type should be used)。 39 | 40 | 下面的例子中,packed_struct 类型的变量数组中的值将会紧紧的靠在一起,但内部的成员变量s 不会被“pack” ,如果希望内部的成员变量也被packed 的话,unpacked-struct 也需要使用packed 进行相应的约束。 41 | 42 | struct unpacked_struct 43 | { 44 | char c; 45 | int i; 46 | 47 | }; 48 | 49 | struct packed_struct 50 | { 51 | char c; 52 | int i; 53 | struct unpacked_struct s; 54 | }__attribute__ ((__packed__)); 55 | 56 | 下面的例子中使用__attribute__ 属性定义了一些结构体及其变量,并给出了输出结果和对结果的分析。 57 | 58 | 59 | 60 | ### \__attribute__((destructor)) 61 | 62 | 确保此函数在 在main函数被调用之后调用; 63 | 64 | 65 | 66 | ``` 67 | __attribute__((destructor)) 68 | static void afterMain(void) { 69 | NSLog(@"afterMain"); 70 | } 71 | ``` 72 | 73 | -------------------------------------------------------------------------------- /C language/冷知识/宏定义/__attribute__.md: -------------------------------------------------------------------------------- 1 | ## __attribute 语法的来源 2 | 3 | GNU C 的一大特色就是__attribute__ 机制。attribute 可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。 4 | 5 | 其位置约束为: 放于声明的尾部“;” 之前 6 | 7 | attribute 书写特征为: attribute 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的\__attribute__ 参数。 8 | 9 | 10 | 11 | attribute 语法格式为: attribute ((attribute-list)) 12 | 13 | 14 | 15 | - 当\__attribute__ 用于修饰对象时,它就如同C 语言语法体系结构的类型限定符,跟const , volatile , restrict 等属一类。 16 | - 当\__attribute__ 用于修饰函数时,它就相当于一个函数说明符,跟inline,Noreturn 属同一类。 17 | - 当\__attribute__ 用于修饰一个结构体,联合体或者枚举类型,该限定符只能放在类型标识符之前。 18 | 19 | ## __attribute 所支持的类型 20 | 21 | 当我们需要识别当前编译器能否支持GNU 语法拓展,我们可以使用 __GNU __ 宏作为区分 22 | 23 | | 函数属性(Function Attribute) | 类型属性(Type Attributes) | 变量属性(Variable Attribute) | 24 | | ---------------------------- | ------------------------- | ----------------------------- | 25 | | noreturn | aligned | alias | 26 | | noinline | packed | at(address) | 27 | | always_inline | bitband | aligned | 28 | | flatten | | deprecated | 29 | | pure | | noinline | 30 | | const | | packed | 31 | | constructor | | weak | 32 | | destructor | | weakref(“target”) | 33 | | sentinel | | section(“name”) | 34 | | format | | unused | 35 | | format_arg | | used | 36 | | section | | visibility(“visibility_type”) | 37 | | used | | zero_init | 38 | | unused | | | 39 | | deprecated | | | 40 | | weak | | | 41 | | malloc | | | 42 | | alias | | | 43 | | warn_unused_result | | | 44 | | nonnull | | | 45 | | nothrow (不抛出C++ 异常) | | | 46 | | aligned | | | 47 | 48 | 49 | 50 | 51 | 52 | ## 常用函数属性 53 | 54 | ### \__attribute__((noreturn)) 55 | 56 | 表示没有返回值 57 | 58 | - 这个属性告诉编译器函数不会返回,这可以用来抑制关于未达到代码路径的错误。 C库函数abort()和exit()都使用此属性声明: 59 | 60 | 使用例子: 61 | 62 | 一般情况: 63 | 64 | ``` 65 | cat test1.c 66 | extern void exitnow(); 67 | 68 | int foo(int n) 69 | { 70 | if ( n > 0 ) 71 | { 72 | exitnow(); 73 | /* control never reaches this point */ 74 | } 75 | else 76 | return 0; 77 | } 78 | 79 | $ cc -c -Wall test1.c 80 | test1.c: In function `foo': 81 | test1.c:9: warning: this function may return with or without a value 82 | ``` 83 | 84 | 但是我们使用上面的\__attribute__((noreturn))的话,就不会有warning产生: 85 | 86 | ``` 87 | $ cat test2.c 88 | extern void exitnow() __attribute__((noreturn)); 89 | 90 | int foo(int n) 91 | { 92 | if ( n > 0 ) 93 | exitnow(); 94 | else 95 | return 0; 96 | } 97 | 98 | $ cc -c -Wall test2.c 99 | no warnings! 100 | ``` 101 | 102 | 103 | 104 | ### \__attribute__((always_inline)) 105 | 106 | - 对于声明为内联的函数,会强制优化。所有加了attribute((always_inline))的函数再被调用时不会被编译成函数调用而是直接扩展到调用函数体内。 107 | 108 | 举个栗子: 109 | 110 | ``` 111 | __attribute__((always_inline)) void a(){ 112 | print("a"); 113 | } 114 | 115 | void b() 116 | { 117 | a(); 118 | } 119 | ``` 120 | 121 | 编译以后就是: 122 | 123 | ``` 124 | void b() 125 | { 126 | print("a"); 127 | } 128 | ``` 129 | 130 | 131 | 132 | 133 | 134 | ### \__attribute__((noinline)) 135 | 136 | - 与上面的相反,声明为非内联函数 137 | 138 | 139 | 140 | ### \__attribute__((flatten)) 141 | 142 | - 用此修饰的函数,在函数中调用的每一个函数都将尽可能地做内联处理。而用flatten 属性修饰的函数,是否内联处理,就要根据编译器当前的编译选项以及当前上下文来定。 143 | 144 | 145 | 146 | ### \__attribute__((pure)) 147 | 用pure属性修饰的函数用来说明该函数除了返回值之外没有其他任何 效果,并且该函数所返回的值仅仅依赖于函数的形参以及/或全局对象。用 pure属性所修饰的函数可以用来辅助编译器做消除公共子表达式以及帮助 做循环优化,使用这种函数就好比使用算术操作符一般。 148 | 149 | 150 | 151 | ### \__attribute__((constructor)) 152 | 153 | 确保此函数在 在main函数被调用之前调用; 154 | 155 | constructor和destructor会在ELF文件中添加两个段-.ctors和.dtors。当动态库或程序在加载时,会检查是否存在这两个段,如果存在执行对应的代码。 156 | 157 | 例子: 158 | 159 | ``` 160 | int main(int argc, char * argv[]) { 161 | @autoreleasepool { 162 | printf("main function"); 163 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 164 | } 165 | } 166 | __attribute__((constructor)) static void beforeFunction() 167 | { 168 | printf("beforeFunction\n"); 169 | } 170 | ``` 171 | 172 | 然后运行,发现打印如下: 173 | 174 | ``` 175 | beforeFunction 176 | main function 177 | ``` 178 | 179 | ***带有优先级的参数*** 180 | 181 | 按照文档中所说,我们还可以给属性设置优先级.这些函数并不非要写到main.m文件中,无论写到哪里,结果都是一样的.但是,为了更显式的让阅读者看到这些定义,至少,还是在main.m文件中留个声明. 182 | 183 | 声明和实现分离的写法如下: 184 | 185 | ``` 186 | //声明 187 | __attribute__((constructor(101))) void before1(); // 里面的数字越小优先级越高,1 ~ 100 为系统保留 188 | 189 | //实现 190 | void before1() 191 | { 192 | printf("before1\n"); 193 | } 194 | ``` 195 | 196 | 下面我仅仅用作测试,就不分开写了: 197 | 198 | ``` 199 | static __attribute__((constructor(101))) void before1() 200 | { 201 | 202 | printf("before1\n"); 203 | } 204 | static __attribute__((constructor(102))) void before2() 205 | { 206 | 207 | printf("before2\n"); 208 | } 209 | static __attribute__((constructor(102))) void before3() 210 | { 211 | 212 | printf("before3\n"); 213 | } 214 | ``` 215 | 216 | 217 | 218 | ### \__attribute__((destructor)) 219 | 220 | 确保此函数在 在main函数被调用之后调 221 | 222 | 223 | 224 | ### \__attribute__((const)) 225 | 用const属性修饰的函数与用pure属性修饰的十分类似,不过const属性比pure更严格,它要求函数不能读全局对象。此外,用const属性修饰的函数的参数不能是一个指针类型,而且在用const属性修饰的函数内往往不能调用一个非const属性的函数。 226 | 227 | 也就是说调用其他文件的外部函数才能成立; 228 | 229 | 230 | 231 | ### \__attribute__((sentinel)) 232 | 提醒程序员“此可变参数函数需要一个NULL作为最后一个参数。 233 | 234 | \__attribute__((sentinel))的作用是提醒程序员:“此可变参数函数需要一个NULL作为最后一个参数。”,而这个NULL参数一般被叫做“哨兵参数”。 235 | 236 | 例子: 237 | 238 | ``` 239 | #include 240 | #include 241 | #include 242 | #include 243 | 244 | void foo(char *first, ...) 245 | { 246 | char *p = (char *)malloc(100), *q = first; 247 | va_list args; 248 | 249 | va_start(args, first); 250 | while(q) 251 | { 252 | strcat(p, q); 253 | q = va_arg(args, char *); 254 | } 255 | va_end(args); 256 | printf("%s\n", p); 257 | 258 | free(p); 259 | 260 | return ; 261 | } 262 | 263 | int main(void) 264 | { 265 | foo("Hello", "World"); 266 | 267 | return 0; 268 | } 269 | ``` 270 | 271 | 使用 272 | 273 | ``` 274 | gcc main.c -Wall 275 | ``` 276 | 277 | 编译没有任何警告。但是很显然,调用foo()时最后一个参数应该是个NULL以表明“可变参数就这么多”。 278 | 程序的运行结果: 279 | 280 | ``` 281 | HelloWorldm1�i� 282 | ``` 283 | 284 | 显然是错误的。 285 | 另:这段程序在某些时候可能运行正常,那是因为在当时的情况下内存中存放”World”字符串的后面正好是个0(也就是NULL)。 286 | 将调用foo()的地方改为 287 | 288 | ``` 289 | foo("Hello", "World", NULL); 290 | ``` 291 | 292 | 才是正确的写法。 293 | 294 | 但是为什么这种问题编译器不发出警告?那是因为你没有让编译器发出这类问题的警告,因为不是所有可变参数函数都需要哨兵参数,比如printf()。 295 | 296 | ``` 297 | /* 第一个参数中规定了有两个待打印项,所以打印时会取"string"和1, 298 | * 多写的"another_string"会被忽略。 299 | * printf()在被调用时明确知道此次调用需要多少个参数,所以也就无需哨兵参数的帮忙。 300 | */ 301 | printf("%s %d\n", "string", 1,"another_string"); 302 | ``` 303 | 304 | 所以\__attribute__((sentinel))的功能就在于此。我们把上面的程序改一下,加一句foo()的声明: 305 | 306 | ``` 307 | void foo(char *first, ...) __attribute__((sentinel)); 308 | ``` 309 | 310 | 这样你再不写哨兵参数,在编译时编译器就会发出警告了: 311 | 312 | ``` 313 | main.c: In function ‘main’: 314 | main.c:28:5: warning: missing sentinel in function call [-Wformat=] 315 | foo(“Hello”, “World”); 316 | ^ 317 | ``` 318 | 319 | 320 | 321 | 322 | 323 | ### \__attribute__((format)) 324 | format属性可以给被声明的函数加上类似printf或者scanf的特征,它可以使编译器检查函数声明和函数实际调用参数之间的格式化字符串是否匹配。format属性告诉编译器,按照printf, scanf等标准C函数参数格式规则对该函数的参数进行检查。这在我们自己封装调试信息的接口时非常的有用。 325 | 326 | format的语法格式为: 327 | 328 | ``` 329 | format (archetype, string-index, first-to-check) 330 | ``` 331 | 332 | 例子: 333 | 334 | ``` 335 | #include 336 | #include 337 | 338 | #if 1 339 | #define CHECK_FMT(a, b) __attribute__((format(printf, a, b))) 340 | #else 341 | #define CHECK_FMT(a, b) 342 | #endif 343 | 344 | void TRACE(const char *fmt, ...) CHECK_FMT(1, 2); 345 | 346 | void TRACE(const char *fmt, ...) 347 | { 348 | va_list ap; 349 | 350 | va_start(ap, fmt); 351 | 352 | (void)printf(fmt, ap); 353 | 354 | va_end(ap); 355 | } 356 | 357 | int main(void) 358 | { 359 | TRACE("iValue = %d\n", 6); 360 | TRACE("iValue = %d\n", "test"); 361 | 362 | return 0; 363 | } 364 | ``` 365 | 366 | 注意:需要打开警告信息即(-Wall)。 367 | 编译结果如下所示: 368 | 369 | ``` 370 | main.cpp: In function ‘int main()’: 371 | main.cpp:26:31: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘const char*’ [-Wformat=] 372 | TRACE("iValue = %d\n", "test"); 373 | ``` 374 | 375 | 如果不使用\__attribute__ format则不会有警告。 376 | 377 | 378 | 379 | ### \__attribute__((section(“name”))) 380 | 381 | 于是本文的大体意思就清晰了,\__attribute__((section("section_name"))),其作用是将作用的函数或数据放入指定名为"section_name"对应的段中。 382 | 383 | MDK给出的帮助文档如下,他将\__attribute__的用法归类到编译器特性里,以变量和函数的两种用法做区分。 384 | 385 | 1.编译时为变量指定段 386 | 387 | ``` 388 | __attribute__((section("name"))) 389 | RealView Compilation Tools for µVision Compiler Reference Guide Version 4.0 390 | 391 | Home > Compiler-specific Features > Variable attributes > __attribute__((section("name"))) 392 | 393 | 4.5.6. __attribute__((section("name"))) 394 | Normally, the ARM compiler places the objects it generates in sections like data and bss. However, you might require additional data sections or you might want a variable to appear in a special section, for example, to map to special hardware. The section attribute specifies that a variable must be placed in a particular data section. If you use the section attribute, read-only variables are placed in RO data sections, read-write variables are placed in RW data sections unless you use the zero_init attribute. In this case, the variable is placed in a ZI section. 395 | 396 | Note 397 | This variable attribute is a GNU compiler extension supported by the ARM compiler. 398 | 399 | Example 400 | /* in RO section */ 401 | const int descriptor[3] __attribute__ ((section ("descr"))) = { 1,2,3 }; 402 | /* in RW section */ 403 | long long rw[10] __attribute__ ((section ("RW"))); 404 | /* in ZI section * 405 | long long altstack[10] __attribute__ ((section ("STACK"), zero_init));/ 406 | ``` 407 | 408 | 409 | 410 | 2.编译时为函数指定段 411 | 412 | ``` 413 | __attribute__((section("name"))) 414 | RealView Compilation Tools for µVision Compiler Reference Guide Version 4.0 415 | 416 | Home > Compiler-specific Features > Function attributes > __attribute__((section("name"))) 417 | 418 | 4.3.13. __attribute__((section("name"))) 419 | The section function attribute enables you to place code in different sections of the image. 420 | 421 | Note 422 | This function attribute is a GNU compiler extension that is supported by the ARM compiler. 423 | 424 | Example 425 | In the following example, Function_Attributes_section_0 is placed into the RO section new_section rather than .text. 426 | 427 | void Function_Attributes_section_0 (void) 428 | __attribute__ ((section ("new_section"))); 429 | void Function_Attributes_section_0 (void) 430 | { 431 | static int aStatic =0; 432 | aStatic++; 433 | } 434 | In the following example, section function attribute overrides the #pragma arm section setting. 435 | 436 | #pragma arm section code="foo" 437 | int f2() 438 | { 439 | return 1; 440 | } // into the 'foo' area 441 | __attribute__ ((section ("bar"))) int f3() 442 | { 443 | return 1; 444 | } // into the 'bar' area 445 | int f4() 446 | { 447 | return 1; 448 | } // into the 'foo' area 449 | #pragma arm section 450 | ``` 451 | 452 | 453 | 454 | 455 | 456 | ### \__attribute__((aligned)) 457 | 458 | 该属性设定一个指定大小的对齐格式(以字节 为单位),例如: 459 | 460 | ``` 461 | struct S { 462 | short b[3]; 463 | } __attribute__ ((aligned (8))); 464 | 465 | typedef int int32_t __attribute__ ((aligned (8))); 466 | ``` 467 | 468 | 该声明将强制编译器确保(尽它所能)变量类 型为struct S 或者int32_t 的变量在分配空间时采用8 字节对齐方式。 469 | 如上所述,你可以手动指定对齐的格式,同 样,你也可以使用默认的对齐方式。如果aligned 后面不紧跟一个指定的数字值,那么编译器将依据你的目标机器情况使用最大最有益的对齐方式。例如: 470 | 471 | ``` 472 | struct S { 473 | short b[3]; 474 | } __attribute__ ((aligned)); 475 | ``` 476 | 477 | 478 | 479 | ### \__attribute__((used)) 480 | 481 | used的作用是告诉编译器,我声明的这个符号是需要保留的。被used修饰以后,意味着即使函数没有被引用,在Release下也不会被优化。如果不加这个修饰,那么Release环境链接器会去掉没有被引用的段。具体的描述可以看gun的官方文档。 482 | 483 | 1、通知编译器在目标文件中保留一个静态函数,即使它没有被引用。 484 | 485 | 2、标记为attribute__((used))的函数被标记在目标文件中,以避免链接器删除未使用的节。 486 | 487 | 3、静态变量也可以标记为used,方法是使用\__attribute__((used))。 488 | 489 | 4、例程 490 | 491 | ``` 492 | static int lose_this(int); 493 | static int keep_this(int) __attribute__((used)); // retained in object file 494 | static int keep_this_too(int) __attribute__((used)); // retained in object file 495 | ``` 496 | 497 | 498 | 499 | ### \__attribute__((unused)) 500 | 501 | \__attribute__((unused))表示可能没有使用,告诉编译器在编译此类型函数或变量时不需报警告。 502 | 503 | ![](https://img-blog.csdnimg.cn/20191121185113820.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lhbmxhaWZhbg==,size_16,color_FFFFFF,t_70) 504 | 505 | 506 | 507 | ### \__attribute__((weak)) 508 | 509 | 我们不确定外部模块是否提供一个函数func,但是我们不得不用这个函数。 510 | 511 | 512 | 513 | #### 一、问题声明 514 | 515 | ``` 516 | extern int func(void); //声明函数,告诉编译器不要管 517 | ................... 518 | 519 | int a = func(); //使用函数 520 | 521 | ................... 522 | ``` 523 | 524 | 这会导致2个结果: 525 | 526 | 1:外部存在这个函数func,并且EXPORT_SYMBOL(func),那么在我自己的模块使用这个函数func,正确。 527 | 528 | 2:外部其实不存在这个函数,那么我们使用func,程序直接崩溃。 529 | 530 | 531 | 532 | #### 二、如何解决 533 | 534 | ``` 535 | 所以这个时候,__attribute__((weak)) 派上了用场。 536 | 537 | 在自己的模块中定义: 538 | 539 | int __attribute__((weak)) func(......) 540 | { 541 | return 0; 542 | } 543 | ``` 544 | 545 | 将本模块的func转成弱符号类型,如果遇到强符号类型(即外部模块定义了func),那么我们在本模块执行的func将会是外部模块定义的func。类似于c++中的重载 546 | 547 | 如果外部模块没有定义,那么,将会调用这个弱符号,也就是在本地定义的func,直接返回了一个1(返回值视具体情况而定) 548 | 549 | 相当于增加了一个默认函数。 550 | 551 | 原理: 552 | 553 | 注: 连接器发现同时存在弱符号和强符号,有限选择强符号,如果发现不存在强符号,只存在弱符号,则选择弱符号。如果都不存在:静态链接,恭喜,编译时报错,动态链接:对不起,系统无法启动。 554 | weak属性只会在静态库(.o .a )中生效,动态库(.so)中不会生效。 555 | 举个例子: 556 | 557 | ``` 558 | strong.c //生成libstrong.so 559 | 560 | #include 561 | void real_func() 562 | { 563 | printf("int real func\n"); 564 | } 565 | 566 | 567 | weak.c //生成libweak.so 568 | 569 | #include 570 | void real_func() __attribute__((weak)); 571 | void real_func() 572 | { 573 | printf("fake func\n"); 574 | } 575 | 576 | main.c // 577 | 578 | #include 579 | extern void real_func(); 580 | void main() 581 | { 582 | real_func(); 583 | } 584 | ``` 585 | 586 | 如果 587 | 588 | gcc main.c -lstrong -lweak 589 | 590 | 那么输出结果"real func"。 591 | 592 | 如果 593 | 594 | gcc main.c -lweak -lstrong 595 | 596 | 那么输出结果为"fake func"。 597 | 598 | 可见,对于动态库,weak属性毫无作用,且main中调用哪个real_func(),取决于顺序。 599 | 600 | 如果将strong.c 和 weak.c编译成.a或者.o 601 | 602 | gcc main.c strong.o weak.o 603 | 604 | 或者 605 | 606 | gcc main.c weak.o strong.o 607 | 608 | 那么输出结果都是"real func"。 609 | 610 | 所以,如果在so中使用weak属性,那么任何不符合预期的情况,都是可能出现的。 611 | 612 | 613 | 614 | ### \__attribute__((malloc)) 615 | 616 | attribute((malloc)) 是由如此标记的函数返回的块不得包含任何指向其他对象的指针.目的是帮助编译器估计哪些指针可能指向同一个对象:该属性告诉GCC它不必担心你的函数返回的对象可能包含指向它正在跟踪的其他东西的指针. 617 | 618 | 619 | 620 | ### \__attribute__((deprecated)) 621 | 622 | 在开发一些库的时候,API的接口可能会过时,为了提醒开发者这个函数已经过时。可以在函数声明时加上attribute((deprecated))属性,如此,只要函数被使用,在编译是都会产生警告,警告信息中包含过时接口的名称及代码中的引用位置。 623 | 624 | attribute可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。 625 | attribute语法格式为:attribute ((attribute)) 626 | 注意: 使用attribute的时候,只能函数的声明处使用attribute, 627 | 628 | ``` 629 | #include 630 | #include 631 | 632 | #ifdef __GNUC__ 633 | # define GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) 634 | #else 635 | # define GCC_VERSION_AT_LEAST(x,y) 0 636 | #endif 637 | 638 | #if GCC_VERSION_AT_LEAST(3,1) 639 | # define attribute_deprecated __attribute__((deprecated)) 640 | #elif defined(_MSC_VER) 641 | # define attribute_deprecated __declspec(deprecated) 642 | #else 643 | # define attribute_deprecated 644 | #endif 645 | 646 | 647 | /* Variable Attribute */ 648 | attribute_deprecated int variable_old = 0; 649 | 650 | /* Function Attribute */ 651 | attribute_deprecated void function_old(void); 652 | 653 | void function_old(void) 654 | { 655 | printf("old function.\n"); 656 | return; 657 | } 658 | 659 | int main(void) 660 | { 661 | variable_old++; 662 | 663 | function_old(); 664 | 665 | return EXIT_SUCCESS; 666 | } 667 | ``` 668 | 669 | 在编译时会出现类似警告: 670 | 671 | ``` 672 | # gcc attribute_deprecated.c -o test 673 | attribute_deprecated.c: In function ‘main’: 674 | attribute_deprecated.c:33: warning: ‘variable_old’ is deprecated (declared at attribute_deprecated.c:20) 675 | attribute_deprecated.c:35: warning: ‘function_old’ is deprecated (declared at attribute_deprecated.c:25) 676 | ``` 677 | 678 | 679 | 680 | ### \__attribute__((alias(source_name)) 681 | 682 | source_name 原函数或者属性名称,(需要主要别名的参数,返回值定义,必须和原来的函数相匹配) 683 | 684 | 例子: 685 | 686 | - 函数别名定义例子 687 | 688 | ``` 689 | void oldFunc(void) 690 | { 691 | printf("%s\n", __FUNCTION__); 692 | } 693 | void newFunc(void) __attribute__((alias("oldFunc"))); 694 | 695 | int main(int argc, char *argv[]) 696 | { 697 | newFunc(); // calls foo 698 | } 699 | /** 程序输出结果 700 | oldFunc 701 | */ 702 | ``` 703 | 704 | - 变量别名定义 705 | 706 | ``` 707 | #include 708 | int oldVar = 1; 709 | extern int newVar __attribute__((alias("oldVar"))); 710 | int main(int argc, char *argv[]) 711 | { 712 | printf("oldVar = %d\n", oldVar); // prints 1 713 | } 714 | /** 程序输出结果 715 | newname = 1 716 | */ 717 | ``` 718 | 719 | 720 | 721 | ### \__attribute__((warn_unused_result)) 722 | 723 | 在编程过程中,有的函数我们需要确保函数的返回值必须被使用。但是如果函数使用者直接调用函数且不使用函数的返回值的话,g++ 不会给出warning。这样可能会导致很难寻觅的bug。如调用realloc函数,函数调用者必须使用函数的返回值获得重新分配内存的指针。 724 | 利用g++ common function attributes 中提供的warn_unused_result 可以保证函数的返回值在没有被使用的时候提示warning,如果在编译选项添加-Werror, 则在编译时就会提示编译错误。 725 | 726 | 727 | 728 | 例子: 729 | 730 | ``` 731 | /************************************************************************* 732 | > File Name: warn_unused_result.cpp 733 | > Author: ce39906 734 | > Mail: ce39906@163.com 735 | > Created Time: 2018-08-24 14:04:00 736 | ************************************************************************/ 737 | 738 | __attribute__ ((warn_unused_result)) 739 | int f(int x) 740 | { 741 | return x / 2; 742 | } 743 | 744 | __attribute__ ((warn_unused_result)) 745 | double f1() 746 | { 747 | return 0.; 748 | } 749 | 750 | class EmptyClass 751 | { 752 | }; 753 | 754 | __attribute__ ((warn_unused_result)) 755 | EmptyClass f2() 756 | { 757 | return EmptyClass(); 758 | } 759 | 760 | class NotEmptyClass 761 | { 762 | int a; 763 | }; 764 | 765 | __attribute__ ((warn_unused_result)) 766 | NotEmptyClass f3() 767 | { 768 | return NotEmptyClass(); 769 | } 770 | 771 | int main() 772 | { 773 | // cause unused_result warning 774 | f(3); 775 | // no unused_result warning 776 | int x = f(3); 777 | (void) x; 778 | // cause unused_result warning 779 | f1(); 780 | // cause unused_result warning 781 | f2(); 782 | // no unused_result warning. WHY?? 783 | f3(); 784 | 785 | return 0; 786 | } 787 | ``` 788 | 789 | 790 | 791 | 编译: 792 | 793 | ``` 794 | g++ -Wall -Wextra warn_unused_result.cpp -o warn_unused_result 795 | ``` 796 | 797 | 798 | 799 | 编译输出如下 800 | 801 | ![](https://myblog-1256683296.cos.ap-beijing.myqcloud.com/unused_result_warn.jpg) 802 | 803 | 804 | 805 | ### \__attribute__((nonnull)) 806 | 807 | 告诉编译器,那些参数不能为NULL ro nil 所以参数类型必须是指针类型 808 | 809 | ``` 810 | - (int)addNum1:(int *)num1 num2:(int *)num2 __attribute__((nonnull (1,2))){//1,2表示第一个和第二个参数不能为空 811 | return *num1 + *num2; 812 | } 813 | 814 | - (NSString *)getHost:(NSURL *)url __attribute__((nonnull (1))){//第一个参数不能为空 815 | return url.host; 816 | } 817 | 818 | ``` 819 | 820 | 821 | 822 | ### \__attribute__((nothrow)) 823 | 824 | 告诉编译器该函数不能抛出错误 825 | 826 | -------------------------------------------------------------------------------- /C language/冷知识/宏定义/__attribute__.txt: -------------------------------------------------------------------------------- 1 | __attribute__ 2 | GNU C 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute ) 3 | 和类型属性(Type Attribute )。 4 | 5 | __attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数。 6 | 7 | http://www.cnblogs.com/astwish/p/3460618.html 8 | 9 | __attribute__((packed))详解 10 | 标签: it 分类: linux程序 11 | 1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的,我在windows下,用vc的编译器也不是紧凑的,用tc的编译器就是紧凑的。例如: 12 | 13 | 在TC下:struct my{ char ch; int a;} sizeof(int)=2;sizeof(my)=3;(紧凑模式) 14 | 15 | 在GCC下:struct my{ char ch; int a;} sizeof(int)=4;sizeof(my)=8;(非紧凑模式) 16 | 17 | 在GCC下:struct my{ char ch; int a;}__attrubte__ ((packed)) sizeof(int)=4;sizeof(my)=5 18 | 19 | 2. __attribute__关键字主要是用来在函数或数据声明中设置其属性。给函数赋给属性的主要目的在于让编译器进行优化。函数声明中的__attribute__((noreturn)),就是告诉编译器这个函数不会返回给调用者,以便编译器在优化时去掉不必要的函数返回代码。 20 | 21 | GNU C的一大特色就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。 22 | 23 | __attribute__书写特征是:__attribute__前后都有两个下划线,并且后面会紧跟一对括弧,括弧里面是相应的__attribute__参数。 24 | 25 | __attribute__语法格式为: 26 | 27 | __attribute__ ((attribute-list)) 28 | 29 | 其位置约束:放于声明的尾部“;”之前。 30 | 31 | 函数属性(Function Attribute):函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大。__attribute__机制也很容易同非GNU应用程序做到兼容之功效。 32 | 33 | GNU CC需要使用 –Wall编译器来击活该功能,这是控制警告信息的一个很好的方式。 34 | 35 | packed属性:使用该属性可以使得变量或者结构体成员使用最小的对齐方式,即对变量是一字节对齐,对域(field)是位对齐。 36 | 37 | 如果你看过GPSR协议在TinyOS中的实现,你一定会注意到下面的语句: 38 | typedef struct { 39 | double x; 40 | double y; 41 | } __attribute__((packed)) position_t; 42 | 43 | 开始我们还可以理解,不久是定义一个结构体嘛!不过看到后面的语句,你可能就会一头雾水了,’ __attribute__((packed))’是什么东西?有什么作用?一连串的疑问马上就会从你脑袋里冒出来。虽然这个对理解整个程序没有什么影响,但我不想让这些疑问一直呆在我的脑子里,负担太重。省得以后念念不忘,而且也许有一天可以用的上呢。搞清楚这个问题吧! 44 | 45 | GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。 46 | __attribute__语法格式为: 47 | __attribute__ ((attribute-list)) 48 | 49 | 其位置约束为:放于声明的尾部“;”之前。 50 | 51 | packed是类型属性(Type Attribute)的一个参数,使用packed可以减小对象占用的空间。需要注意的是,attribute属性的效力与你的连接器也有关,如果你的连接器最大只支持16字节对齐,那么你此时定义32字节对齐也是无济于事的。 52 | 53 | 使用该属性对struct或者union类型进行定义,设定其类型的每一个变量的内存约束。当用在enum类型定义时,暗示了应该使用最小完整的类型(it indicates that the smallest integral type should be used)。 54 | 55 | 下面的例子中,my-packed-struct类型的变量数组中的值会紧凑在一起,但内部的成员变量s不会被“pack”,如果希望内部的成员变量也被packed的话,my-unpacked-struct也需要使用packed进行相应的约束。 56 | struct my_unpacked_struct 57 | { 58 | char c; 59 | int i; 60 | }; 61 | 62 | struct my_packed_struct 63 | { 64 | char c; 65 | int i; 66 | struct my_unpacked_struct s; 67 | }__attribute__ ((__packed__)); 68 | 69 | 70 | 71 | 72 | 73 | 在每个系统上看下这个结构体的长度吧。 74 | 内存对齐,往往是由编译器来做的,如果你使用的是gcc,可以在定义变量时,添加__attribute__,来决定是否使用内存对齐,或是内存对齐到几个字节,以上面的结构体为例: 75 | 1)到4字节,同样可指定对齐到8字节。 76 | struct student 77 | { 78 | char name[7]; 79 | uint32_t id; 80 | char subject[5]; 81 | } __attribute__ ((aligned(4))); 82 | 83 | 2)不对齐,结构体的长度,就是各个变量长度的和 84 | struct student 85 | { 86 | char name[7]; 87 | uint32_t id; 88 | char subject[5]; 89 | } __attribute__ ((packed)); 90 | -------------------------------------------------------------------------------- /C language/冷知识/宏定义/__function__函数.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/宏定义/__function__函数.txt -------------------------------------------------------------------------------- /C language/冷知识/宏定义/__line__和__FILE__.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/宏定义/__line__和__FILE__.txt -------------------------------------------------------------------------------- /C language/冷知识/宏定义/枚举和#define.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/宏定义/枚举和#define.txt -------------------------------------------------------------------------------- /C language/冷知识/宏定义/预处理.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/宏定义/预处理.txt -------------------------------------------------------------------------------- /C language/冷知识/小端模式和大端模式.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/小端模式和大端模式.txt -------------------------------------------------------------------------------- /C language/冷知识/局部变量保存在栈中.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/局部变量保存在栈中.docx -------------------------------------------------------------------------------- /C language/冷知识/局部静态变量,全局静态变量.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/局部静态变量,全局静态变量.txt -------------------------------------------------------------------------------- /C language/冷知识/常用转义字符.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/常用转义字符.txt -------------------------------------------------------------------------------- /C language/冷知识/强符号与弱符号.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/强符号与弱符号.md -------------------------------------------------------------------------------- /C language/冷知识/悬挂指针.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/悬挂指针.docx -------------------------------------------------------------------------------- /C language/冷知识/悬挂指针.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/悬挂指针.txt -------------------------------------------------------------------------------- /C language/冷知识/指针冷知识/NULL指针内存.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/指针冷知识/NULL指针内存.txt -------------------------------------------------------------------------------- /C language/冷知识/指针冷知识/a和&a.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/指针冷知识/a和&a.txt -------------------------------------------------------------------------------- /C language/冷知识/指针冷知识/int p.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/指针冷知识/int p.txt -------------------------------------------------------------------------------- /C language/冷知识/指针冷知识/函数指针/void fun().txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/指针冷知识/函数指针/void fun().txt -------------------------------------------------------------------------------- /C language/冷知识/指针冷知识/函数指针/函数指针.txt: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | typedef int (*pfun)(int j, int i); 4 | int fun(int, int); 5 | 6 | int main( void ) 7 | { 8 | pfun pf; 9 | fun(20, 30); 10 | pf = &fun; 11 | (*pf)(40, 50); 12 | } 13 | 14 | 15 | int fun(int j, int i) 16 | { 17 | printf("j+i=%d\n", j+i); 18 | return j+i; 19 | } 20 | 21 | 使用函数指针: 22 | pfun = fun; 23 | pfun = fun; //这两句是等价的 24 | 此外,我们还能直接使用指向函数的指针调用该函数,无须提前解引用指针: 25 | bool b1 = pfun("helllo", "goodbye"); 26 | bool b2 = (*pfun)("helllo", "goodbye"); 27 | bool b3 = fun("helllo", "goodbye"); 28 | 29 | 30 | 直接使用函数指针类型显得冗长而繁琐。使用typedef和decltype可以简化函数指针的代码: 31 | //函数类型 32 | typedef bool Func(const string &, const string &); 33 | typedef bool decltype(lengthCompare) Func2; 34 | 35 | //等价的 36 | typedef bool (*Func)(const string &, const string &); 37 | typedef bool decltype(lengthCompare) *Func2; 38 | 39 | -------------------------------------------------------------------------------- /C language/冷知识/指针冷知识/地址的强制转换.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/指针冷知识/地址的强制转换.txt -------------------------------------------------------------------------------- /C language/冷知识/指针冷知识/指针与数组的定义与声明.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/指针冷知识/指针与数组的定义与声明.txt -------------------------------------------------------------------------------- /C language/冷知识/指针冷知识/指针数组和数组指针.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/指针冷知识/指针数组和数组指针.txt -------------------------------------------------------------------------------- /C language/冷知识/指针冷知识/指针面试题.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/指针冷知识/指针面试题.txt -------------------------------------------------------------------------------- /C language/冷知识/指针冷知识/数组的内存布局.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/指针冷知识/数组的内存布局.txt -------------------------------------------------------------------------------- /C language/冷知识/指针冷知识/能否向函数传递一个数组.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/指针冷知识/能否向函数传递一个数组.txt -------------------------------------------------------------------------------- /C language/冷知识/排序/冒泡排序的优缺点.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/排序/冒泡排序的优缺点.txt -------------------------------------------------------------------------------- /C language/冷知识/排序/希尔排序.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/排序/希尔排序.jpg -------------------------------------------------------------------------------- /C language/冷知识/接续符.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/接续符.txt -------------------------------------------------------------------------------- /C language/冷知识/斜杠b的转义字符.txt: -------------------------------------------------------------------------------- 1 | 输出一个退格,就是把光标退一个格; -------------------------------------------------------------------------------- /C language/冷知识/无符号和有符号.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/无符号和有符号.txt -------------------------------------------------------------------------------- /C language/冷知识/无返回值return.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/无返回值return.txt -------------------------------------------------------------------------------- /C language/冷知识/时间复杂度.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/时间复杂度.txt -------------------------------------------------------------------------------- /C language/冷知识/柔性数组.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/柔性数组.txt -------------------------------------------------------------------------------- /C language/冷知识/标识符.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/标识符.txt -------------------------------------------------------------------------------- /C language/冷知识/符号表.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/符号表.docx -------------------------------------------------------------------------------- /C language/冷知识/类型转换.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/类型转换.txt -------------------------------------------------------------------------------- /C language/冷知识/线性结构和非线性结构的区别.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/线性结构和非线性结构的区别.txt -------------------------------------------------------------------------------- /C language/冷知识/编译和链接/ELF文件结构描述.md: -------------------------------------------------------------------------------- 1 | # ELF文件结构描述 2 | 3 | --- 4 | ELF目标文件格式最前部ELF文件头(ELF Header),它包含了描述了整个文件的基本属性,比如ELF文件版本、目标机器型号、程序入口地址等。其中ELF文件与段有关的重要结构就是段表(Section Header Table) 5 | ## 文件头 6 | 我们可以使用readelf命令来详细查看elf文件,代码如清单3-2所示: 7 | ![Markdown](http://i1.bvimg.com/641036/c612f100c3c71446.png) 8 | 从上面输出的结构可以看到:ELF文件头定义了ELF魔数、文件机器字节长度、数据存储方式、版本、运行平台等。 9 | 10 | ELF文件头结构及相关常数被定义在“/usr/include/elf.h”,因为ELF文件在各种平台下都通用,ELF文件有32位版本和64位版本的ELF文件的文件头内容是一样的,只不过有些成员的大小不一样。它的文件图也有两种版本:分别叫**“Elf32_Ehdr”**和**“Elf64_Ehdr”**。 11 | 12 | ```C 13 | typedef struct { 14 | unsigned char e_ident[16]; 15 | Elf32_Half e_type; 16 | Elf32_Half e_machine; 17 | Elf32_Word e_version; 18 | Elf32_Addr e_entry; 19 | Elf32_Off e_phoff; 20 | Elf32_Off e_shoff; 21 | Elf32_Word e_flags; 22 | Elf32_Half e_ehsize; 23 | Elf32_Half e_phentsize; 24 | Elf32_Half e_phnum; 25 | Elf32_Half e_shentsize; 26 | Elf32_Half e_shnum; 27 | Elf32_Half e_shstrndx; 28 | }Elf32_Ehdr; 29 | ``` 30 | ![Markdown](http://i1.bvimg.com/641036/c612f100c3c71446.png) 31 | ![Markdown](http://i2.bvimg.com/641036/90f9474f053aae0c.png) 32 | 33 | ## 段表 34 | 段表就是保存ELF文件中各种各样段的基本属性的结构。段表是ELF除了文件以外的最重要结构体,它描述了ELF的各个段的信息,ELF文件的段结构就是由段表决定的。编译器、链接器和装载器都是依靠段表来定位和访问各个段的属性的。段表在ELF文件中的位置由ELF文件头的“e_shoff”成员决定的,比如SimpleSection.o中,段表位于偏移0x118。 35 | ![Markdown](http://i2.bvimg.com/641036/13738e77f9e63f71.png) 36 | 37 | ## 重定位表 38 | 我们注意到:SimpleSection.o中有一个叫做".rel.text"的段,它的类型是(sh_type)为“SHT_REL”,也就是说它是一个重定位表(Relocation Table)。正如我们开始所说的,链接器在处理目标文件时,须要对目标文件中某些部位进行重定位,即代码段和数据段中哪些对绝对地址的引用的位置。这些重定位的信息都记录在ELF文件的重定位表里面,对于每个须要重定位代码段或数据段,都会有一个相应的重定位表。 39 | 40 | ## 字符串表 41 | ELF文件中用到了许多的字符串,比如段名,变量名等。因为字符串的长度往往是不定的,所以用固定的结构来表示它比较困难。一种常见的做法是把字符串集中起来存放到一个表,然后使用字符串在表中的偏移来引用字符串。 42 | 通常用这种方式,在ELF文件中引用字符串只需给一个数字下标即可,不用考虑字符串的长度问题。一般字符串标在ELF文件中国也以段的方式保存,常见的段名为“.strtab”或“.shstrtab”。这两个字符串分别表示为字符串表和段表字符串表。 43 | 只有分析ELF文件头,就可以得到段表和段表字符串表的位置,从而解析整个ELF文件。 44 | 45 | ## 链接的接口-符号 46 | 链接的过程的本质就是要把多个不同目标文件之间相互“粘”到一起。或者说像玩具积木一样,可以拼装成一个整体。为了使不同目标文件之间能够相互黏合,这些目标文件之间必须有固定的规则才行,就像积木模块必须有凹凸部分才能相互黏合。**在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量的地址的引用。** 47 | 比如目标文件B要用到目标文件中的函数“foo”,那么我们就成目标文件A定义(Define)了函数“foo”,称目标文件B引用(Reference)了目标文件A中的函数“foo”。这两个概念也同样适用于变量。每个函数或变量都有自己独特的名字,才能避免链接过程中不同变量和函数之间的混淆。在链接中,我们将函数和变量统称为符号(Symbol),函数名或变量名就是符号名(Symbol Name)。 48 | 我们可以将符号看作是链接中的粘合剂,整个链接过程正是基于符号才能够完成。链接过程中很关键的一部分是符号的管理,每一个目标文件都会有一个相应的符号表(Symbol Table),这个表里记录了目标文件所用到的所有符号。每个定义的符号有一个对应的值,叫做符号值(Symbol Value),对于变量和函数来说,符号值就是它们的地址,除了函数和变量之外,还存在着其他几种不常用的符号。我们将符号表中的所有符号进行分类,它们有可能是下面这些类型中的几种: 49 | 50 | - 定义在本目文件中的全局符号,可以被其他目标文件引用,比如SimpleSection.o里面的“func1”、“main”和“global_init_val”。 51 | - 在本目标文件中引用的全局符号,却没有定义在本目标文件,这一般叫做外部符号(External Symbol),也就是我们前面所讲的符号引用。比如SimpleSection.o里面的“printf” 52 | - 段名,这种符号往往是由编译器产生,它的值就是该段的起始地址。 53 | - 局部符号,这类符号只在编译单元内部可见。 54 | - 行号信息。 55 | 对于我们来说,最值得关注的是全局符号,即上面的第一类和第二类。 56 | 57 | ### ELF符号表结构 58 | ELF文件中的符号表往往是文件中的一个段,段名一般叫做“.symtab”。符号表的结构很简单,它是一个Elf32_Sym结构(32位ELF文件)的数组,每个Elf32_Sym结构对应一个符号。这个数组的第一个元素,也就是下标0的元素为无效的“未定义”符号。Elf32_Sym的结构对应如下: 59 | ```C 60 | typedef struct { 61 | Elf32_Word st_name; 62 | Elf32_Addr st_value; 63 | Elf32_Word st_size; 64 | unsigned char st_info; 65 | unsigned char st_other; 66 | Elf32_Half st_shndx; 67 | } Elf32_Sym; 68 | ``` 69 | st_name | 符号名。这个成员包含了该符号名在字符串表中的下标 70 | - | :-: | 71 | st_value | 符号对应的值。这个值跟符号有关,可能是一个绝对值 72 | st_size | 符号大小 73 | st_info | 符号类型和绑定信息 74 | st_other | 该成员目前为0,没用 75 | st_shndx | 符号所在段 76 | 77 | ### 特殊符号 78 | 当我们使用ld作为链接器产生可执行文件,它会为我们定义很多特殊符号。这些符号并没有在你的程序中定义,但是你可以直接声明并引用它,我们称之为特殊符号。其实这些符号是被定义在链接器脚本中的,我们无须定义它们,但可以声明它们并且使用它们。链接器在程序最终连接成可执行文件将其解析成正确的值,注意,只有使用ld链接生成最终可执行文件的时候这些符号才会存在。 79 | 几个很具有代表性的特殊符号如下: 80 | 81 | - __executable_start,该符号为程序的起始地址 82 | - __etext或_etext或etext,该符号为代码段结束地址,即代码段最末尾的地址 83 | - _edata或edata,该符号为数据段结束地址,即数据段的最末尾地址。 84 | - _end或end,该符号为程序的结束地址。 85 | - 以上地址都为程序被装载的虚拟地址。 86 | 我们可以在程序中直接使用这些符号。 87 | 88 | ### 符号修饰和函数签名 89 | 在早期,编译器编译源代码产生目标文件时,符号名与相应的变量和函数名字一样的。比如在一个汇编源代码中包含了一个函数foo,那么汇编器将它编译成目标文件后,foo在目标文件中所对应的符号名也是foo。后来的UNIX平台和C语言发明时,已经存在了相当多的使用汇编编写的库和目标文件。这样就产生了一个问题,那就是如果一个c程序要使用这些库的话,C语言不可以使用这些库中定义的函数和变量的名字作为符号名,否则将会跟现有的目标文件冲突。比如有个用汇编语言编写的库定义了一个函数叫做main,那么我们在C语言里面就不可以定义一个main函数或变量了。同样的道理,如果一个C语言的目标文件要用到一个使用Fortran语言编写的目标文件,我们也必须防止它们的名称冲突。 90 | 为了防止类似的符号名冲突,UNIX的C语言就规定,C语言源代码文件中的所有全局变量和函数经过编译后,相对应的符号名加上“_”。而Fortran语言的源代码经过编译以后,所有符号名前加上“_”,后面也加上“_” 91 | 这种方式虽然能够减少冲突的概率,但还是有可能造成冲突。于是C++开始考虑到这个问题,增加了namespace来解决多模块的符号冲突问题。 92 | 93 | 94 | 95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /C language/冷知识/编译和链接/README.md: -------------------------------------------------------------------------------- 1 | 现在版本的GCC把预编译和编译两个步骤合并成一个步骤,使用一个cc1的程序来完成这两个步骤。这个程序位于"/usr/lib/gcc/i486-linux-gnu/4.1/",我们也可以直接调用cc1来完成它 -------------------------------------------------------------------------------- /C language/冷知识/编译和链接/gdb编译器的使用.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/编译和链接/gdb编译器的使用.docx -------------------------------------------------------------------------------- /C language/冷知识/编译和链接/动态库和静态库的那些事.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/编译和链接/动态库和静态库的那些事.docx -------------------------------------------------------------------------------- /C language/冷知识/编译和链接/符号.txt: -------------------------------------------------------------------------------- 1 | 链接的接口-符号 2 | 链接的过程的本质就是要把多个不同目标文件之间相互“粘”到一起。或者说像玩具积木一样,可以拼装成一个整体。为了使不同目标文件之间能够相互黏合,这些目标文件之间必须有固定的规则才行,就像积木模块必须有凹凸部分才能相互黏合。**在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量的地址的引用。** 3 | 比如目标文件B要用到目标文件中的函数“foo”,那么我们就成目标文件A定义(Define)了函数“foo”,称目标文件B引用(Reference)了目标文件A中的函数“foo”。这两个概念也同样适用于变量。每个函数或变量都有自己独特的名字,才能避免链接过程中不同变量和函数之间的混淆。在链接中,我们将函数和变量统称为符号(Symbol),函数名或变量名就是符号名(Symbol Name)。 4 | 我们可以将符号看作是链接中的粘合剂,整个链接过程正是基于符号才能够完成。链接过程中很关键的一部分是符号的管理,每一个目标文件都会有一个相应的符号表(Symbol Table),这个表里记录了目标文件所用到的所有符号。每个定义的符号有一个对应的值,叫做符号值(Symbol Value),对于变量和函数来说,符号值就是它们的地址,除了函数和变量之外,还存在着其他几种不常用的符号。我们将符号表中的所有符号进行分类,它们有可能是下面这些类型中的几种: 5 | 6 | - 定义在本目文件中的全局符号,可以被其他目标文件引用,比如SimpleSection.o里面的“func1”、“main”和“global_init_val”。 7 | - 在本目标文件中引用的全局符号,却没有定义在本目标文件,这一般叫做外部符号(External Symbol),也就是我们前面所讲的符号引用。比如SimpleSection.o里面的“printf” 8 | - 段名,这种符号往往是由编译器产生,它的值就是该段的起始地址。 9 | - 局部符号,这类符号只在编译单元内部可见。 10 | - 行号信息。 11 | 对于我们来说,最值得关注的是全局符号,即上面的第一类和第二类。 -------------------------------------------------------------------------------- /C language/冷知识/编译和链接/符号表.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/编译和链接/符号表.docx -------------------------------------------------------------------------------- /C language/冷知识/编译和链接/调试信息.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/编译和链接/调试信息.docx -------------------------------------------------------------------------------- /C language/冷知识/编译和链接/链接器的作用.md: -------------------------------------------------------------------------------- 1 | # 链接器做了什么? 2 | 3 | 4 | --- 5 | ## 机器指令的历史 6 | 为了更好的理解计算机程序的编译和链接的过程,我们简单地回顾计算机程序开发的历史一定会非常有益。 7 | 最原始的设备是就是纸带,即在纸带上打相应的孔。 8 | 这个过程我们可以通过图2-6来看到,假设有一种计算机,它的每条指令是一个字节,也就是8位。它的高4位是0001,表示这是一种跳转指令,低4位存放的是跳转目的地的绝对地址。我们可以从图2-6中看到,这个程序的第一条指令就是一条跳转指令,它的目的地址是第5条指令(注意,第5条指令的绝对地址是4).至于0和1怎么映射到纸带上,这个应该很容易理解,比如我们可以规定纸带上每行有8个孔位,每个孔位代表一位,穿孔表示0,未穿孔表示1。 9 | ![Markdown](http://i1.bvimg.com/641036/27d3e2b51e986d9a.png) 10 | 11 | ## 链接的原因 12 | 在一个程序被分割为多个模块以后,这些模块之间最后如何组合形成一个单一的程序是须要解决的问题。模块之间如何组合的问题可以归结为**模块之间如何通信的问题**,最常见的属于静态语言的C、C++之间通信的方式,一种是模块之间的函数调用,另外一种是模块间的变量访问。函数访问须知道目标函数的地址,变量访问也须知道目标变量的地址,所以这两种方式都可以归结为一种方式,那就是模块之间的符号引用。模块间依靠符号来通信类似于拼图版,定义符号的模块多出一个区域,引用该符号的模块刚好烧录那一块区域,两者的拼接刚好完美组合。这个模块组合的过程就是链接。 13 | ![Markdown](http://i4.bvimg.com/641036/c3ec5a0f1619aed6.png) 14 | 15 | ## 静态链接 16 | 链接过程主要包括了**地址和空间分配**,**符号决议**和**重定位**等这些步骤。 17 | >符号决议有时候也被叫做符号绑定(Symbol Binding)、名称绑定(Name Binding)。甚至还有叫做地址绑定(Address Binding)、指令绑定(Instruction Binding)的,大体上它们的意思都一样,但从细节角度来区分,它们之间还是存在一定区别的,比如“决议”更倾向于静态链接,而“绑定”更倾向于动态链接,即它们所使用的范围不一样。在静态链接中,我们统一称为“符号决议”。 18 | 19 | 最基本的静态链接过程如图2-8所示。编译过程如下图: 20 | ![Markdown](http://i2.bvimg.com/641036/e69a91a51d075d2a.png) 21 | 现代编译和链接过程并非想象那么复杂,它还是一个容易理解的概念,比如我们在程序模块main.c使用另外一个模块func.c中的函数foo()。我们在main.c模块中每一处调用的foo的时候都必须确切知道foo函数的地址,所以它暂时把这些调用foo的指令的目标地址搁置,等待最后链接的时候由链接器去将这些指令的目标地址进行修正,则填入正确的foo函数地址。当func.c模块重新编译,foo函数的地址有可能改变时,那么我们在main.c中所有使用到foo的地址的指令将要全部重新调整。这些繁琐的工作将成为程序员的噩梦。使用链接器,你可以直接引用其他模块的函数和全局变量而无需知道它们的地址,因为链接器,你可以直接引用其他模块的函数和全局变量而无须知道它们的地址,因为链接器在链接的时候会根据引用的符号foo,自动去相应的func.c模块查找foo的地址,然后将main.c模块中所有引用到foo的指令重新修正,让它们的目标地址为真正的foo函数的地址。这就是静态链接的最基本功能和作用。 22 | 在链接过程中,对其他定义在目标文件中的函数调用的指令须要被重新调整,对使用其他定义在其他目标文件的变量来说,也存在同样的问题。让我们结合具体CPU指令来理解这个过程,假设我们有个全局变量,比如我们在目标文件中B里面有一个指令: 23 | movl $0x2a, var 24 | 这条指令就是给这个var变量赋值0x2a,相当于C语言中的语句var=42,然后我们编译目标文件B,得到这条指令机器码,如图2-9所示: 25 | ![Markdown](http://i2.bvimg.com/641036/8567d7b3dc5e9329.png) 26 | 由于在编译目标文件B的时候,编译器并不知道变量var的目标地址,所以编译器在无法确定地址的情况下,将这条mov指令的目标地址置为0,等待链接器在将目标文件A和B链接起来的时候再将其修正。 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /C language/冷知识/编译和链接/预处理的过程.txt: -------------------------------------------------------------------------------- 1 | 预编译过程主要处理那些源代码文件中以“#“开始的预编译指令。比如"#include"、“#define”等,主要处理规则如下: 2 | - 将所有的#define删除,并且展开所有的宏定义; 3 | - 处理所有条件预编译指令,比如“#if”、“#ifdef”、“#elif”、“#else”、“#endif”。 4 | - 处理“#include” 预编译指令,将被包含的文件插入该编译指令的位置。注意:这个过程是递归进行的,也就是说被包含的文件可能还 5 | 包含其他文件。 6 | - 删除所有注释 7 | - 添加行号和文件名标识,比如#2 “hello.c” 2,以便于编译时编译器产生的调试用的行号信息及用于编译产生的编译错误或警告时能够显示 8 | 行号。 9 | - 保留所有的#pragma 编译器指令,因为编译器需要使用它们; 10 | 11 | 经过预编译后的.i文件不包含任何宏定义,因为所有宏已经展开,并且包含的文件也已经被插入.i文件中。所以当我们无法判断 12 | 宏定义是否正确或头文件是否正确时,也可以查看预编译后的文件来确定问题。 -------------------------------------------------------------------------------- /C language/冷知识/贪心法.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/贪心法.txt -------------------------------------------------------------------------------- /C language/冷知识/赋值.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/赋值.txt -------------------------------------------------------------------------------- /C language/冷知识/静态函数的作用.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/静态函数的作用.txt -------------------------------------------------------------------------------- /C language/冷知识/!和~的区别.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lh233/C-knowledge/e60381d444093e3c65feffe9f8969af4f8e404f8/C language/冷知识/!和~的区别.txt -------------------------------------------------------------------------------- /README.txt: -------------------------------------------------------------------------------- 1 | . 2 | ├── C language 3 | │   ├── C语言函数库详解.docx 4 | │   ├── C语言深度解剖 5 | │   │   ├── C语言深度解剖(第2版)解开程序员面试笔试的秘密 PDF电子书下载 带书签目录 完整版.pdf 6 | │   │   ├── C语言深度解剖(自己注释).pdf 7 | │   │   ├── 计算机网络(谢希仁第五版).pdf 8 | │   │   ├── 冷知识(可用于面试) 9 | │   │   │   ├── 1、signed 和 unsigned.txt 10 | │   │   │   ├── 2、void指针.txt 11 | │   │   │   ├── 3、volatile中的使用.txt 12 | │   │   │   ├── 4、空结构体有多大?.txt 13 | │   │   │   ├── 5、柔性数组.txt 14 | │   │   │   ├── 6、贪心法.txt 15 | │   │   │   └── 7、预处理.txt 16 | │   │   └── 目录.txt 17 | │   ├── LinuxC冷知识 18 | │   │   ├── close(1)和输出到文件中.txt 19 | │   │   ├── dup()和dup2().txt 20 | │   │   ├── gdb使用.docx 21 | │   │   ├── linux定义的64种信号量.txt 22 | │   │   ├── linux命令 23 | │   │   │   ├── arm-linux-readelf.txt 24 | │   │   │   ├── basename命令.txt 25 | │   │   │   ├── cat命令.txt 26 | │   │   │   ├── chmod命令.txt 27 | │   │   │   ├── cp -d命令.txt 28 | │   │   │   ├── df -h.txt 29 | │   │   │   ├── dmesg命令.txt 30 | │   │   │   ├── dos2unix.txt 31 | │   │   │   ├── echo命令.txt 32 | │   │   │   ├── find命令.txt 33 | │   │   │   ├── grep命令.txt 34 | │   │   │   ├── Linux命令--pushd和popd.md 35 | │   │   │   ├── mknod命令.txt 36 | │   │   │   ├── more.txt 37 | │   │   │   ├── mount命令.txt 38 | │   │   │   ├── ps命令.txt 39 | │   │   │   ├── read命令.txt 40 | │   │   │   ├── sed命令.txt 41 | │   │   │   ├── shell if命令.txt 42 | │   │   │   ├── tail命令.txt 43 | │   │   │   ├── tar命令.txt 44 | │   │   │   ├── uname命令.txt 45 | │   │   │   └── 各种符号.docx 46 | │   │   ├── Linux文件夹下各种目录.docx 47 | │   │   ├── man手册.txt 48 | │   │   ├── mmap函数.docx 49 | │   │   ├── perror和strerr的区别.txt 50 | │   │   ├── Sleep和sleep函数.txt 51 | │   │   ├── 标准输入输出.txt 52 | │   │   ├── 二叉树.docx 53 | │   │   ├── 行缓冲和全缓冲.txt 54 | │   │   ├── 进程组和会话期.docx 55 | │   │   ├── 快速定位.txt 56 | │   │   ├── 内存管理.rtf 57 | │   │   ├── 如何将vim和系统剪切板中文本互相复制粘贴.txt 58 | │   │   ├── 软链接和硬链接.txt 59 | │   │   ├── 守护进程.docx 60 | │   │   ├── 文件权限.docx 61 | │   │   └── 正则表达式.txt 62 | │   └── 冷知识 63 | │   ├── %02x.txt 64 | │   ├── 0x 0b.txt 65 | │   ├── a[-1].txt 66 | │   ├── ascLii码表.txt 67 | │   ├── assert函数.txt 68 | │   ├── code dump.docx 69 | │   ├── const用法.txt 70 | │   ├── C和C++混合编程.txt 71 | │   ├── C与汇编的混合编程.txt 72 | │   ├── c语言三个点啥意思.md 73 | │   ├── DEBUG宏定义.txt 74 | │   ├── do{}while(0)的作用.txt 75 | │   ├── EOF语句.txt 76 | │   ├── E-R图.txt 77 | │   ├── exit(0)和exit(-1)的区别.txt 78 | │   ├── #include的区别.txt 79 | │   ├── int main(int argc, char argv[])详解.txt 80 | │   ├── INT_MAX和INT_MIN.txt 81 | │   ├── MSB和LSB.txt 82 | │   ├── sizeof.txt 83 | │   ├── size_t和int区别.txt 84 | │   ├── srand(time(NULL));.txt 85 | │   ├── __stdcall、__cdcel和__fastcall三者的区别.txt 86 | │   ├── structure 87 | │   │   ├── 队列2.tif 88 | │   │   ├── 双向链表.tif 89 | │   │   └── 栈.tif 90 | │   ├── typedef用法.txt 91 | │   ├── UL宏定义.txt 92 | │   ├── UTF-8.txt 93 | │   ├── va_list函数如何实现不定参数.txt 94 | │   ├── volatile关键字.txt 95 | │   ├── 八进制.txt 96 | │   ├── 编译和链接 97 | │   │   ├── c编译、汇编、链接、加载.rtf 98 | │   │   ├── ELF文件结构描述.md 99 | │   │   ├── gdb编译器的使用.docx 100 | │   │   ├── README.md 101 | │   │   ├── 调试信息.docx 102 | │   │   ├── 动态库和静态库的那些事.docx 103 | │   │   ├── 符号.txt 104 | │   │   ├── 符号表.docx 105 | │   │   ├── 链接器的作用.md 106 | │   │   └── 预处理的过程.txt 107 | │   ├── 变量名命名规则.txt 108 | │   ├── 变量取值范围.txt 109 | │   ├── 标识符.txt 110 | │   ├── 不用额外的变量交换同类型的变量.txt 111 | │   ├── 常用转义字符.txt 112 | │   ├── 大小端.txt 113 | │   ├── 反斜杠r和反斜杠n的区别.txt 114 | │   ├── 符号表.docx 115 | │   ├── 赋值.txt 116 | │   ├── 函数 117 | │   │   ├── inline函数.txt 118 | │   │   ├── malloc函数.txt 119 | │   │   ├── mmap函数.docx 120 | │   │   └── 函数调用原理 121 | │   │   ├── 函数传递参数的原理.txt 122 | │   │   └── 函数调用过程.rtf 123 | │   ├── !和~的区别.txt 124 | │   ├── 宏定义 125 | │   │   ├── __ATTRIBUTE__ .c 126 | │   │   ├── __attribute__.txt 127 | │   │   ├── __ATTRIBUTE__ .txt 128 | │   │   ├── C语言中##__VA_ARGS__宏.txt 129 | │   │   ├── DEBUG宏定义.txt 130 | │   │   ├── #define和typedef的区别.txt 131 | │   │   ├── #endif.txt 132 | │   │   ├── __function__函数.txt 133 | │   │   ├── #ifdef.txt 134 | │   │   ├── #ifndef.txt 135 | │   │   ├── __line__和__FILE__.txt 136 | │   │   ├── #和##的用法.txt 137 | │   │   ├── 枚举和#define.txt 138 | │   │   └── 预处理.txt 139 | │   ├── 几种编码方式的区别.txt 140 | │   ├── 接续符.txt 141 | │   ├── 静态函数的作用.txt 142 | │   ├── 局部变量保存在栈中.docx 143 | │   ├── 局部静态变量,全局静态变量.txt 144 | │   ├── 可变参数的c函数.txt 145 | │   ├── 类型转换.txt 146 | │   ├── 内存 147 | │   │   ├── 内存对齐.txt 148 | │   │   ├── 内存分布.jpg 149 | │   │   └── 内存分配.txt 150 | │   ├── 排序 151 | │   │   ├── 归并排序.rtf 152 | │   │   ├── 快速排序.rtf 153 | │   │   ├── 冒泡排序的优缺点.txt 154 | │   │   ├── 希尔排序.jpg 155 | │   │   ├── 希尔排序.rtf 156 | │   │   ├── 选择排序.rtf 157 | │   │   └── 直接插入排序.rtf 158 | │   ├── 柔性数组.txt 159 | │   ├── 声明一个返回数组指针的函数.txt 160 | │   ├── 声明与定义.txt 161 | │   ├── 时间复杂度.txt 162 | │   ├── 贪心法.txt 163 | │   ├── 位域.txt 164 | │   ├── 位运算符.txt 165 | │   ├── 无返回值return.txt 166 | │   ├── 无符号和有符号.txt 167 | │   ├── 线性结构和非线性结构的区别.txt 168 | │   ├── 小端模式和大端模式.txt 169 | │   ├── 斜杠b的转义字符.txt 170 | │   ├── 悬挂指针.docx 171 | │   ├── 悬挂指针.txt 172 | │   ├── 一些运算公式.txt 173 | │   ├── 优先级.txt 174 | │   ├── 原码补码反码.txt 175 | │   ├── 只读变量和常量.txt 176 | │   ├── 指针冷知识 177 | │   │   ├── a和&a.txt 178 | │   │   ├── int p.txt 179 | │   │   ├── NULL指针内存.txt 180 | │   │   ├── 地址的强制转换.txt 181 | │   │   ├── 二维数组与指针.rtf 182 | │   │   ├── 函数指针 183 | │   │   │   ├── void fun().txt 184 | │   │   │   └── 函数指针.txt 185 | │   │   ├── 能否向函数传递一个数组.txt 186 | │   │   ├── 数组的内存布局.txt 187 | │   │   ├── 指针面试题.txt 188 | │   │   ├── 指针数组和数组指针.txt 189 | │   │   └── 指针与数组的定义与声明.txt 190 | │   └── 字符和字符串 191 | │   ├── getchar和putchar.rtf 192 | │   ├── getchar和scanf.rtf 193 | │   ├── gets和getchar.rtf 194 | │   ├── lh 195 | │   │   └── lh.cpp 196 | │   ├── snprintf()函数.txt 197 | │   ├── strcmp.txt 198 | │   ├── strcpy_s函数.txt 199 | │   ├── string.txt 200 | │   ├── 字符串处理函数 201 | │   │   ├── sprintf.txt 202 | │   │   ├── sscanf函数.txt 203 | │   │   ├── strcat.c 204 | │   │   ├── strcpy.c 205 | │   │   ├── strcpy函数用法.txt 206 | │   │   ├── strncpy.c 207 | │   │   ├── strstr.c 208 | │   │   └── strstr函数.txt 209 | │   └── 字符和字符串.txt 210 | ├── git.sh 211 | └── README.txt 212 | 213 | 18 directories, 192 files 214 | --------------------------------------------------------------------------------