局部变量在内存的位置 在编写一个com文件的时候,遇到奇怪的问题:编译正常,运行后显示 “Stack Overflow!”。程序片段如下: #include <stdio.h> int main(int argc,char *argv[]) { int i,n; FILE *f; long int sum=0; char buffer[2048]=; //1K 就在这里指定一个做buffer的变量 if (argc!=2) {printf("usage: checksum file 试验表明,如果在102[......]
[March , 10, 2008] 风俗问题
风俗问题 有一段时间,我认为只有有钱人家风俗多,规矩多,后来发现根本不是 那么回事。比如,我在家吃饭的时候,俺爹总是教育我吃米饭不要趴着吃, 要端起碗吃。又说,这要是在老家你奶奶肯定一筷子打过来。等到我上学了, 工作了,用不锈钢盘子吃饭觉得很别扭,总想端起来吃,而端起来之后又过于 与众不同,大多数人都会认为你要舔盘子。另外,在老家,吃咸鸭蛋的时候, 也有要求必须从什么大头打开,而我总是敲到实心的那一端。 现在我家保留着最有特点的风俗就是烧纸。通常是在过年前几天,买好 黄纸。在另外一张纸上,如同信封一般,[......]
[March , 7, 2008] Watcom C 的笔记9 Watcom C (9)
运算优先级的问题 C语言中,“+ -”的优先级高于“<< >>”因此,下面这段程序无法得到期望值: #include <stdio.h> #include <stdint.h> void main () { uint8_t command_write=1; uint8_t command_read=2; uint8_t command_erase=3; uint8_t command_read_status=4; uint64_t rst=0xFFFFFFFF;[......]
[March , 3, 2008] Watcom C 的笔记8 Watcom C (8)
随机函数 stdlib.h 中的 int rand(void) 产生随机数。需要注意的是,生成的 范围是 0-32767。 直接使用这个参数生成的是伪随机数。 #include <stdio.h> #include <stdlib.h> int main() { int i; for (i=0;i<0x200;i++) { if ((i % 0x10)==0) {printf("\n");} printf("%5d ",rand()); } return 0[......]
[February , 27, 2008] 回乡偶记
回乡偶记 (一)回来之后,听亲戚讲述我奶奶家的历史,让我颇感惊讶。第一件事情是, 我爷爷是48年县城的第一批秘密党员。那时候还没有解放,秘密入的;第二件 事情是,我奶奶家是地主。汗,我一直以为我是“根正苗红”的“三代贫农” ----不过要从我爷爷出身算,是。 (二)飞回来上班的。印象深刻的是坐火车次次都有人广播找医生;坐飞机似乎 次次都有带小孩子的,哭声不断。 (三)飞机上打起来了。一个男人,带着一个女的,女的怀抱很小的孩子,还有 个大约11岁的男孩,不知道什么关系。飞机上的空间挺小的,前面的一个人将 座椅放下来了,大约是阻挡[......]
[February , 25, 2008] 汉诺塔的非递归解法
[February , 23, 2008] 又一种获得当前系统中窗口的Caption的方法,还能取得窗口的handle 下载
[February , 22, 2008] Watcom C 的笔记7 Watcom C (7)
判断是否在 Windows 下 之前使用int 2Fh,ax=1600h 的方法已经失效;现在提出检测CR0 的Bit0 (V86 enabled位)。在Windows的DOS box是 v86 mode。 #include <stdio.h> #include <i86.h> extern short isV86( void ); #pragma aux isV86 = \ "smsw ax ", \ "test ax, 1 ",[......]
[February , 18, 2008] Watcom C 的笔记6 Watcom C (6)
命令行参数的获得 标准C语言定义如下: int main(int argc,char *argv[])。 第一个字符串 argv[0] 是包含全路径的程序名。 #include <stdio.h> int main(int argc,char *argv[]) { int i; printf("You have input %d arguments. Argv[0]=[%s]\n",argc-1,argv[0]); //argv[0] is file name for (i=1;i<argc;i++)[......]
[January , 26, 2008] Watcom C 的笔记5 Watcom C (5)
DOS/4GW PCI 配置空间的读取 参考 http://www.openwatcom.org/index.php/PCI_Device_access_under_32-Bit_PM_DOS 很奇怪的是原文是编译不过的,需要将 Example 中的 #include "pci.h" 改为 #include "pci.c" 才能编译通过。 第一个程序:getpci.c 使用二维数组保存结果,在后面输出: #include <stdio.h> #include "pci.c" int main() { ch[......]