老李

共赢股海,寂寞投机

原创 我--曾经的C语言痴迷者,就算C死了,也永远活在我心里收藏

新一篇: 女人比男人长寿的根本原因是完成"生殖活动"显然晚于男人(本人的大胆假设) | 旧一篇: 男的依然是禽兽,女的却已禽兽不如了

     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真的死了,我还是愿意让她永远留在我心里...

附带大二时写的代码:

一个dos用的定时器:

//没什么注释,见笑了..呵呵
/*

=============DOS TIMER  Head File
=============CopyRight (C) LGc
=============QQ:66855618
=============E-Mail: hoya-lee@sohu.com
*/
#ifndef _TIMER
#define _TIMER
/*===========head file include============*/
#if     !defined(__DOS_DEF_)
#include 
<dos.h>
#endif
#include 
<math.h>
/*===========macro defined================*/
#define TIMER (0x1c)        //dos timer interrupt
/*===========globe variable===============*/
int timer_counter=0;

//be used for save old interrupt function pointer for restore interrupt
void interrupt (*old_interrupt)()=NULL;     
/*===========data structure===============*/
/*===========function declare=============*/
void interrupt new_interrupt();        //set this function beto new 0x1c interrupt what call next function
void set_timer(void interrupt (*interrupt_fun)());    //set 0x1c interrupt (look last function)
void kill_timer();        //restore old 0x1c interrupt
void delay_ms(int ms);
/*===========function implement===========*/
void interrupt new_interrupt(){
    timer_counter
++;
    
return ;
}
void set_timer(void interrupt (*interrupt_fun)()){
    timer_counter
=0;
    old_interrupt
=getvect(TIMER);    //get one interrupt vector
    if(interrupt_fun==NULL) return ;
    disable();
    setvect(TIMER,interrupt_fun);    
//set one interrupt vector
    enable();
}
void kill_timer(){
    
if(old_interrupt==NULL) return ;
    disable();
    setvect(TIMER,old_interrupt);
    enable();
}
void delay_ms(int ms){
    
int t_timer=timer_counter;
    set_timer(new_interrupt);
    
while(1)
        
if(ms==(abs(timer_counter-t_timer)*100)){
            kill_timer();
            
return ;
        }
}
/*===========END==========================*/
#endif

 

一个dos下的简单图形函数库

 

/*
=============0x13h display mode version 1.1 Header
=============CopyRight (C) LiGungcun
=============QQ:66855618
=============E-Mail: hoya-lee@sohu.com
--------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_color;    //setcolor current color for draw
unsigned char g_back_color;        //setcolor backgrand color for draw
int g_image_height;                //get image from screen height
int g_image_width;                //get image from screen width
void far *g_bitmap;                //a bit_image pointer
/*
===========data structure===============*/
typedef 
struct {
    unsigned 
char r;    //Dos VGA 13 Mode 
    unsigned char g;    //256Color
    unsigned char b;    //wei cai
} palette_type;            //palette
typedef struct{
    unsigned 
long fsize;        /*2文件大小4B*/
    unsigned 
long offset;        /*10图象数据在文件中的偏移地址4B*/
    unsigned 
long width,height;    /*18,22宽高(像素)4B+4B*/
    unsigned 
int bit;            /*28指明每个像素点需要的位数2B*/
    unsigned 
long compres;        /*30压缩标志0为不压1为256色压4B*/
    unsigned 
long bsize;        /*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    draw_line           (unsigned x1,unsigned y1,unsigned x2,unsigned y2);
void    draw_rectangle      (unsigned left, unsigned top, unsigned right, unsigned bottom);
void    draw_bar            (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    put_image           (unsigned left,unsigned top,void far *bitmap);
int     get_max_x           (void);
int     get_max_y           (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     show_bmp            (int x,int y,char *path);
/*===========function implement===========*/
void init_graph(void){
    union REGS r;
    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;
    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))=color;
    }
    
else
        
return;
}

