c语言
开水泡面
这个作者很懒,什么都没留下…
展开
-
在linux下代码实现ls -l 命令(利用移位 和 与 操作 对指定位的分离 )(指定位段的分离)
在linux下代码实现ls -l 命令这里重要的是利用移位 和 与 操作 对指定位的分离 我们对要对变量中指定位赋值为1比如对32位中的 第7位赋值为1 我们可以这样 int a = 0x40;但是现在又要补充对对15位进行赋值呢??该怎么做?与0x4000进行或运算,原创 2011-07-30 16:54:18 · 1709 阅读 · 0 评论 -
过程活动调用。编译,运行
说说编译分区的理解编译的时候静态区,常量区,栈区。把变量分配到指定的位置。形成二进制流文件后,里面全是二进制代码, 这时代码区,数据区(常量放在DS中的PS中(这是一种方法)),堆栈区。先从代码区(CS)执行指令,堆栈段里过程记录表动态活动(这里就有函数栈的动态增长,(为什么说 返回局部指针是危险的 就表现在这里)函数调用完后SP返回到调用点的下一个位置,这时函数的局部指针所属的空间并原创 2012-01-06 11:56:51 · 483 阅读 · 0 评论 -
关于c语言的一些你不知道的东西 (位,static,struct)加速。
嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。对这个问题有三种基本的反应1)不知道如何下手。该被面者从没做过任何嵌入式系统的工作。2) 用bit fields。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了的你原创 2011-07-24 22:34:08 · 4780 阅读 · 0 评论 -
c语言中的输入与输出
d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出前缀O) x 以十六进制形式输出无符号整数(不输出前缀OX) u 以十进制形式输出无符号整数 f 以小数形式输出单、双精度实数 e 以指数形式输出单、双精度实数 g 以%f%e中较短的输出宽度输出单、双精度实数 c 输出单个字符 s 输出字符串原创 2012-01-27 21:44:30 · 686 阅读 · 0 评论 -
判断入栈顺序
C语言的函数参数的入栈顺序int i = o;printf("%d,%d\n",++i,i++);//看先执行的是哪个,若为i++则为先从右边开始进栈,反之则反这样测试并不怎么严密,压栈顺序和参数计算顺序不是一回事,所以还是看地址更有保证于是改成这样int fun(int x, int y, int z){ int m; int n; pri原创 2012-02-01 18:24:24 · 677 阅读 · 0 评论 -
源代码阅读
今天看源代码 printf函数的实现方式,从va_start的实现方式发现_bnd (A, _AUPBND) 又在上面发现 _AUPBND的宏定义288 #define _AUPBND (sizeof (acpi_native_int) - 1) //这个AUPBND 是栈 向上增长的意思?还是其他什么意思,这个宏的含义我们要怎么才能得到啊,到底是哪个单词原创 2012-02-26 23:53:09 · 1247 阅读 · 1 评论 -
源代码 关于printf
在里面发现宏 #define do_div(n,base) 展开后 奇怪的代码测试如下: #include 2 3 int main() 4 { 5 char tmp[66]; 6 int num; 7 static const char digits[16] = "0123456789ABCDEF"; /* "GHIJKLMNOPQR STUVWX原创 2012-03-02 23:17:05 · 1697 阅读 · 0 评论 -
gcc 调试汇编 以及 对函数堆栈 的观察
每一个函数独占自己的栈帧空间。当前正在运行的函数的栈帧总是在栈顶。Win32系统提供两个特殊的寄存器用于标识位于系统栈顶端的栈帧。 4.1.4 寄存器与函数栈帧 每一个函数独占自己的栈帧空间。当前正在运行的函数的栈帧总是在栈顶。Win32系统提供两个特殊的寄存器用于标识位于系统栈顶端的栈帧。 (1)ESP:栈指针寄存器(extendedstackpointer),其内存放着一个指针,该指针永原创 2012-03-30 23:50:04 · 2289 阅读 · 0 评论 -
记2011 IOCCC
#include /*2w0,1m2,]_r>i>=>(['0n1'0)1; */int main(int n,char**m){FILE*p,*q;int A,k,a,r,i; char*d="P%" "d\n%d\40%d" "\n%d\n\00wb+", b[1024],y[]="yuriyurarararayuruyuri*da原创 2012-05-02 21:40:06 · 648 阅读 · 0 评论 -
记 2011 IOCCC Best self documenting program
#include #include #define clear 1;if(c>=11){c=0;sscanf(_,"%lf%c",&r,&c);while(*++_-c);}\ else if(argc>=4&&!main(4-(*_++=='('),argv))_++;g:c+=#define puts(d,e) return 0;}{double a;int b;char c=(ar原创 2012-05-02 22:18:30 · 589 阅读 · 0 评论 -
记2011 IOCCC Best ball
#include #include #include #include main() { short a[4];ioctl (0,TIOCGWINSZ,&a);int b,c,d=*a,e=a[1];float f,g, h,i=d/2+d%2+1,j=d/5-1,k=0,l=e/ 2,m=d/4,n=.01*e,o=原创 2012-05-02 22:57:32 · 567 阅读 · 0 评论 -
ARM lcd 显示 问题
/*my word*/#define X )*2+1#define _ )*2#define s ((((((((((((((((((((((((((((((((0unsigned int my_word_1[]={ s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ , s _ _ _ _原创 2012-05-30 15:11:06 · 765 阅读 · 0 评论 -
记2011 IOCCC Best one liner
main(_,l)char**l;{6*putchar(--_%20?_+_/21&56>_?strchr(1[l],_^"pt`u}rxf~c{wk~zyHHOJ]QULGQ[Z"[_/2])?111:46:32:10)^_&&main(2+_,l);}会显示出你按下了哪些小写字母的位置转载 2012-05-02 23:06:13 · 671 阅读 · 0 评论 -
高级指针
首先再来讨论下数组与指针的区别与不同。带着这几个问题 数组名是什么?指针名又是什么?比如 我们常看见的char **p_argv 和char *a_argv[] 。来比较一下二者当成参数的时候,p_argv是个二级指针 是个变量,a_argv是个什么呢?是个数组名不是个变量,那是不是这里会比p_argv少4个字节呢?要看编译器的处理方法?.对二级指针p_argv + 1是把里面放得一级原创 2011-08-08 17:25:01 · 424 阅读 · 0 评论 -
malloc 参数为0 的问题
大家有没想过 问一老师他想都没想就说返回NULL,按书上的一个例子运行也是空,但是我们现在的操作系统并没有这么做,(Linux 和windows xp(只有条件测试了这两个系统)) char *p=NULL;p = (char *)malloc(0);//直接运行的值 调试运行的值 printf("%x\n",p);//p的值已经改变 为0x381000 vc环境 381000p = (c原创 2011-10-28 13:07:41 · 1841 阅读 · 0 评论 -
C语言中的宏undef & define
在做一个菜单的时候,想首次进入菜单的时候进入方法1不是首次进入的时候进入方法2,由于他们之间有公共的一部分 当时用的方法是 利用#define FIRST 然后第一次用完后undef 后面判断FIRST有没定义 ,#ifdef FIRST。。。但在测试的时候却发现运行不尽人意,第二天偶尔看见一篇关于宏定义的解说,才发现 自己从写代码的初期就错了,(语法错误 ) 宏的定义 在 预处理的时候进行处理,原创 2011-11-20 19:52:25 · 2853 阅读 · 0 评论 -
c语言对内存地址的直接操作(读ARM有感)
在ARM中看到了 #define rWTCON (*(volatile unsigned *)0x03000000)然后在函数调用中对这地址直接赋值,rWTCON = (PCLK / (100000-1)刚看到这吓我一跳,以前只听说过没有看过,这里还真这样干了,这就是c语原创 2011-09-03 11:33:01 · 9193 阅读 · 1 评论 -
利用有名管道&无名管道 实现 简单的多人聊天
多人登陆 向服务器发送消息,然后服务器能向刚向她发消息的 客户端回发,当前的bug是 服务器连续向同一客户端发送消息时,客户端会一直接收到第二条信息,待修改;客户端利用子进程的ID建有名管道用于与服务器端通信,服务器端建一公共管道用于与客户端通信/*server.原创 2011-08-07 23:16:58 · 1569 阅读 · 0 评论 -
关于c语言字节对齐(结构体)
结构体的对界,对于结构体,编译器很可能会自动进行成员变量的对齐,以提高存取效率....自然对界指按结构体的成员中sizeof最大的成员对齐(如果sizeof大于CPU的字长,仍然按照CPU字长对齐) ——————>这里加上几句,>>>>>>>计算机以最小的次数能寻址转载 2011-07-16 23:12:50 · 724 阅读 · 0 评论 -
有关操作系统(c语言 || 汇编)
汇编语句中的 INT 21H ,21H是中断号,而中断号是按顺序排列的,中断向量表是从000到1K 的范围内,它的入口地址应该为21*4 = 84H处,每个4字节(其中前两个字节和后两个字节,貌似功能不一样 好像和 80286中的两个16位叠加为1个20位 有类似的相像之处)原创 2011-09-05 12:14:16 · 665 阅读 · 0 评论 -
异或^ ,总线错误bus error
两个数交换,你想到怎么写呢,应用层的人大概只听说过利用另一个变量进行暂存值,还有哪些方法呢? 作为底层学习人员我想你必须知道利用数的位操作, *a ^= *b; *b ^= *a; *a ^= *b; (貌似异或有个直接的什么电路,几部电路就达到了 目得)原创 2011-09-09 09:36:03 · 974 阅读 · 0 评论 -
对活动记录表的操作
#include #include #include jmp_buf begin;//VC提供了在调试窗口运行的语句,值得一试void print(char *p) { printf("%s\n",p); return ;} int main()原创 2011-09-27 22:54:58 · 575 阅读 · 0 评论 -
C语言写病毒,木马
以前在网吧花了大投资的游戏账号被心痛的盗过一次,于是到了大学就傻逼傻逼的想写病毒,木马,出出风头,然后到处到处搜索,相关方法,以为这样就能写出病毒木马。一直持续到前段日子,偶尔看到一本关于杀毒软件是怎么查杀木马的资料,才知晓 自己当时的做法是多么的愚蠢,当时想到的一些方法,很多年原创 2011-07-25 17:29:12 · 19122 阅读 · 3 评论 -
笔试
C语言中结构体的好处高效率:表现在传参数的时候头文件的好处:保密性以及 只提供功能,和调用方法,更好方便用户的使用。 支持标准流cin、cout、cerr和clog的输入和输出,它还支持多字节字符标准流wcin、wcout、wcerr和wc原创 2011-10-13 21:36:09 · 481 阅读 · 0 评论 -
cgic 库 对makefile的回忆 以及gcc动态链接的复习
我们搭建好了boa服务器后,为了方便使用Common Gateway interface (cgi),我们去网上下了一个简单的相关的c函数库,cgic205里面一共才9个文件我们按照里面的例子里面的Makefile文件CFLAGS=-g -WallCC=gccAR=arRANLIB=ranlibLIBS=-L./ -lcgic //动态链接 前面原创 2011-10-29 04:45:55 · 1737 阅读 · 0 评论 -
图形的 宏定义
看看人家老外是怎么用宏的。这个例子摘自《C专家编程》。 根据位模式构建图形图标(icon)或者图形(glyph),是一种小型的位模式映射于屏幕产生的图像。一个位代表图像上的一个像素。如果一个位被设置,那么它所代表的像素就是“亮”的。如果一个位被清除,那么它所代表的像素就是“暗”的。所以,一系列的整数值能够用于为图像编码。类似Iconedit这样的工具就是用于绘图的,他们所输出的是一个包含一系列整型转载 2011-10-31 17:23:43 · 701 阅读 · 0 评论 -
关于stm32 103ze工程
在用别人keil4工程的时候,犯了个低级错误, 当我把他的工程直接在我这边编译,但我发现两边的库文件不一样,于是乎我傻乎乎的将他的库移到我的keil默认的库的地方, 在后来link的时候发现发现并不能找到.h文件里的 标号,这时才恍然大悟。我们包含.h只是留个空位给编译器,然后编译器.......我傻啊,怎么能这样移植别人用的库,而且别人的库又没有编译,这就像去年做软件工程课程设计原创 2011-11-02 00:09:20 · 1089 阅读 · 0 评论 -
设置外设时钟使能时钟
对STM32进行软件开发时,最基本的就是对STM32芯片进行时钟和端口配置,然后是对项目所用到的片上资源进行配置并驱动,下面给出时钟和端口配置代码,该代码几乎涵盖了片上所有时钟和端口配置项目,可根据自己需要进行删除不必要的配置项:/********************************************************************************转载 2011-11-09 11:58:13 · 8794 阅读 · 0 评论 -
C语言细节
老师的牛B其实要站在与他同等的条件下才能观察得到, 老师是个很好的引导,不要盲目相信,理科生要动手去了解答案,问问题他可能从他的专业或者他所理解的角度然后给你答案,而如今都是交叉学科,有次在问到有符号数的移位 他说会出现异常,但我用80x86,VC测试却发现是扩展符号位移位后来在 c专家编程 中看到typedef struct data{int data_1;}data原创 2011-08-31 17:20:08 · 610 阅读 · 0 评论