程序员的自我修养
文章平均质量分 80
知Hu·醉卧沙场
已转知乎-醉卧沙场,如有问题,请到知乎找我
展开
-
char *pname和char name[]的区别
昨天在为glusterfs写一个test case的时候遇到了一个问题,使得以为很简单的问题多耽误了五分钟。最后使用gdb定位问题后才发现自己犯了一个很愚蠢的错误。好了,我们来看一下问题是什么吧。首先程序开始时我使用main函数的argv作为我需要的参数,让测试参数从外部传入。后来我觉得其中一个参数可以固定写在程序里,不需要每次都从外部传入。于是我就做了类似这样的修改(不是原修改,只是原创 2013-12-04 15:36:32 · 3001 阅读 · 0 评论 -
再议O_DIRECT, O_DIRECT与logical_block_size
之前我们说过一篇关于O_DIRECT的问题,那篇是在编译的时候需要注意的问题,编译之后就要运行,关于DIRECT I/O的使用可能很少有人会关注,特别是在C语言里直接使用。如果不是遍写很底层的I/O代码可能不会用到direct io来做什么操作,大部分也都是用默认的buffer io。前不久我们在测试的时候发现LTP也有使用DIRECT I/O的错误,在某些体系结构上会造成运行错误,当然那个问题已原创 2014-12-05 15:16:16 · 2379 阅读 · 0 评论 -
简单函数的返回
上文http://1386160874.spaces.eepw.com.cn/articles/article/item/101726我们说到了函数调用,有调用就要有返回,下面我们说函数的返回。首先为了方便先把代码粘贴到这里: 1#include原创 2014-10-10 14:54:14 · 1100 阅读 · 0 评论 -
要命的编译警告——指针参数类型混乱
前两天在写程序的过程中发现一个问题,编译后运行结果总是不对,修改了很多回算法都不对。由于整个项目代码过长,所以抽出出错的模型重新写一个简单的易于表述的程序,如下: 1#include 2原创 2014-10-10 15:09:38 · 1191 阅读 · 2 评论 -
写一个能输出自己的c程序
今天晚上和一个大一的孩子讨论C语言的问题,闲来无事又看到这个孩子很好学,就出了一个很经典的问题给她:写一个程序输出程序代码本身(不能把源程序open之后输出出来)。对于很多C语言的牛人来说这种问题简直就是糊弄小孩的,好吧,我这个题就是出给小孩纸的;) 在等她解答的过程中我也自己尝试的写了一个程序print_myself.c:#include int main(){原创 2014-10-10 15:07:23 · 1498 阅读 · 0 评论 -
谁执行了我的main函数
接着说“调用”,前面我们提到了一点系统调用,又略微详细的说了一下函数调用,现在接着说一下程序调用,应该说是执行一个可执行程序。前面的几篇文章都在围绕着函数调用栈来说,从main函数开始到每个函数的调用和返回,那么在main函数之前和main函数之后,也就是开始执行程序的main函数之前以及main函数返回后又有什么样的动作呢?当我们在终端输入一个可执行文件的路径名时,如:lin原创 2014-10-10 15:07:33 · 1674 阅读 · 0 评论 -
递归函数的堆栈操作
前文我们介绍了函数调用和返回的过程,下面我们以递归为例进一步看一下函数调用的堆栈操作。我们就先用C语言写一个阶乘的简单递归程序factorial.c: 1#include 2 3int factorial(int a){ 4 int ret; 5 if (a > 1){ 6 re原创 2014-10-10 15:02:35 · 1679 阅读 · 0 评论 -
剖析C语言中a=a+++++a的无聊问题
本文本来属原创,但原文我写在EEPW博客里了http://1386160874.spaces.eepw.com.cn/articles/article/item/100850,所以同时也转载在这里。 今天中午在QQ群里和同僚们闲聊,突然就聊到了a+++++a的问题。这种纯属C语言 “二” 级的问题应该是从a+++a引申出来的吧。于是乎兄弟姐妹们开始讨论它的运算结果,以及改如何理解。更有人写原创 2013-12-05 20:43:31 · 1983 阅读 · 1 评论 -
AT&T汇编语言及其寻址方式简述
汇编语言早已脱离了主流编程语言的行列,可以说现在基本上没有人想用它来完成什么大的项目,但是作为一个程序员懂得汇编语言是一种修养一种底蕴。看不懂汇编的程序员就像不会画鸡蛋的达芬奇,像不会写楷书的王羲之,像不懂TCP/IP的黑客……本文为后文做铺垫,适合已经有一点汇编基础的人快速浏览阅读,如果没有这个基础请自行学习。汇编语言论风格来分主要是两类,一类是Intel汇编,一类是AT&T汇编,分原创 2014-10-10 14:48:28 · 7142 阅读 · 2 评论 -
简单函数的调用原理
上文我们提到了系统调用,现在说一下函数调用。函数调用应该是一个编程者除了写if...else以外最常写的东西了,记得多年前我第一次写一个C语言函数的时候还觉得很神奇。我们的程序不能只有一个代码段,那么做将使得程序很难协同开发和维护,将程序分割为部分进行封装,每一部分都定义良好的接口,这是非常重要的,我一直觉得封装和接口是人类进步的基本方式。好吧,这里我们不讨论封装和接口,我们讨论函数是怎么调用和返原创 2014-10-10 14:49:18 · 4938 阅读 · 0 评论 -
如何调用linux系统调用
所谓调用就是让另一个子模块或子系统帮助自己干一些事,然后再返回回来。在我们的口头语中常常用“调XXXX”,这个“调”字被应用的范围太广了,执行一个API函数时我们会说调XXX,执行一个系统调用时我们也会说调XXX,甚至执行一个可执行文件时我们也会说调XXX…… 实际上仅就上述三种“调”来说,完全就是不同的三个概念。先说一下函数调用: 函数调用最常见,函数原创 2014-10-10 14:50:11 · 1059 阅读 · 0 评论 -
由open()的O_DIRECT参数引发的公共标准的问题
公共标准对C语言程序的影响原创 2014-11-10 18:55:23 · 3970 阅读 · 0 评论 -
欢迎使用CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl转载 2016-04-01 11:21:42 · 996 阅读 · 0 评论