write c like java

posted in: 技术 | 0 | (1281)次浏览
爱上走路-write c like java
爱上走路-write c like java
从大二开始,一直在写java,几乎是放弃了c,现在要把c捡起来,便有了这篇文章。

java和c是有本质的区别的,java是面向对象的,方法应由对象调用;c是面向过程的,属于函数式编程。

在编写一些小程序,使用java比c轻松很多,因为java封装了很多常用的数据结构,有良好的API(免费的)。这直接导致我萌生了一个想法,像写java一样写c。于是开始做了一些简单的工作,在不改变c语言面向过程编程的特性下,以头文件的形式封装一些常用的数据结构。具体如下,以queue为例:

1.定义头文件util.h,可以横向理解为java中的接口:
struct queue
{
int size;
int head;
int que[];
};
typedef struct queue Queue;

void queue_init(Queue *queue,int size);
void queue_add(Queue *queue,int item);
int queue_remove(Queue *queue);
void queue_display(Queue *queue);

2.编写头文件的实现util.c

void queue_init(Queue *q,int size){
q->size=size;
printf(“the size is %d.\n”,q->size);
q->head=-1;
}

void queue_add(Queue *q,int item){
if(q->head==q->size-1){
printf(“the queue is full.\n”);
}else{
q->head++;
q->que[q->head]=item;
printf(“%d has been added to the queue.\n”,item);
}
return;
}

int queue_remove(Queue *q){
if(q->head==-1){
printf(“the queue is empty.\n”);
return -1;
}else{
int i=0,item=q->que[0];
for(;i<q->head;i++){
q->que[i]=q->que[i+1];
}
q->head–;
printf(“%d has been removed from the queue.\n”,item);
return item;
}
}

void queue_display(Queue *q){
int *arr=q->que;
if(q->head==-1){
printf(“the queue is empty.”);
}else{
int i=0;
for(;i<=q->head;i++){
printf(“%d “,q->que[i]);
}
}
printf (“\n”);
return;
}

3.在主函数中包含util.h头文件,然后调用头文件中的方法即可。

void main(){
Queue q;

queue_init(&q,8);
queue_add(&q,1);
queue_add(&q,3);
queue_add(&q,5);
queue_add(&q,7);
queue_add(&q,9);
queue_remove(&q);
queue_add(&q,11);
queue_display(&q);
getchar();
}

BTW:写c程序的时候,推荐使用visual studio,它的代码审查、提示,程序运行、调试都很好用。但是在使用的时候需要注意几点:

1.新建win32控制台程序;

2.在项目属性中取消预编译头;

3.新建.c文件,不要.cpp;

4.为防止控制台快速闪退,在程序末尾加上getchar();

以上。