//these algorithm reference my <<digital image>>
void draw_line (unsigned x1,unsigned y1,unsigned x2,unsigned y2){
    
int dx,dy,index,x_inc,y_inc;
    
int error=0;
    
if(x1>319||x2>319return ;
    
if(y1>199||y2>199return ;
    dx
=x2-x1;     dy=y2-y1;
    
if(dx>=0){
        x_inc
=1;
    }
    
else{
        x_inc
=-1;
        dx
=-dx;
    }
    
if(dy>=0){
        y_inc
=1;
    }
    
else{
        y_inc
=-1;
        dy
=-dy;
    }
    
if(dx>dy){
        
for(index=0;index<=dx;index++){
            draw_pixel(x1,y1,g_current_color);
            error
+=dy;
            
if(error>dx){
                error
-=dx;
                y1
+=y_inc;
            }
            x1
+=x_inc;
        }
    }
    
else{
        
for(index=0;index<=dy;index++) {
            draw_pixel(x1,y1,g_current_color);
            error
+=dx;
            
if(error>0){
                error
-=dy;
                x1
+=x_inc;
            }
            y1
+=y_inc;
        }
    }
}
void draw_rectangle (unsigned left, unsigned top, unsigned right, unsigned bottom){
    unsigned t;
    
if(left>319||right>319return ;
    
if(top>199||bottom>199return ;
    
if(left>right){
        t
=left; left=right; right=t;
    }
    
if(top>bottom){
        t
=top; top=bottom; 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){
    
int i;
    unsigned x,y,t;
    
if(left>319||right>319return ;
    
if(top>199||bottom>199return ;
    
if(left>right){
        t
=left; left=right; right=t;
    }
    
if(top>bottom){
        t
=top; top=bottom; bottom=t;
    }
    
for(y=top;y<=bottom;y++){
        
/*draw_line(left,y,right,y);*/
        
for(i=left;i<=right;i++)
            draw_pixel(i,y,g_current_color);
    }
}
void draw_circle (unsigned x, unsigned y, unsigned r){
     
int t_x,t_y,i;
     
float pi_2=6.283;
     
if(x>319||y>199return ;
     
if(r>319return ;
     
for(i=1;i<720;i++){
        t_x
=x+r*cos(pi_2/720*i);
        t_y
=y+r*sin(pi_2/720*i);
        draw_pixel(t_x,t_y,g_current_color);
     }
}
void draw_solid_circle(unsigned x, unsigned y, unsigned r){
     
int i;
     
if(x>319||y>199return ;
     
if(r>319return ;
     
for(i=1;i<r;i++)
        draw_circle(x,y,i);
}
void clear_device (unsigned left,unsigned top,unsigned right,unsigned bottom){
     unsigned 
char t_color;
     t_color
=g_current_color;
     set_current_color(get_back_color());
     draw_bar(left,top,right,bottom);
     set_current_color(t_color);
}
void set_back_color (unsigned char color){
    unsigned 
char t_color;
    g_back_color
=color;
    t_color
=get_current_color();
    set_current_color(color);
    draw_bar(
0,0,get_max_x(),get_max_y());
    set_current_color(t_color);
}
unsigned 
char get_back_color (void){
    
return g_back_color;
}
void set_current_color (unsigned char color){
    g_current_color
=color;
}
unsigned 
char get_current_color (void){
    
return g_current_color;
}
void far *get_image (unsigned left, unsigned top, unsigned right, unsigned bottom){                
    unsigned 
char *t_video=NULL,*t_bitmap=NULL;
    
int i; unsigned t;
    
if(left>319||right>319return NULL;
    
if(top>199||bottom>199return NULL;
    
if(left>right){
        t
=left; left=right; right=t;
    }
    
if(top>bottom){
        t
=top; top=bottom; bottom=t;
    }
    g_image_height
=bottom-top+1;  g_image_width=right-left+1;
    
if((g_bitmap=(unsigned char *)malloc(g_image_height*g_image_width))==NULL)
        
return NULL;
    t_video
=MK_FP(0xa000,((top<<8)+(top<<6))+left);
    t_bitmap
=g_bitmap;
    
for(i=0;i<g_image_height;i++){
        memcpy(t_bitmap,t_video,g_image_width);
        t_bitmap
+=g_image_width;
        t_video
+=320;
    }
    
return g_bitmap;
}
void put_image (unsigned left,unsigned top,void far *bitmap){
    unsigned 
char *t_video=NULL,*t_bitmap=NULL;
    
int i;
    
if(bitmap==NULL) return ;
    
if(left>319||top>199return ;
    
if(left+g_image_width>321||top+g_image_height>201return ;
    t_video
=MK_FP(0xa000,((top<<8)+(top<<6))+left);
    t_bitmap
=bitmap;
    
for(i=0;i<g_image_height;i++){
        memcpy(t_video,t_bitmap,g_image_width);
        t_bitmap
+=g_image_width;
        t_video
+=320;
    }
    free(bitmap);  bitmap
=NULL;
    g_image_width
=0;
    g_image_height
=0;
}
int get_max_x (void){
    
return 319;
}
int get_max_y (void){
    
return 199;
}
unsigned get_pixel (unsigned x,unsigned y){
    unsigned 
char *video_buffer=NULL;
    
if(x<320){
        video_buffer
=MK_FP(0xa000,((y<<8)+(y<<6))+x);
        
return *(video_buffer);
    }
    
else
        
return 300;
}
/*==========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>183return ;
    n
=(size-1)/8+1;
    
for(j=0;j<size;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];
     unsigned 
long offset;
     
if(x<0||x>303||y<0||y>183return ;
     fp
=fopen(path,"rb");
     
if(fp==NULL){ close_graph(); printf("Can't 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>191return ;
    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;
    
int i;
    unsigned 
char *t_text=NULL;
    
if(x>311||y>191return ;
    t_x
=x;  t_y=y;  t_text = (unsigned char *) text;
    
while(*t_text!='

发表于 @ 2007年01月09日 13:06:00|评论(loading...)|编辑

新一篇: 女人比男人长寿的根本原因是完成"生殖活动"显然晚于男人(本人的大胆假设) | 旧一篇: 男的依然是禽兽,女的却已禽兽不如了

评论

#logoto_IT 发表于2007-01-09 13:23:30  IP: 202.136.215.*
C语言的确在 底层方面表现优秀
不过我觉得没有必要弄得死去活来的,呵呵,帮兄弟顶一下
#hoya5121 发表于2007-01-09 13:26:39  IP: 222.88.77.*
主要是看到最近大家在讨论"C语言已死"的话题,就想起自己的过去....有感而发
#wswqwps 发表于2007-01-09 21:58:52  IP:
我和你一届的,不过比你差远了。我也喜欢图形学,给点入门的建议吧!
#hoya5121 发表于2007-01-10 08:41:12  IP: 222.88.77.*
上面函数没贴完,晕
/*==========out_text function END=========*/
void out_text_xy (unsigned x,unsigned y,const unsigned char *text){
int t_x,t_y;
int i;
unsigned char *t_text=NULL;
if(x>311||y>191) return ;
t_x=x; t_y=y; t_text = (unsigned char *) text;
while(*t_text!='\0'){
/*用print_hzk print_ascii 函数输出连续的字符序列*/
if(*(t_text)>128&&*(t_text+1)>128){
print_hzk(t_text,t_x,t_y,"hzk16");
t_x+=17;
t_text+=2;
}
else if(*(t_text)<128){
t_y+=8;
print_ascii(*t_text,t_x,t_y);
t_x+=9;
t_y-=8;
t_text+=1;
}
}
}

void set_palette(unsigned color_index,palette_type rgb){
outportb(0x3c6,0xff); /*调色板屏蔽寄存器*/
outportb(0x3c8,color_index);/*写颜色寄存器*/
outportb(0x3c9,rgb.r);
outportb(0x3c9,rgb.g);
outportb(0x3c9,rgb.b);
}
palette_type get_palette(unsigned color_index){
palette_type rgb;
rgb.r=rgb.g=rgb.b=-1;
outportb(0x3c6,0xff);
outportb(0x3c7,color_index);/*读颜色寄存器*/
rgb.r=inportb(0x3c9);
rgb.g=inportb(0x3c9);
rgb.b=inportb(0x3c9);
return rgb;
}
int show_bmp(int x,int y,char *path){
FILE *fp=NULL;
char *str=NULL;
int n,i,c;
int w,h;/*实际能显示出来的宽和高*/
palette_ty
#wsy2005wsy 发表于2007-01-10 15:33:22  IP: 58.47.143.*
我是一名大二计算机系的学生,有些困惑,能加我QQ指点迷津吗?我的QQ是623207451 小菜鸟先道声谢谢了~!!
#hanjin26 发表于2007-01-10 22:02:08  IP: 58.240.201.*
不知你现在从事哪方面的图形程序开发,就你贴出来的哪些"底层",java也能做,例如swing也是java画出来的, 有空看看java的API和API的源码相信会有所收获.
#hoya5121 发表于2007-01-11 08:33:26  IP:
好的,谢谢,有时间我看看java的,我现在做计算几何方面的,不过也不是底层,不过是看些外国人的算法和论文然后翻译成程序,其实我水平的确不高,我的文章也不过是希望对在校学弟有启示作用,不敢对高手指手画脚的.呵呵
#hoya5121 发表于2007-01-12 19:48:16  IP: 121.41.0.*
35301072
一个朋友的C语言QQ群
#Dufanyu 发表于2007-01-12 22:54:12  IP:
今天得见兄第的文章,感慨很多,为兄弟现在的收获感到高兴,因为我知道那一个个通宵的付出,能够坚持者,才能有所得!
#hoya5121 发表于2007-01-12 23:20:12  IP: 121.41.0.*
谢谢楼上的,与君共勉
#yulichao 发表于2007-01-13 21:53:08  IP: 58.20.53.*
C关键是速度好,缺点是类库使用比较麻烦,指针比较头疼。我觉得如果不是为了效率没必要用C。当然C还是最伟大的,因为计算机世界的基础应用都是C编的
#opvcn 发表于2007-01-14 10:29:39  IP: 218.62.102.*
帮顶了 人气呀 ~
#codestart 发表于2007-01-15 23:35:06  IP:
缺点是类库使用比较麻烦----------------------
不敢苟同楼上兄弟的说法,c语言的类库还是很多的,而且很多方面,特别在服务器开发上,嵌入式开发上,c语言还是有很多代码,很多库来支持的,而且很多都是相当不错的库。
#wuhuiran 发表于2007-01-16 09:14:59  IP: 222.88.77.*
在C中,你吃饭就是吃饭,捧起碗来喝酒,放下筷子骂娘,甩开膀子抓肉,撸起袖子抹油……

C语言的代码很优美,很带劲阿
C语言在操作系统开发,驱动开发方面还是霸主地位的
#irplay 发表于2007-01-23 18:11:03  IP: 221.224.91.*
开发一个OS,都能卖上千万的.除了C,还没见过哪个语言可以.
#zenny_chen 发表于2007-01-23 19:55:09  IP: 222.67.218.*
Author, I support you!
#zenny_chen 发表于2007-01-23 20:00:18  IP:
安心するんだよ!

连汇编都没死还轮得到C?

《The Art of Computer Programming》中的很多算法描述就是Donald大师用他自己创造的MIX汇编语言描述的。这就是计算机的最高境界。

C/C++ makes me もっともっと 強いだ!
#hoya5121 发表于2007-01-23 21:55:41  IP: 61.233.66.*
楼上的楼上,谢谢支持
还有楼上的是日语还是啥啊?什么意思?
#soonincome 发表于2007-01-23 23:55:28  IP: 218.18.70.*
好像相似的经历,c语言, 数据结构,汇编语言,计算机图形学,但是现在很多都开始用java了, 渐渐淡忘了c, 不过比你丰富的一点是尝试过delphi,没怎么深入,简单接触过一些. 现在慢慢不写程序了, 搞安全那,真的如你开始所想,成为一名防御黑客的专业人士!
#linx00 发表于2007-01-24 01:05:12  IP:
呵呵 本来没有什么话要说的,但是看了你贴出来的代码。有些佩服你,很佩服你那种兴致,不过想想你是学图形学的,写这些代码也也是正常的。不过还是佩服你。^_^
#hoya5121 发表于2007-01-24 08:31:58  IP: 222.88.77.*
其实有时候我也搞不清楚,到底那些“基础”用不用学?
我很想告诉学弟们要打好基础,要象我那样写显存拷贝,中断计时,只有写了这些才会象认识自己一样了解计算机。可是每当我想说这些话时又好像少了份信心,现在是java的时代,是模式的时代,大家讨论的都是架构,都是工程,到底还需不需要了解计算机?自己的都迷茫了也就没有资格告诉别人怎么学了,呵呵
#xiaoqulai 发表于2007-01-24 08:36:46  IP: 203.94.2.*
楼主不要被一下此人的话误导:
# hoya5121 发表于2007-01-11 08:33:26 IP:
好的,谢谢,有时间我看看java的,我现在做计算几何方面的,不过也不是底层,不过是看些外国人的算法和论文然后翻译成程序,其实我水平的确不高,我的文章也不过是希望对在校学弟有启示作用,不敢对高手指手画脚的.呵呵

我现在做的是JAVA,目前正在做一个韩国的项目,用的是Swing,以前我学过C,有一定了解,楼主的程序跟Swing是两回事。楼主是的程序是在DOS的环境下画图,难度要大得多,而Swing不过是调用了系统的API。Swing是决不可能在DOS环境下调用画图函数的,呵呵。

最后说一下:楼主的程序很棒!
#xiaoqulai 发表于2007-01-24 08:39:08  IP: 203.94.2.*
晕,上贴帖错了,是这个:
# hanjin26 发表于2007-01-10 22:02:08 IP: 58.240.201.*
不知你现在从事哪方面的图形程序开发,就你贴出来的哪些"底层",java也能做,例如swing也是java画出来的, 有空看看java的API和API的源码相信会有所收获.
此人一看就是菜鸟。

交个朋友吧! MSN:xiaoqulai@gmail.com
#cxz7531 发表于2007-01-24 08:44:01  IP: 61.114.254.*
就语言层面来说,java当然是最优秀的,纯粹的面向对象,资源访问、内存管理都是很方便的,更不用说跨平台优点了。就是图形编程,swing的架构也是最先进的,缺点是外观不怎么好看,限制了它的推广,但swing把数据模型、渲染都交给用户定制是其他语言所不及的,提供了最大限度的灵活性。

就应用范围来说,java和C基本上是井水不凡河水
#luckysym 发表于2007-01-24 09:04:09  IP: 60.176.177.*
任何事情的发生都是有条件的,包括C语言的死。

很多人都忘记了一件事,C语言的死只是在某些软件领域比如所谓的MIS系统、WEB应用等,而这些软件设计领域,在C语言诞生的时候几乎就不存在,也就是说C语言并不是为他们而存在的,C的诞生时也不可能考虑到要为30年后的企业应用、WEB应用做准备。

尽管C语言在新兴的软件领域并不擅长,但是C语言诞生时就已经存在的那类软件如系统软件,到目前C语言仍旧时这类软件开发的绝对主力。只要这类软件不消亡,C语言就不会死。
#hoya5121 发表于2007-01-24 09:39:02  IP: 222.88.77.*
xiaoqulai 发表于2007-01-24 08:39:08 IP: 203.94.2.*
晕,上贴帖错了,是这个:
# hanjin26 发表于2007-01-10 22:02:08 IP: 58.240.201.*
不知你现在从事哪方面的图形程序开发,就你贴出来的哪些"底层",java也能做,例如swing也是java画出来的, 有空看看java的API和API的源码相信会有所收获.
此人一看就是菜鸟。
交个朋友吧! MSN:xiaoqulai@gmail.com

记得早期的C语言编译器是用asm写的,但是有个牛人(好像是开发C的那个)把它又用C语言重写了,虽然汇编效率高,但是汇编组织高复杂度的东西时一定没有C强大,那么可以相信C也一定没有java强大,所以只有领域不同,我相信java是很有前途的。
另外我没有msn啊,我有QQ,66855618。请加我QQ吧,或者在我博客里留言,我会及时回复的
#lovesinox 发表于2007-01-24 10:25:40  IP: 125.254.133.*
用sepl吧,这是潮流.
#constname 发表于2007-08-23 22:10:44  IP: 220.163.20.*

C语言 -> C语言DOS图形库 -> OS API -> 中断
C语言 -> GDI封装库 / OpenGL/DirectX -> OS API -> 中断
Java -> Swing -> OS API -> 中断
汇编 -> OS API -> 中断
汇编 -> 中断
VC -> MFC库 -> GDI API-> 中断
............
:D
#cheungmine 发表于2007-09-24 10:37:47  IP: 58.33.46.*
首先,不存在C死不死的问题。其次C永远不会死,即使C++、Java、C#、Basic、Pascal、Perl、Javascript...这些语言都死光了,C也不会死。
C能做什么?几乎所有事情。C做的比你所知道的会做的更好。前提是有人肯这么做。
当然,OS、DB底层、芯片、高质量的算法代码、运行在人造卫星和航天飞机上的程序...,这些大部分都是C写成的。
#rexduke 发表于2008-06-30 16:02:57  IP: 221.236.109.*
我现在很困惑.我就是一个初中生.
现在在学C语言.学了还要学VC++
是自学.感觉好累啊。.
我才开始学...不知道什么时候才是个头啊.
我想找个大哥好好的带带我。小弟才18.
我的QQ343416420
请好心人带带我,.
请好心人带带我,.
请好心人带带我,.
请好心人带带我,.
请好心人带带我,.
请好心人带带我,.
请好心人带带我,.
发表评论  


登录
Csdn Blog version 3.1a
Copyright © 老李