
c/c++
洪水猛兽行
这个作者很懒,什么都没留下…
展开
-
主机序和网络序
不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序最常见的有两种:1. Little endian:将低序字节存储在起始地址2. Big endian:将高序字节存储在起始地址LE little-endian最符合人的思维的字节序地址低位存储值的低位地址高位存储值的高位BE big-endian最直观的字节序地址低位存储值的高位地址高位存储值的低位例子:在内存中双字0x01020304(DWORD)的存储方式内存地址4...转载 2020-08-31 13:45:11 · 622 阅读 · 0 评论 -
如何通过system函数的返回值来判断执行成功与否。
先看下man对于system的描述,DESCRIPTION system() executes a command specified in command by calling /bin/sh -c command, and returns after the command has been completed.原理就是fork一个子进程,在子进程...原创 2019-06-21 11:25:26 · 3696 阅读 · 0 评论 -
#、##、__VA_ARGS__和##__VA_ARGS__的作用
一、#用来把参数转换成字符串例子一:#define P(A) printf("%s:%d\n",#A,A);int main(int argc, char **argv){int a = 1, b = 2;P(a);P(b);P(a+b);system("pause");}...转载 2019-06-20 16:13:04 · 9144 阅读 · 0 评论 -
c程序定义宏时使用do while(0)的好处。
比如我们定义swap函数,我们一般这么写,#define swap(a,b) \{\int t = a;\a = b;\b = t;\}如果我们如下使用,不会有问题,int main(){ int x = 5,y = 8; swap(x,y); return 0;}因为我们展开就变成如下,int main(){ int x ...原创 2018-10-16 17:09:46 · 305 阅读 · 0 评论 -
c程序响应ctrl+c信号。
代码很简单,做个记录,int quit_flag = 0; void handler(int sig){ quit_flag = 1;}int main(){ signal(SIGINT,handler); while(!quit_flag) { sleep(5); } return 0;} ...原创 2018-10-16 17:00:49 · 5056 阅读 · 0 评论 -
符号表的作用和地位
转自:https://blog.youkuaiyun.com/aigoogle/article/details/45076617在编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,这些信息集中反映了标识符的语义特征属性。在词法分析及语法在分析过程中不断积累和更新表中的信息,并在词法分析到代码生成的各阶段,按各自的需要从表中获取不同的属性信息。不论编译策略是否分趟,符号表的作用和地位是完全一致的。 ...转载 2018-07-11 13:14:52 · 6006 阅读 · 0 评论 -
在进行位操作的时候,一定要注意有符号和无符号数之间的转换。
比如unsigned long long a = 0;char b = 0x80;a = (unsigned long long)b;这样a的值是一个很大的数,除非你这样做,a = (unsigned long long)(b & 0xff);原因是当b与0xff做与运算时,系统会分配一个int类型的临时变量存储结果,这样把int再转换为unsigned long long时就原创 2018-01-03 19:31:06 · 1578 阅读 · 0 评论 -
C语言可变参数函数怎么写?
这里的可变参数指的是参数的个数和类型不确定,比如我们熟悉的printf,原型是int printf(const char *format, ...);那么我们自己怎么实现呢?比如我写个函数名叫foo,参考printf写成如下格式,void foo(const char *fmt,...){}然后我们需要使用stdarg.h这个头文件里的va_start,va_end这两个原创 2017-12-05 11:04:39 · 454 阅读 · 0 评论 -
c语言中如何使用true和false
在C99之前,我想很多人都是自己定义bool类型,以及true和false的值,比如typedef int bool或者#define bool int#define true 1#define false 0在C99出来后,没必要这样做了,C99定义了一个_Bool的类型,你可能会问了,为啥不是bool,如果想用bool的话,也可以,C99提供了头文件stdbool.h,...原创 2017-11-24 17:16:43 · 39249 阅读 · 0 评论 -
main函数一定要有返回值吗?
我们说下C99规定,main是需要有返回值的。其中有2种形式是允许的,int main(){}还有int main(int argc,char *argv[]){}其中argv可以写成char **argv这种形式。如果你忘记最后return了,有些编译器会自动帮你加上。不过我还是建议你自己加上,可以告诉程序你是正常退出还是异常退出。原创 2017-11-24 16:51:23 · 9729 阅读 · 0 评论 -
位操作介绍
符号 描述 运算规则 & 与两个位都为1时,结果才为1| 或 两个位都为0时,结果才为0^ 异或两个位相同为0,相异为1原创 2017-11-16 17:30:54 · 174 阅读 · 0 评论 -
如何获取文件的大小
先用fopen打开文件,然后将文件指针指向文件末尾,再用ftell获取文件指针的位置,即文件大小。FILE *fp = fopen(pFilePath,"r");if (fp){ fseek(fp,0,SEEK_END); long lFileSize = ftell(fp); fclose(fp);}原创 2017-11-16 17:15:58 · 1443 阅读 · 0 评论 -
函数,变量名命名的四种方法
哪四种方法呢?共有匈牙利命名,小驼峰式,大驼峰式,下划线命名。举例说明:匈牙利命名,开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩写。如long lsum = 0;//l是long的缩写小驼峰式,第一个单词首字母小写,后面的单词首字母大写。如long totalNum = 0;大驼峰式,每一个单词的首字母都大写。如long TotalNum = 0;下划线命名,顾名思义,下划线法是随着C...原创 2017-11-07 09:47:18 · 6858 阅读 · 0 评论 -
全局静态变量和局部静态变量的区别
1.全局静态变量只能被当前源文件引用,不能被工程里其它源文件引用。除了这点特殊,其它与普通的全局变量一样。2.局部静态变量,只执行一次初始化,只能被所在函数引用,函数执行完毕,变量仍存在,生存周期贯穿整个程序。原创 2017-09-27 13:40:17 · 5522 阅读 · 0 评论