问问c语言大佬们 为什么我这个程序xcode调试c语言后显示exe无法运行

文章转载自:1.&一:生成DLL1:创建DLL工程&&&&&&文件-&新建-&项目-&visual c++-&win32-&win32控制台应用程序(win32项目也可以)&&&&&&填写项目名称MyDLL-&确定-&下一步-&DLL(附加选项 对空项目打钩)-&完成。&&&&&&到这里DLL工程就创建完毕了,下面新建两个文件MyDLL.cpp和MyDLL.h。&&&&&&MyDLL.cpp内容如下:1&#include&&2&using&namespace&&3&#include&"MyDLL.h"&4&&5&int&Add(int&&a,int&&b)&6&{&7&&&&&return&a+b;&&8&}&&&MyDLL.h内容如下:&&&1&#pragma&once&2&&3&extern&"C"&__declspec(dllexport)&int&Add(int&&a,int&&b);&&&&点击生成Bulid --&Bulid MyDLL,dll文件就生成了,vs2008不能直接生成lib文件,这个时候就需要我们在建立dll工程的时候 再新建一个def文件,默认生成然后重新生成就能够得到lib文件了,但可以通过修改工程属性里面的general-&project default-&configure type修改为lib,就可以生成lib文件。&注意:如果在已存在的工程上创建dll或者lib,不需要修改工程,只要把工程属性里面的general-&project default-&configure type修改为lib或者dll,就可以生成lib文件或者dll文件了在C++程序中使用刚才生成的DLL文件步骤:新建一个win32 控制台工程,取名testMyDLL,新建两个文件:testMyDLL.cpp和testMyDLL.h,首先需要&隐式链接采用静态加载的方式,比较简单,需要.h、.lib、.dll三件套。新建“控制台应用程序”或“空项目”。配置如下:(这一点非常重要)&项目-&属性-&配置属性-&VC++ 目录-& 在“包含目录”里添加头文件MyDLL.h所在的目录&&testMyDLL.cpp内容如下:#include&"testMyDLL.h"&#pragma&comment(lib,"..\\debug\\MyDLL.lib")//可以写成绝对路径,但是路径一定要用\\来指明,即:J:\\Pr//ograms\\C++\\Practice\\DLLTEST\\DLLtest\\Debug\\MyDLL.lib"#include&&using&namespace&&&int&main()&{&&&&&int&a&=3;&&&&&int&b&=2;&&&&&cout&&Add(a,b)&&&&&&&&getchar();&&}&&testMyDLL.h内容如下&#pragma&once&&extern&"C"&_declspec(dllexport)&int&Add(int&&a,int&&b);&&现在可以编译通过了,但是程序运行就报错,还需要将MyDLL.dll复制到当前项目生成的可执行文件所在的目录。(这一点非常重要)&这里需要注意testMyDLL.cpp文件中调用lib的这句话:&#pragma&comment(lib,"..\\debug\\MyDLL.lib")&这里需要指明lib所在的文件夹,当然我们也可以在生成dll的MyDLL工程中,指定lib和dll文件的输出路径,直接到testMyDLL工程下。&注意:如果只有dll文件,那么必须在程序里面调用LoadLibrary()函数才能使用,如果有lib文件,那么有两种方式可以马上进行调用&(1). Dependencies (推荐使用,要求有lib源代码)& &一个项目被分成多个工程来做,一个主工程exe,其他为静态库lib
&&& Project--&dependencies,设置主工程的依赖为其他静态库lib
&&& 这时,主工程的Resource Files中自动添加了lib
&&& 在主工程中需要用到其他库的位置加入库的头文件
(2). 直接将lib添加到需要用的工程中(不太推荐,lib没能统一管理)
&&& 提供了lib和其头文件
&&& 选择工程--&右键--&Add Files to Project
&&& 这时,主工程的Resource Files中自动添加了lib
&&& 在主工程中需要用到其他库的位置加入库的头文件
(3).& 通过工程的Link设置(推荐,lib可以统一管理)
&&&& 提供了lib和其头文件
&&&& Project--&settings--&Link,选择Categery中的Input
&&&& 在object/library modules里输入的动态链接库对应的.lib文件名
&&&& 在Additional library path中输入动态链接库对应的.lib的路径
&&&& 在主工程中需要用到其他库的位置加入库的头文件
(4).& #pragma (lib, "filename.lilb")(不太推荐,lib没能统一管理)
&&&&& 提供了lib和其头文件
&&&&& 在主工程中需要用到其他库的位置加入#pragma (lib, "filename.lilb")
&&&&=============================================================================================extern C的使用&C++是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同,问题:&为什么标准头文件都有类似以下的结构?&#ifndef&__INCvxWorksh&#define&__INCvxWorksh&&#ifdef&__cplusplus&extern&"C"&{#endif&&/*...*/&&&#ifdef&__cplusplus&}&&#endif&&&#endif&/*&__INCvxWorksh&*/&&分析 显然,头文件中的编译宏#ifndef&__INCvxWorksh、#define&__INCvxWorksh、#endif的作用是防止该头文件被重复引用。那么&& &&#ifdef&__cplusplusextern&"C"&{#endif&#ifdef&__cplusplus}#endif&的作用又是什么呢?我们将在下文一一道来。&1、extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。&被extern "C"限定的函数或变量是extern类型的,extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。记住,下列语句:&extern&int&a;&仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明,例如:如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。这样,模块B中调用模块A中的函数时,在编译阶段,模块B虽然找不到该函数,但是并不会报错;它会在连接阶段中从模块A编译生成的目标代码中找到此函数。&与extern对应的关键字是static,被它修饰的全局变量和函数只能在本模块中使用。因此,一个函数或变量只可能被本模块使用时,其不可能被extern “C”修饰。&被extern "C"修饰的变量和函数是按照C语言方式编译和连接的;&2、未加extern “C”声明时的编译方式&首先看看C++中对类似C的函数是怎样编译的。&例如,假设某个函数的原型为:&1&void&foo(&int&x,&int&y&);&该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”),_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。在C++中,函数void foo( int x, int y )与void foo( int x, float y )编译生成的符号是不相同的,后者为_foo_int_float。&同样地,C++中的变量除支持局部变量外,还支持类成员变量和全局变量。用户所编写程序的类成员变量可能与全局变量同名,我们以"."来区分。而本质上,编译器在进行编译时,与函数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全局变量名字不同。&3、未加extern "C"声明时的连接方式&假设在C++中,模块A的头文件如下:&//&模块A头文件 moduleA.h#ifndef&MODULE_A_H#define&MODULE_A_Hint&foo(&int&x,&int&y&);#endif&在模块B中引用该函数:&#include&"moduleA.h"foo(2,3);&实际上,在连接阶段,连接器会从模块A生成的目标文件moduleA.obj中寻找_foo_int_int这样的符号!&4、加extern "C"声明后的编译和连接方式&加extern "C"声明后,模块A的头文件变为:&//&模块A头文件 moduleA.h#ifndef&MODULE_A_H#define&MODULE_A_Hextern&"C"&int&foo(&int&x,&int&y&);#endif&在模块B的实现文件中仍然调用foo( 2,3 ),其结果是:(1)模块A编译生成foo的目标代码时,没有对其名字进行特殊处理,采用了C语言的方式;&(2)连接器在为模块B的目标代码寻找foo(2,3)调用时,寻找的是未经修改的符号名_foo。
  如果在模块A中函数声明了foo为extern "C"类型,而模块B中包含的是extern int foo( int x, int y ) ,则模块B找不到模块A中的函数;反之亦然&所以,可以用一句话概括extern “C”这个声明的真实目的(任何语言中的任何语法特性的诞生都不是随意而为的,来源于真实世界的需求驱动。我们在思考问题时,不能只停留在这个语言是怎么做的,还要问一问它为什么要这么做,动机是什么,这样我们可以更深入地理解许多问题):实现C++与C及其它语言的混合编程。&5.extern "C"的惯用法&(1)在C++中引用C语言中的函数和变量,在包含C语言头文件(假设为cExample.h)时,需进行下列处理:&extern&"C"{#include&"cExample.h"}&而在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。&笔者编写的C++引用C函数例子工程中包含的三个文件的源代码如下:&/*&c语言头文件:cExample.h&*/#ifndef&C_EXAMPLE_H#define&C_EXAMPLE_Hextern&int&add(int&x,int&y);#endif/*&c语言实现文件:cExample.c&*/#include&"cExample.h"int&add(&int&x,&int&y&){return&x&+&y;}&//&c++实现文件,调用add:cppFile.cppextern&"C"&{#include&"cExample.h"}int&main(int&argc,&char*&argv[]){add(2,3);&return&0;}&如果C++调用一个C语言编写的.DLL时,当包括.DLL的头文件或声明接口函数时,应加extern&"C"&{ }&(2)在C中引用C++语言中的函数和变量时,C++的头文件需添加extern "C",但是在C语言中不能直接引用声明了extern "C"的该头文件,应该仅将C文件中将C++中定义的extern "C"函数声明为extern类型。&笔者编写的C引用C++函数例子工程中包含的三个文件的源代码如下:&//C++头文件&cppExample.h#ifndef&CPP_EXAMPLE_H#define&CPP_EXAMPLE_Hextern&"C"&int&add(&int&x,&int&y&);#endif//C++实现文件&cppExample.cpp#include&"cppExample.h"int&add(&int&x,&int&y&)return x + }&/*&C实现文件&cFile.c/*&这样会编译出错:#include&"cExample.h"&*/extern&int&add(&int&x,&int&y&);int&main(&int&argc,&char*&argv[]&){add(&2,&3&);&return&0;}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
阅读(...) 评论()c语言单步调试的问题我用c语言单步调试程序的一个功能时候,程序运行的很正常,但是一直接运行,那个功能运行两次就会崩溃,请问这是为什么?
可能是你调试的时候错误被你忽略了,最好把代码贴出来.
我代码有2500行。。。系统并没有报过错
运行时的错误,编译器当然没办法捕获。
崩溃的时候提示什么,唯一的办法就是设置断点,逐段调试看反汇编。
我找到问题所在了,我在函数里调用了函数本身,但是为什么短的函数可以实现,很长的函数就会崩溃呢?
函数体过长可能定义的局部变量也比较多,而且加上递归调用,所以可能是堆栈溢出。
为您推荐:
其他类似问题
扫描下载二维码C语言已死? 这个论题成为CSDN博客们的热点.C语言到底有没有死?其实我也说不清楚,因为我现在从事的工作是用C++开发图形程序,但是我仍然有必要写这样一篇文章,如果你觉得C没有死,并且正准备学习她,那么希望我的经历对你有启示作用,如果你是曾经的C痴迷者并且现在不再用C,那么就和我一起怀念逝去的痴迷吧.
02年我进入大学计算机系,作为一个只会用QQ聊天的电脑白痴,我内心对计算机充满了崇拜和向往,我心里想,我要通过我的学习成为一个黑客,因为在我心里黑客就是计算机高手,能够用代码来实现自由的梦想.那时通过一些文章了解到真正的高手都是用底层的语言,比如汇编,比如C,甚至是机器码(现在看起来这些观点其实很可笑),所以我的目标就是先学好这些语言.大一我们开了C语言课,我认真的学习C的每一个特性,指针,指针的指针,结构,联合,动态分配内存,每个现在看来很简单的东西都让我觉得很神秘,就这样整个大一就在C的特性上度过了,当同学们都在接受更加神奇的VF,VB时,我仍然在dos下看着枯燥的TEXT方式(我学的时TC),有些同学不解的问我,&C语言可以象Windows程序那样有漂亮的界面,和图象吗?&,面对这些问题和质疑,我也开始动摇,为什么我学了几乎所有见到的C的特性还是不能构造界面,还是不能绘制图形,网络更遥不可及..这些疑问一直伴随我到了大二.    
大二,我知道了编程这东西不是靠各种技巧,而是要靠编程思想,和算法,因为我们开始学了数据结构,令我开心的是数据结构老师让我用TC去构造各种结构,而不是VF,VB,这些,同学们开始一筹莫展,而我却得意于积累下来的C的良好基础迅速的实现并接受了数组,链表,树,栈...等等这些结构,我发现我不再苦恼于我的程序结构的不堪,不再沉迷于C的精巧,而是真正开始感受编程的乐趣,不得不说的是这中间我的C语言基础给我带来的成就感是我学习数据结构的一个很重要的动力...当我可以熟练的应用大部分数据结构(课本上)的时候,寝室的一个哥们问我&为什么老师总让我们在dos下用TC做程序呢?只能实现字符模式太没意思了&...当时我并没有想到老师的真正目的(应该是撇开其他应用专著于数据结构和算法的目的),而是坚信C语言的强大,我相信dos一样可以给我缤纷的世界,就在这时开了汇编,也正好让我更加坚信dos实际上可以更加多彩(我们学的8086,16位),学过汇编的朋友可能还记得有一张dos系统和bios系统调用的表,里面可以对显示器,对串口,对键盘鼠标,这些硬件进行操作,对显示器的操作更是让我眼前一亮,因为我看到在显示器上显示彩色点的功能,从第一个点被打印出来我便深深的陷入其中...    
我拿着自己写的打印彩色点的C语言函数(TC里提供汇编接口),向别的同学的请教怎样才能打印一条线出来,结果那个经典的直线算法就在我们的讨论中诞生了(算法名字忘记了,下面附带的程序里有),当我兴高采烈的那着我彩色的直线去找老师请教(其实是想让她表扬我)的时候老师竟然问我图形学课本还没发你提前买了吗?她认为我是看了课本.打击啊...呵呵,但是让我高兴的是我知道了还有图形学这门课,接下来就是飞快的跑到图书馆借到书,是清华大学孙家广的那本,就这样我的编程学习真正的进入的正规,图形学,就是我的算法启蒙领域....    
现在我从事的工作仍然是图形程序的开发,大学的日子早已远去,学习C语言的痴迷也早已不在,但我知道C一定还在她擅长的领域发挥着领导作用,我知道在我内心深处仍怀念着她那令人琢磨不定的神秘.如果有一天真的不需要底层开发了,或者底层不在用C了,如果C真的死了,我还是愿意让她永远留在我心里...    附带大二时写的代码:(代码没有贴,格式不好弄,在我的博客里有)  http://blog.csdn.net/hoya5121/archive//1477960.aspx    一个dos用的定时器:    一个dos下的简单图形函数库  
楼主发言:1次 发图:0张 | 更多
  驳“C语言已经死了”  许式伟        现在,有很多C/C++程序员总是自命不凡,看不起其他开发人员。其实,或许别人更看不起他呢!  && 有偏见的永远只是个体,而不是群体。作者加了后面那句,无疑证明有偏见的不是C/C++程序员,而正是他自己。      学生时代,我也曾醉心于C/C++,但时至今日,始终无法写出无懈可击的C++代码,所以我始终认为我不会C/C++。这些年,我一直在寻找编写C++代码的最佳模式。但是,老实说,我还没有见到过哪个称得上高手的C++程序员,也没有见到过写得Very good的C/C++代码。C/C++代码总是丑陋不堪,BUG丛生!  && 这段话更加荒谬了。没见过优秀的C/C++代码? C++标准库(STL)如此优雅。况且,有那么多经典的C/C++开源作品,以及无意之中泄漏的Windows NT核心源码,哪一样不是绝世之作?我为作者浅陋感到难过。      我用C语言编程已经超过20年了。我写过C语言的编译器、C语言的调试器、用C开发的其他语言、游戏、客户端程序和服务器程序,你说吧!还有什么是我没写过的。还有我的书架上充斥着折了角的K&R和Steele的书。我太了解C语言了,但是,我讨厌他。十分讨厌!      当我读到一篇博客,题目是&为什么每个程序员都应该学习C语言?&时,我真是鸡皮疙瘩满地。如果你真的是个专业的程序员的话,你肯定觉得这是个天大的笑话,尽管作者的本意也许不是这样的。这篇反驳的文章有点意思,但是还是没有抓住本质。所以我展开了说一下。有以下5个原因来说明,为什么那些会C语言,并且使用C语言的程序员,现在不但应该去用别的语言,而且应该忘记他们学习C语言过程中的那些烦人的东西。      1、内存分配      仅仅关于这一点我就能写整整一篇文章了,也许能写一本书,甚至还有可能写出能够塞满图书馆技术书籍那块,那么多的内容。内存分配和存储单元分配的存在确确实实是个大麻烦。你要不就是分配太少的内存不够用,要不就是分配了太多内存浪费掉。这里的问题就是:怎么把它初始化为零呢?还是干脆就不初始化它。但最挠头的步骤还是释放内存。所有已有的工具包都会帮助你确认,你是否已经释放了之前分配的每一位的内存,在释放完之后是否永远不使用它,并且会阻止你,永远不要释放它第两次。更严重的是,分配内存和释放内存在C语言中都是很慢的,非常慢。使用内存分配时,要考虑的各种特殊情况,我真是连想都不愿意去想,只要问题(对象)的大小合适,我更愿意使用栈空间或者事先分配的结构空间。如果这么做的话,我就有更值得烦恼的事了。话说回来,发明垃圾处理器那人真应该得诺贝尔奖。   && 内存管理是程序设计中最经典的话题。GC无疑是内存管理一个伟大的变革,但是我只是把它看作内存管理的一个解决方案,而认为不是唯一的解决方案。比GC更加优雅的方案不见得没有。我比较倾向于在特定的情况下选择合适的内存管理方案,而不是没有任何选择的余地,而这正是C/C++的伟大之处。 所有那些GC语言(如Java、C#等)均把这个解决方案强加给程序员,这一定程度上来说减轻了程序员的负担,但是也同时约束了程序员的主观能动性。&分配内存和释放内存在C语言中都是很慢的&?不知道作者从哪里获得的结论。      2、多线程      我过去是喜欢C语言的,真的。直到我开始用C开发并维护多线程的服务器。在为连接相冲突的线程保护数据方面,C语言没有为程序员提供那怕一点点的帮助。你在使用单线程的日子里获得的每一个直觉、经验,用在多线程的时候都是错误的。至少JAVA有表示同步的关键字和备有证明文件(但是是个很奇怪的文件)的记忆体,但即使是这样,除非你使用新的javax.concurrent,否则也只能在那些巨大的平行摆放的机器们面前崩溃。回到C语言上:在模拟生产的环境下,坚持一个星期在数据中心调试一个死锁(这事真的发生过)。而JAVA却只需要Ctrl+Break!天哪!!!   && C/C++语言本身确实没有太多MultiThead的支持,这种情况在C++0x出来后可望改变。但是,请记住C/C++永远倾向于你使用成熟的库来解决问题。      3、指针      指针太难以控制了,太阴险了;我甚至没有委婉一点的方式去形容它。我生命中每年都有几个月被用来调试那些奇怪的指针问题。我过去常常努力获取所有的诀窍,比方说难以理解的构成符、联合体和偏移量,以及重用最后两位做标记,还有所有其他的诀窍。但我发现这么做根本不值得。其他语言的静态引用就可以解决了。  && 指针是C/C++过于灵活的体现。使用指针的代码可以写得很丑陋,但一样可以很优雅。——这一点上用何种语言不会有区别。我相信,可以写出优雅的Java代码,那么也一定可以写出同样优雅的C/C++代码。而反之则未必(因为有些C++某些范式是Java所不能支持的)。C/C++语言中的选择太多,这的确是令人困惑的,但不见得是劣势。我对C/C++程序员的建议是,多了解和使用C++标准库,而不是过于纠缠指针相关的细节。      4、过早的优化      说到诀窍,你是否曾经浪费脑细胞去研究究竟*p++是不是比p[i]快?你是否曾经花时间去试着做点变化来代替乘法,或者去尝试使循环中的倒置运行更快的方法?还在为传递一个参数的速度和反对添加结构,并且传递它的速度一样而苦恼不已?停吧!算法是速度的关键,程序员的水平决定了他会使用那些算法。知道这一点能让你的程序更好,更快一点并且让你的脑袋少扭几个筋。好吧,有一些例子也许可以这样做的……不,你就别那么做就行了!  && 算法优化是程序设计的关键。但是通常情况下,所有语言(包括C/C++)的程序员研究的是关键路径的优化。研究*p++是不是比p[i]快?我相信这是标准库的实现者要考虑的事情。所不同的是,C/C++程序员也可以和标准库的作者一样去考虑这些细节,而其他语言的程序员被剥夺了这个权利。    说到优化,话题就多了。我曾经向C#的Dictionary中插入了1亿条整数(从1万多个文本文件中读入),结果发现程序运行了整整一个下午仍然没有完成。而我改用C++的std::map,20分钟就搞定了。再试试对50万条自定义的结构体数据进行排序,我相信你和我一样,会深深喜欢上C++的的高效而优雅。        5、测试      你最喜欢的C的单元测试的工具是哪个?嗯…一个也想不到?单元测试一定是一点也不重要,是吧?或者是太麻烦了,很难跟上进度,浪费时间。你可以把这个时间用到更加有用的事情上,让它只占用工作时间的1%,那还比较合适。或者在数据中心,通过优化的没有标记的图形来调试这个仅仅由100个同时在线使用者引起的问题。  && C++的测试工具,作者居然一个都想不到,我只能猜想可能他是比较喜欢自己制造轮子的那一类。和JUnit对应的CppUnit,难道也想不到?提起CppUnit,我以前用它进行单元测试,但从实现架构上说,我认为它继承了Java代码的臃肿。我在WINX中提供了一个Mini版本的CppUnit,代码量大概只有几百行,功能绝不比CppUnit弱。(要了解WINX,请看这里)。      我本来应该继续再说一些原因的,但是5个现在就足够了;说完这些,现在感觉好点了。C以前是非常棒的…那是在1984年的时候。直到今天,那些用C写的新代码都让我感到惊喜…如果你让我比较的话,我觉得C++只是比C稍微好点。如果你想要学些老一点的语言,不妨尝试Forth,List,或者APL。这些老式的语言起码能教会你,用不同的而且优雅的方式去思考你的程序。  && 新生的语言,必然会在吸收旧的语言上基础上进行改进。看一个语言的生命力,并不在于看它某些地方存在的不足。事物会发展,并趋于完善。相信C++0x出来后,C/C++语言又将获得新的生命力。单看Java、C#等几个新一代的语言,其中有如此多的C++烙印,就证明了C/C++的影响是巨大的。动不动说一门语言死了,是一种浅薄。    (来源: 作者Ed Burnette、编译李安民)    
  也驳&驳C语言已经死了&   原文连接:http://blog.csdn.net/xushiweizh/archive//1476422.aspx    && 有偏见的永远只是个体,而不是群体。作者加了后面那句,无疑证明有偏见的不是C/C++程序员,而正是他自己。  错了,真理是站在少数人这边的,当一种变革将发生的时候,带有偏见往往是大众是传统力量。      && 这段话更加荒谬了。没见过优秀的C/C++代码? C++标准库(STL)如此优雅。况且,有那么多经典的C/C++开源作品,以及无意之中泄漏的Windows NT核心源码,哪一样不是绝世之作?我为作者浅陋感到难过。    STL的代码并不优雅,缺乏functional programming机制支持的C++对于实现algorithm非常的牵强,比方我要find(v.begin(), v.end(), compare);的时候(v是一个自定义的结构),我必须在函数外面写一个比较函数,如果要带一些上下文的话还得写一个functor类,非常的丑陋不堪,实用性大打折扣。而FP系的语言来说,可以非常自然的写一个匿名函数。STL里所标榜的容器,算法等概念,在FP里早就原生支持了,而且要优雅的多。至于NT代码这个我没看过不好说,但是据说代码里有不少当初程序员留下来的抱怨BUG及设计失误的话。        && 内存管理是程序设计中最经典的话题。GC无疑是内存管理一个伟大的变革,但是我只是把它看作内存管理的一个解决方案,而认为不是唯一的解决方案。比GC更加优雅的方案不见得没有。我比较倾向于在特定的情况下选择合适的内存管理方案,而不是没有任何选择的余地,而这正是C/C++的伟大之处。 所有那些GC语言(如Java、C#等)均把这个解决方案强加给程序员,这一定程度上来说减轻了程序员的负担,但是也同时约束了程序员的主观能动性。&分配内存和释放内存在C语言中都是很慢的&?不知道作者从哪里获得的结论。    实话说我也不喜欢GC,没有GC的C也可以工作的很好,但是对于FP系的语言来说没有GC是无法正确工作的,所以我还是得接受GC这个东西。当然我更喜欢的是将两者互相结合的方式。            && C/C++语言本身确实没有太多MultiThead的支持,这种情况在C++0x出来后可望改变。但是,请记住C/C++永远倾向于你使用成熟的库来解决问题。    C/C++不能适应未来多核时代的发展,这个会是它没落的最大原因。库不能真正的解决问题,我们需要的是在语言层面的进一步发展。在现阶段C/C++连标准的多线程库都没有,更不要说高层次基础设施了,编写并发程序基本上还得靠程序员手工实现基础设施,并且跟同步、并发、死锁等疑难问题纠缠不清,程序的开发难度很大,可靠性很差。至于OpenMP,设计思路上就有问题,可以给程序员提供的帮助很少。            && 指针是C/C++过于灵活的体现。使用指针的代码可以写得很丑陋,但一样可以很优雅。——这一点上用何种语言不会有区别。我相信,可以写出优雅的Java代码,那么也一定可以写出同样优雅的C/C++代码。而反之则未必(因为有些C++某些范式是Java所不能支持的)。C/C++语言中的选择太多,这的确是令人困惑的,但不见得是劣势。我对C/C++程序员的建议是,多了解和使用C++标准库,而不是过于纠缠指针相关的细节。    && 算法优化是程序设计的关键。但是通常情况下,所有语言(包括C/C++)的程序员研究的是关键路径的优化。研究*p++是不是比p[i]快?我相信这是标准库的实现者要考虑的事情。所不同的是,C/C++程序员也可以和标准库的作者一样去考虑这些细节,而其他语言的程序员被剥夺了这个权利。    说到优化,话题就多了。我曾经向C#的Dictionary中插入了1亿条整数(从1万多个文本文件中读入),结果发现程序运行了整整一个下午仍然没有完成。而我改用C++的std::map,20分钟就搞定了。再试试对50万条自定义的结构体数据进行排序,我相信你和我一样,会深深喜欢上C++的的高效而优雅。      多年以前程序员们还在C程序里面内联汇编以实现代码级的优化,但是如今已经没有人这么做了,因为CPU越来越复杂了,大多数情况编译器做的比手工的要好。现如今的java/.NET的JIT引擎也已经能够达到非常高的优化水平,在性能上C代码的优势已经越来越不明显了。对于未来而言代码级的优化也已经不再是重点,哪个语言可以适应多核的发展,谁就将成为性能的王者。如果大家对并行算法的威力还没有一个清晰明确的概念,那么就看看google的搜索算法、现代GPU的计算能力,这不是代码级优化所能得到的1倍2倍的性能提升,而是以数量级方式的性能提升。          && 新生的语言,必然会在吸收旧的语言上基础上进行改进。看一个语言的生命力,并不在于看它某些地方存在的不足。事物会发展,并趋于完善。相信C++0x出来后,C/C++语言又将获得新的生命力。单看Java、C#等几个新一代的语言,其中有如此多的C++烙印,就证明了C/C++的影响是巨大的。动不动说一门语言死了,是一种浅薄。    说一门语言死了,不是说完全消失,而是退出主流开发语言行列,逐渐的被边缘化,这些年鼓吹C/C++的人已经越来越少了,在很多开发领域C/C++的地位已经被JAVA、.net、脚本语言等所取代。C++0x出不出来已经不重要了,倒是C++/CLI的出现带给C++一些新意,不过虽然我很欣赏C++/CLI,但是它不会成为主流。在多核到来的时候目前编程语言还没做好准备,未来我们要面临的不是2核4核而是百核千核这样的规模,这不光要在算法领域继续发展,编程语言也要来一次重大的变革才能适应这种发展,至于方向在哪里,FP系的语言或许会给你带来一些启示。      
  小南?好巧竟然在这里也能遇上你,真是有缘!
  老朋友了,帮顶个,哈;  还记得一起去天钥桥路咖啡厅谈网站的事吗?我想不会错吧这个名
  C语言。我还可以靠它吃几十年呢、只是LZ用不上罢了
  作者:IT你爱我吗 回复日期: 16:16:22 
    老朋友了,帮顶个,哈;    还记得一起去天钥桥路咖啡厅谈网站的事吗?我想不会错吧这个名      你是???  你说的咖啡厅我没听过啊,认错人了吧?
  怀念她。。。
  啊?!不会吧,我一个朋友也是叫小南,也是1983的,而且你的文章描述和他的经历真的好像~~~
  在嵌入式,系统开发上用C比较多,主要是C的指针和位操作,这有点中级语言的特性。除了汇编,只能是C。  
  作者:IT你爱我吗 回复日期: 16:56:04     我想你认错人了,呵呵,没关系这也是缘分  用上面那个朋友的话  怀念她。。。  
  正在学习C语言  很爱她
  LZ仅限于用在PC的应用程序的吧,其实C在单片机用的如火如荼呢。1?是不是C的未来在于单片机,hoho。  
  呵呵,也算缘分  C以前我也好喜欢的,C语言课每节课都非常仔细,而且基本C的什么都会,只是因为它的神秘以及这是我第一门语言课,呵呵
  怎么可能死。我还没学好呢!!
  不会吧?C/C++有这么大的讨论?我们马上就要学C语言了,别打击我的积极性啊!
  只有动物才会死。  
  支持小南,写得很不错。我就是爱C和C++。呵呵
  基本现在的*.net对C的借用,比比介是  只看到自己的处境,就说C死了那是一叶樟目
  做嵌入式有时候C++都不能用,只有用C和汇编。只是你不用而已,  你用的编译器估计都有不少是C写的呢
  没有C,你怎么搞嵌入式啊,全用汇编?
  一看就知道lz是PC上画界面的.
  不会死的!
  从来没研究过,我不懂,就为考2级,放假回家看,好象和斑竹没点联系!~ 汗。
  能学到如此,也好佩服了!  
  -_-现在的大学就读成这样?
  c肯定不会死的啊,SB都知道啊。    单片机,ARM,嵌入式,IC验证。。。。类c语言。。。唉    SB的N次方才说死呢。:)
  我喜欢C语言,很喜欢!c语言是我学的第一门语言也是最喜欢的!
  我直接学的就是linux    现在正在努力补习c    向各位牛人学习!!
  如果一个程序员说C语言已经死了,感觉就像一个练武的人说如今练武已经不用蹲马步了一样可笑,可叹、可气、可悲。
  记得我的C语言老师曾经对我们这样说,他当年毕业设计是用Fortran给一家建筑设计院做一个项目,他学Fortran只用了两个小时。为什么?因为他学过C,编译原理课程设计时用C做过一个简陋的编译器,花两个小时把Fortran的语法范型图看一看就基本可以动手编程了。个人觉得,做为一个合格的程序员,参与争论变成语言的优劣是一件很无聊的事,应该是什么情况下用什么语言更高效就用什么语言。只要你学过编译原理、数据结构、操作系统,编程语言用什么还是大问题吗?
  知道神6的大部分控制软件使用什么语言写的吗?Fortran!如果说C死了,那Fortran应该是化石了吧?!
  什么是c语言?    那什么又是dos    ??
  C 语言万岁!
  C简单高效,系统级编程首选。    C++语法太复杂,陷阱太多。 java效率低一些,发展中,不是太成熟。
  路过,支持一下
  我覺得C可以說是基礎.  
  请教楼主,什么是“FP系的语言”啊
  不知道怎么才算是一门语言死了,是用的人少了就算死了吗,还是没人用了才算死了,还是曾经用这门语言写的系统一个都没有了才算死了?    
在我有限的编程生命中(我是做金融系统集成的,也写过芯片驱动),以我目光所及,断言C语言死了,简直让我觉得发自内心的莫名其妙,以至于我此刻真的不知道该说些什么。    
在我接触的实际系统应用中,大机上的COBOL,小机上的C/C++,他们无论是否优雅,但实际上却是撑起了金融行业几乎一半以上的应用系统,并且仍在继续,JAVA近几年发展速度很快,但是这并不能说明什么。
  C#下就不能搞算法了?自己照样能写类库。  简单的嵌入系统你可以自己写系统,复杂的应用,你还得搭平台。不至于每个人都搭一套平台吧。  如果用.NET的嵌入开发平台,照样能开发嵌入应用。  一说嵌入系统就弄得高深莫测的,装神弄鬼,好像弄个指针指指内存就洞彻真理了,其实有时候越贴近硬件逻辑反而越简单。单片机怎么了,大部分还用dos源码改的系统。    不信我说的,做个购物网站让大家看看,最俗的那种,后台一个数据库,前台一些网页,不管你用asp还是php,jsp或.net,总之别在现成的源码上改,自己从头搭一下,不把你累死我名字倒着写。  
  C 语言的好日子刚刚开始:    1、新的V.O.S技术要求所有互联网上的应用全部C语言为主开发    2、V.O.S技术提供程序员不需要考虑网络环境开发网络软件    3、V.O.S技术支持任何C语言编程效果    4、V.O.S技术在这里可以了解 .cn    
  讨论C的都会成为热贴,你说C会不会死。  在这贴发言的都死光了,C也不会死。
  说C过时的人太肤浅了,  光花几个界面算啥的?  你去看看LINX/UNIX的内核,  甚至是WINDOWS的内核是什么写的?  去看看JAVA虚拟机是什么写的,  去问问GOOGLE和百度的搜索引擎的服务器端核心代码是什么写的?  还有嵌入式开发领域,  等等……  那些说C过时的人,  通常是站在C写的代码上做开发的人~~~
  我相信C肯定会比java、.net活得久些
  有点晕~~
  Java,.net跟C比起来简直就是玩具,骗小孩的东西,说C不行或是对C没信心的人,是自己技术不行吧?C发展了这么多年,几乎所有技术都是围绕C开发的,操作系统,数据库系统,大型软件,大型游戏,哪个不是用C/C++开发的?Java,.net是短时间内快速开发信息管理系统的密钥,但是开发大型系统不见得行,一般情况下不行。换而言之,C/C++是基础,是核心,一切技术都是环绕C/C++展开的,OpenGl,DirectX,通讯网络协议,大型软件的二次开发包,只要有这些东西存在的一天,C/C++永远是王者。
  学习中
  简单即美 既然还说要开发购物网站,如果你以为C/C++是来开发购物网的,ok, 我们不会跟你讨论这个问题,你还没资格,C/C++用来就不懈于运用在这种层面的开发上,等你弄清楚了什么事C再回来讨论这个问题。
  C是最强大的语言也是让人敬畏的,我喜欢C,尽管我还不是很熟练,我知道windows API接口是C语言形势发布的,有太多的底层开发要用到它,VB,Java就像在建高楼,建得很高很漂亮,但它不知道楼的基础是什么,也走不到楼底去…………
  看到这样的文章,真的受不了,如果无知,就不要显摆,说C语言死了的人不知道C语言的真实价值?  简直就是拿无知当个性,语不惊人死不休的哗众取宠者!  B  S  S  B  !
  其实在嵌入式系统中,目前多用C主要考虑资源问题,c++挺耗费资源,由其在八位机里。
  一个事实,Linux最新版2.6.x的内核全部采用C完成!
  open source 基本是靠C撑着的
  悖论阿
  俺还在用VB,呵呵,6.0的,挺好的,功能强大,还没研究透呢.
  楼上的saite_tt,看不懂汉语吗?没啥说的。没啥说的最后还得说点什么。  搞C的人现在成了某种宗教团体,共同的特征是:声称自己很系统、很硬件、很内核,他们倔强地看不起一切据称是应用层的东西。弄得好像它是底层的Matrix,别人都是应用层的植物人。能写系统程序就复杂了吗,就牛逼了吗?    当然它们内部也有分裂,比如CPP有点瞧不起纯C的,说它不复杂;而纯C的也瞧不起OOP,说它不如自己底层。但当他们共同面对汇编语言,又露出自己的高级语言特性,表示自己还不那么低级。        
  用C中。ARM,DSP开发基本是用C,汇编
  C有她的应用领域,VB也有她的强大,领域不同,没必要谁看不起谁的。。。  不要因为自己做过嵌入式就觉得好像是能写出linux一样,呵呵,在大学的时候我也做过arm9上面的linux驱动开发,可是后来还是转了方向,底层的东西在国内似乎没有那么好的环境,很多看过一点linux边缘程序的人就喜欢用牛B的神情漠视别人,做过一点dsp的周边电路设计的就好像要学陈进了,呵呵,其实没必要,真正在国内做底层设计的都明白我们的底层其实也就那么个意思,真正能去龙芯团队的有几个?做应用程序也不代表自己很弱智吧?如果能写出当年红警,星际什么的,我想也够我们这里所有人崇拜的吧,所以说在说别人浅薄的时候还是先想想自己,嘿嘿
  C语言死不死和某些C程序员看不起其他程序员没关系,别转移话题    BTW. 那位说给你一个.net的嵌入式平台就能做.net开发的,你的平台用什么写?
  路过  
  我也想学!!能告诉我怎么用吗???
  作者:简单即美 回复日期: 22:01:05   搞C的人现在成了某种宗教团体,共同的特征是:声称自己很系统、很硬件、很内核,他们倔强地看不起一切据称是应用层的东西。弄得好像它是底层的Matrix,别人都是应用层的植物人。能写系统程序就复杂了吗,就牛逼了吗?  当然它们内部也有分裂,比如CPP有点瞧不起纯C的,说它不复杂;而纯C的也瞧不起OOP,说它不如自己底层。但当他们共同面对汇编语言,又露出自己的高级语言特性,表示自己还不那么低级。  ============================  id有意思,话更有意思,程序如此,人事亦如此,这位老兄看得透彻,嘿嘿嘿
  我转行了,不过当时是用C的
  C怎么可能会死嘛!搞笑!  现在好多大型系统都是用C做的!
  何止是C,汇编都还有用的上的时候
  程序员呐  评判一种语言是否可以去死,永远和这种语言所拥有的技术没关系,而是市场。  所以说你没学过COBOL,不等于说这个70年代发明的语言已经死了,在金融领域用得最多的就是它;你没学过FORTRAN,不定于说这个50年代发明的语言已经死了,在纯数学计算领域用得最多的就是它;你学过C/C++并不定于说你用资格判定它的死亡,至少那些在单片机上工作的程序员们都指着它吃饭呢
  C语言,对我们这些文科生来讲,简直就是天书.....  我们学校流行考计算机二级证书,考C语言,哎,那叫一个折腾啊.....
  讲c死已经好几年,不但没有死,而且现在活得还很好。以后也会活得很好。。  我是搞c++的。
  结论就是,你的心是墓穴.
  最近准备学C啊
  如果能写出当年红警,星际什么的  ---------------------------  难道你不知道游戏都是C/C++写的?为了效率有时候会内嵌汇编。。。
  作者:简单即美 回复日期: 22:01:05 
    楼上的saite_tt,看不懂汉语吗?没啥说的。没啥说的最后还得说点什么。    搞C的人现在成了某种宗教团体,共同的特征是:声称自己很系统、很硬件、很内核,他们倔强地看不起一切据称是应用层的东西。弄得好像它是底层的Matrix,别人都是应用层的植物人。能写系统程序就复杂了吗,就牛逼了吗?        当然它们内部也有分裂,比如CPP有点瞧不起纯C的,说它不复杂;而纯C的也瞧不起OOP,说它不如自己底层。但当他们共同面对汇编语言,又露出自己的高级语言特性,表示自己还不那么低级。  --------------------  确实精辟。
  大家好 我就是翻译这篇C语言死没死的人 这是一系列文章 我想说的是 原作者是个C语言的大牛 我估计当时他也就是发泄一下自己的情绪 不知道为什么翻译过来到了国内反而会引起这么多讨论 他的BLOG我暂时找不到了 想看看原文的各位email: 我再好好找找   很荣幸翻译到这篇文章
  本人因家庭经济困难,想做兼职,有意者来电来函咨询,本人承接以下业务:苦力搬运,装卸,车工,钳工,焊工,水电工,瓦工,砸墙,砌墙,筛沙,油漆,通下水道,贴瓷砖,拆洗油烟机,拆装空调,Vb,C++,.NET,C#,Java,j2ee, j2me,asp,delphi,php,汇编,PC游戏开发,网络游戏代练。网络维护管理,重装系统,电脑维修,三维建模,照片上色,平面设计,建筑效果图,flash动画,QQ挂级,硬件设计,电路板设计,单片机开发, 四六级替考,办证,代开发票,黑枪,黑车,暗杀,洗钱,要债,洗头,搓澡,按摩,刮痧,拔火罐,算命,割双眼皮…    另:本人长期代写小学生寒、暑假作业。替小学生欺负其他同学(年龄在10岁以下),代替学生父母开家会.    收费标准:    寒假作业(48页1-3年级)20元       (48页4-6年级)32元    暑假作业(62页1-3年级)32元       (62页4-6年级)44元    欺负同学(身高1.3m-1.4m)45元       (身高1.4m-1.6m)55元       (身高1.6m-1.8m)价格面议       (身高1.8m以上)免谈    打老师:女老师(75元)        男老师(100元)        体育老师(价格面议)    代开家长会:一律50元
  楼上的低智商们,你们这些争论真他妈搞笑!    我们这里全部都是用二进制直接写程序,连汇编都不用。我们除了学习高等数学其它什么也不学。  我们还准备设计四进制电路和处理器,效率比二进制厉害得多,下一步我们要设计四进制化学电路。    我们这里是天下第一牛B,欢迎你加入我们的团队。
  这个论题前段时间至今在CSDN上好像很疯狂  但我没兴趣,所以没有去看具体内容
  作者:kinkoyo 回复日期: 23:26:02   
    如果能写出当年红警,星际什么的    ---------------------------    难道你不知道游戏都是C/C++写的?为了效率有时候会内嵌汇编。。。  --------------------  笑笑就行了,别说出来让人笑话  
  C怎么会死呢,会了C是一切的基础啊.  我就是遗憾这个道理明白的太迟了,大一学这们课的时候,不知道这是啥东西,也没意识到他的重要性.等到学C++的时候就后悔了.现在不用说,更是后悔的一塌糊涂.555~````
  作者:简单即美 回复日期: 20:18:40 
    C#下就不能搞算法了?自己照样能写类库。    简单的嵌入系统你可以自己写系统,复杂的应用,你还得搭平台。不至于每个人都搭一套平台吧。    如果用.NET的嵌入开发平台,照样能开发嵌入应用。    一说嵌入系统就弄得高深莫测的,装神弄鬼,好像弄个指针指指内存就洞彻真理了,其实有时候越贴近硬件逻辑反而越简单。单片机怎么了,大部分还用dos源码改的系统。        不信我说的,做个购物网站让大家看看,最俗的那种,后台一个数据库,前台一些网页,不管你用asp还是php,jsp或.net,总之别在现成的源码上改,自己从头搭一下,不把你累死我名字倒着写。  ----------------------------------  不好意思,我的毕业设计就是做的你说的最俗的那种购物网站,前台JSP,后台ACCESS
  厚厚~~~钳工们,钳子和扳手不会死的。
  我正在学C  可以说是挺C的一派    但是我做为一个菜鸟,还是想提醒大家,不要总是说C的好处    也说说其它语言的好处
  呵呵,有意思  
  我爱C语言,我爱C++,我爱Java。我爱面向对象。  我爱操作系统,我爱嵌入式,我爱coding。。。。  我爱design pattern,我爱OOsoftware design。    
  C是天底下最好学的语言,不仅因为它只有32个关键字,而且学好C只需要一本书就够了,就是The_C_programming_Language,看第二版就够用了,才200多页。  C是天底下最实用的语言,因为它最接近计算机的灵魂。  C++是天底下最难学的语言,因为它不仅有63个关键字。而且你要摘清楚哪些是为了兼容C的,哪些是C++的,其次你要董面向对象思想,然后你要董design pattern,你要看至少以下三本书,个个难看:C++ programing language,现在出到特别版了,好像7,8百页,没办法,啥东西都往里塞,模版啊,异常阿,名空间啊,RTTI啊,stl啊;还要读Inside C++ Object Model,虽然只有200多页,但巨难看,不过看完(且看懂)之后你的功力大增,然后你还要看(More) Effective C++ 和 C++陷阱,你要是能看懂 50 percent,我保你是牛人一个了。  孔子曰:学而不思则罔,死而不学则殆!不断的学习和思考,终究会驾驭这些桀骜不驯的编程语言。什么C亚加佳阿,java,借图打包衣,struct,hibernate,sprint,沙沙的,都不在话下。  大半夜不睡觉,写这么多字,我好变态呀。呕吐!!!
  用啥语言对我没区别, 工具能好用点就行
  C语言是唯一的计算机高级语言。  美丽,健壮,规范,快速,C++则是比较另类  如有疑问,请参照Linux操作系统的内核.
  计算机的高端和低端正在分化。  高端的编程语言如Java, C#, 会变得越来越强大,门槛越来越低。  低端的C语言,(几乎所有的CPU都有了C编译器)面对的编程对象  越来越多,门槛越来越高。  
  其实也没什么好争的,C语言越来越适合做较为底层的开放,而类似于Java的这种语言更适合做一些应用层的开发。而我则喜欢更高级,更傻瓜的一些语言。如PHP,特别适合用来快速解决一些问题,而不用过多地考虑数据或底层算法。
  VC永远成不了黑客高手,但可以是赚钱高手。就看你怎么看了,C永远是基础,打扎实了,你可以做很多事。
  麻烦哪位斑竹把上面那个大坑给除了....谢谢
  几乎每一种语言都和C语言有关系,只要UNIX不淘汰C语言就不会被淘汰,大家可以看看找工作的时候,C语言是底层开发的.
  还是先学好再说。。  看看楼主的代码水平:  //没什么注释,见笑了..呵呵  /*  =============0x13h display mode version 1.1 Header  =============CopyRight (C) LiGungcun  =============QQ:  =============E-Mail: hoya-  --------Compiler is Borland TC++3.0 for DOS   ---------The last modification 08/02/2004   */  #ifndef __V_13__  #define __V_13__  /*===========head file include============*/  #include &stdio.h&  #include &dos.h&  #include &stdlib.h&  #include &mem.h&  #include &math.h&  #include &stdarg.h&  #include &process.h&  #include &bios.h&  /*===========macro defined================*/    /*===========globe variable===============*/  unsigned char g_current_
//setcolor current color for draw  unsigned char g_back_
//setcolor backgrand color for draw  int g_image_
//get image from screen height  int g_image_
//get image from screen width  void far *g_
//a bit_image pointer  /*===========data structure===============*/  typedef struct {  
//Dos VGA 13 Mode   
//256Color  
//wei cai  } palette_
//palette  typedef struct{  
/*2文件大小4B*/  
/*10图象数据在文件中的偏移地址4B*/  
unsigned long width,
/*18,22宽高(像素)4B+4B*/  
/*28指明每个像素点需要的位数2B*/  
/*30压缩标志0为不压1为256色压4B*/  
/*34图象数据所占用的字节数4B*/  }BMP;
// Load Bitmap to this struct  /*===========function declare=============*/  void
init_graph
(void);  void
close_graph
(void);  void
draw_pixel
(unsigned x,unsigned y,unsigned char color);  void
(unsigned x1,unsigned y1,unsigned x2,unsigned y2);  void
draw_rectangle
(unsigned left, unsigned top, unsigned right, unsigned bottom);  void
(unsigned left, unsigned top, unsigned right, unsigned bottom);  void
draw_circle
(unsigned x, unsigned y, unsigned r);  void
draw_solid_circle
(unsigned x, unsigned y, unsigned r);  void
clear_device
(unsigned left,unsigned top,unsigned right,unsigned bottom);  void
set_back_color
(unsigned char color);  unsigned char
get_back_color
(void);  void
set_current_color
(unsigned char color);  unsigned char
get_current_color
(void);  void far * get_image
(unsigned left, unsigned top, unsigned right, unsigned bottom);  void
(unsigned left,unsigned top,void far *bitmap);  int
(void);  int
(void);  unsigned get_pixel
(unsigned x,unsigned y);  void
out_text_xy
(unsigned x,unsigned y,const unsigned char *text);  void
set_palette
(unsigned color_index,palette_type rgb);  palette_type get_palette
(unsigned color_index);  int
(int x,int y,char *path);  /*===========function implement===========*/  
  void init_graph(void){  
union REGS  
r.x.ax=0x13;  
int86(0x10,&r,&r);  
g_current_color=0;  
g_image_height=0;  
g_image_width=0;  
g_bitmap=NULL;  }  void close_graph(void){  
union REGS  
r.x.ax=0x03;  
int86(0x10,&r,&r);  }  void draw_pixel (unsigned x,unsigned y,unsigned char color){  
unsigned char *video_buffer=NULL;  
if(x&320&&y&200){  
*(video_buffer=MK_FP(0xa000,((y&&8)+(y&&6))+x))=  
else    }    //these algorithm reference my &&digital image&&  void draw_line (unsigned x1,unsigned y1,unsigned x2,unsigned y2){  
int dx,dy,index,x_inc,y_  
int error=0;  
if(x1&319||x2&319)  
if(y1&199||y2&199)  
dy=y2-y1;  
if(dx&=0){  
x_inc=1;  
x_inc=-1;  
if(dy&=0){  
y_inc=1;  
y_inc=-1;  
if(dx&dy){  
for(index=0;index&=index++){  
draw_pixel(x1,y1,g_current_color);  
error+=  
if(error&dx){  
error-=  
y1+=y_  
x1+=x_  
for(index=0;index&=index++) {  
draw_pixel(x1,y1,g_current_color);  
error+=  
if(error&0){  
error-=  
x1+=x_  
y1+=y_  
}  }  void draw_rectangle (unsigned left, unsigned top, unsigned right, unsigned bottom){    
if(left&319||right&319)  
if(top&199||bottom&199)  
if(left&right){  
t= left= right=t;  
if(top&bottom){  
t= top= bottom=t;  
draw_line(left,top,right,top);  
draw_line(left,top,left,bottom);  
draw_line(left,bottom,right,bottom);  
draw_line(right,top,right,bottom);  }  void draw_bar (unsigned left, unsigned top, unsigned right, unsigned bottom){    
unsigned x,y,t;  
if(left&319||right&319)  
if(top&199||bottom&199)  
if(left&right){  
t= left= right=t;  
if(top&bottom){  
t= top= bottom=t;  
for(y=y&=y++){  
/*draw_line(left,y,right,y);*/  
for(i=i&=i++)  
draw_pixel(i,y,g_current_color);  
}  }  
  /*==========out_text function=============*/  void print_hz(char *zimo,int size,int x,int y){  
int i,j,k,n;  
if(x&0||x&303||y&0||y&183)  
n=(size-1)/8+1;  
for(j=0;j&j++)  
for(i=0;i&n;i++)  
for(k=0;k&8;k++)  
if(zimo[j*n+i]&(0x80&&k))  
draw_pixel(x+i*8+k,y+j,g_current_color);  }  void print_hzk(char *hz,int x,int y,const char *path){  
int c1,c2;  
FILE *fp=NULL;  
char buf[32];  
if(x&0||x&303||y&0||y&183)  
fp=fopen(path,&rb&);  
if(fp==NULL){ close_graph(); printf(&Cant find file hzk16&); exit(0);}  
c1=hz[0]-0xa0;
//c1=(c1&&8)&&8;  
c2=hz[1]-0xa0;
//c2=(c2&&8)&&8;  
offset=(94*(c1-1)+(c2-1))*32L;  
fseek(fp,offset,0);  
fread(buf,32,1,fp);  
print_hz(buf,16,x,y);  
fclose(fp);  }  void print_ascii(char c,int x,int y){   /*ascii 8*8 字模点阵地址=0xF000:0xFA6E*/  
char m[8];  
int i,j;  
char far *p=(char far*)0xf000fa6e;  
if(x&0||x&311||y&0||y&191)  
p=p+c*8;  
memcpy(m,p,8);  
if((x&311)&&(y&191)){  
for(i=0;i&8;i++)  
for(j=0;j&8;j++){  
if(m[i]&(0x80&&j))  
draw_pixel(x+j,y+i,g_current_color);  
}  }  /*==========out_text function END=========*/  void out_text_xy (unsigned x,unsigned y,const unsigned char *text){  
int t_x,t_y;    
unsigned char *t_text=NULL;  
if(x&311||y&191)  
t_text = (unsigned char *)  
while(*t_text!=
  piao a piao
  靠,这题目吓我一跳。白痴,C语言应用广泛、生命力强劲,就别拿你们计算机软件的那种眼光来看问题了。
  C语言正当壮年呢,怎么会死?还有别的高级语言可以替代它么?  很多行业还在扩展c语言呢。。应叻沙发上那个人的话。。不要太井底之蛙叻。。
使用“←”“→”快捷翻页
请遵守言论规则,不得违反国家法律法规回复(Ctrl+Enter)

我要回帖

更多关于 c语言调试一闪而过 的文章

 

随机推荐