最近学习 C 编程的心得,为了和 lua 集成,把俺喜欢的 java 先放下了。^_^
最先遇到的问题是编译的问题,我觉得环境对于一个新手有致命的阻碍作用。可能有人会说,去 google 一下不就完了,可是,实际上新手可能根本就不知道要 google 什么,我学 c 很多次放弃基本上都是环境原因。
这次弄 c 主要是为了和 lua 脚本语言集成,其实用 java 也有得选,luajava 不失为一个好的选择。但是长久以来的小体积什么都不依赖就能运行的 c 程序(.exe)文件对我很有吸引力,因为发布 java 程序就意味着要伴随十几M的jre(哪位知道不用jre的,请务必教教在下),所以,这次决定了,学习 c!
IDE 嘛,就选择了 CDT,实在是太习惯eclipse了,然后就是用 Programing in lua 中copy个例子下来,编译。我靠,错误,想了想,把 lua 的那些头文件加进来,把 lib 目录也加进来,我靠,还是编译不过,崩溃了,放弃。
sigh,c编译是我永远的痛!
一天在公司里,突然想起有个同事是弄 c 的,问问他吧。他人好热情,给我讲了好多。终于明白了,不仅要把 lib 目录加进来,还要指定具体的 lib 文件名字,编译通过,迎来了全新的世界。
经过一段时间的乱弄,终于如愿的把程序编译成动态链接库(windows下的dll),引入到 lua 里,插曲:lua 原来引入动态链接库是全局的 function 叫 loadlib ,我靠,升级到 5.1 竟然改成了 package.loadlib,害我 google 了半天。不过其实 5.1 的 changelog 里是说了的,^_^
我的 lua 终于可以调 c api 了,快乐之情无法表达啊!
来,再做一个使用 c 访问网页的功能,找了半天,决定使用 wininet 库,跑到 ms 的 msdn 上一顿猛找啊,终于,皇天还不负我这个学c有心人,终于在一个 xx 角落里找到了 wininet 的 api,我,我终于可以用他连网了!
经过一会儿的奋斗,终于,从 http://localhost:8080/index.html 中,把自己 tomcat 的主页访问了出来,快乐的瞬间!
马上就发现这个程序有间歇性失忆,一会儿好用,一会儿不好用。共发生过以下几种失忆情况:
1、把代码 copy 到一个函数中,在 main 调用这个函数,程序运行失败!
2、删除了调试用的 printf 方法,程序运行失败!
3、夸张,这个是最夸张的!把 BOOL b = HttpSendRequest(req, NULL, 0, NULL, 0); 前面的 BOOL b = 去掉,只留下 HttpSendRequest(req, NULL, 0, NULL, 0);,失败!!!!!!!这样居然都失败!加上去就好好的运行。精神一度处于崩溃的边缘,眼睛里的血丝一度超过狼人!
左思右想,左改右改,死都不行!
一个声音高叫着:放弃吧,玩会游戏!
放弃了,md,再也不被 c 玩了,俺要玩俺的 java 去,下载 luajava 去,不理你了!
临行前,我恋恋不舍地看了一眼俺的c代码,我靠,突然发现这 xx 代码居然有个问题,这真是豁然开朗啊。
原来是。。。(省略一万字)
LPDWORD n; // LPDWORD 是个 unsigned long *
没初始化!
天啊,这点问题就让我找了这么久啊,我改。
DWORD a = 0;
LPDWORD n = &a;
一切正常。
世界终于清静了……