julius818 julius818
我反感C++的原因就是因为其全能而导致的杂.就像公司不进行明确职责定位的工作一样
关注数: 21 粉丝数: 286 发帖数: 953 关注贴吧数: 6
反思:为何我很反感c++? 经过一段时间的JAVA和objective-C学习后,我对面向对象的思想没有以前那么反感。但是一旦看到有人建议我学c++,我就很反感。我最近一直在想这个反感的根源是什么? 直到今天才想明白了?我反感的不是c++面向对象的思想,也不是泛型编程,更不是硬件高效应用。前两者,JAVA都有;硬件的高效应用纯c也具备。 我反感的是c++没有对自己明确的定位: 1,为了快速应用开发引入面向对象和泛型; 2,为了高效的硬件利用,又不放弃纯c的部分; 而我目前所从事的工作,公司给的定位是既是售后,又是设计,还有现场沟通。公司给我不明确的定位,导致了我在一个时间段内不知道是以哪项职责为主(其实我反感的原因有很大一部分就是现实工作给我带来的)。这种情况套用到c++就是,一个软件工程,我在设计时,是应该基于硬件考虑多一点,还是开发速度多一点。 c++手伸的太长了,他想无所不包,但包的又不彻底。就像一个人,是该选择文学,还是绘画,还是音乐;抑或是天文,化学,物理,生物;或者是人力资源管理,商务关系维护。是一个正常的人类,其会选择最喜欢的一项,其他的就碰一下就结束了。那么反映到c++的身上就是既想拿下底层开发领域,又想进军服务应用领域。两个都抓其实,就是都抓不牢。
『源代码分享』纯C如何编写界面 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面。大家也都有回答,需要其他的库。MFC,GTK,QT。 本人近期刚用GTK库加上纯C写成了第一个LINUX实用程序。现在与大家分享:主界面程序gmaxtrix.c #include<gtk/gtk.h> #include"client_socket.h" #define MAX_BUFFER 1024 static GtkWidget *IP_entry; static GtkWidget *port_entry; static gint sockfd; static gint tag; gchar buffer[MAX_BUFFER]; void g_show_alarm_dialog(const gchar *message){ GtkWidget *dialog; dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "%s",message); gtk_window_set_title(GTK_WINDOW(dialog),"警告"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } void g_client_send(GtkWidget *widget, gpointer textbuffer){ if (sockfd > 0){ client_send(sockfd, gtk_entry_buffer_get_text(GTK_ENTRY_BUFFER(textbuffer)), gtk_entry_buffer_get_bytes(GTK_ENTRY_BUFFER(textbuffer))); }else{ g_show_alarm_dialog("未连接到中控主机"); } } void g_client_recv(gpointer data, gint source, GdkInputCondition condition){ gint count = client_recv(source, buffer, MAX_BUFFER); buffer[count] = 0; GtkTextIter iter; gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(data),&iter); gtk_text_buffer_insert(GTK_TEXT_BUFFER(data),&iter,buffer,-1); } void g_client_connect(GtkWidget *widget, gpointer date){ if (sockfd > 0){ client_close(sockfd); gtk_button_set_label(GTK_BUTTON(widget),"连接"); gdk_input_remove(tag); }else{ sockfd = client_connect(gtk_entry_get_text(GTK_ENTRY(IP_entry)),atoi(gtk_entry_get_text(GTK_ENTRY(port_entry)))); gtk_button_set_label(GTK_BUTTON(widget),"断开"); tag = gdk_input_add(sockfd, GDK_INPUT_READ, g_client_recv,date); } } int main(int argc, char *argv[]){ gtk_init(&argc, &argv); GtkWidget *window; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit),NULL); gtk_widget_set_size_request(window, 260, 250); gtk_container_set_border_width(GTK_CONTAINER(window),5); GtkWidget *vbox; vbox = gtk_vbox_new(FALSE,1); gtk_container_add(GTK_CONTAINER(window),vbox); GtkWidget *hbox1; hbox1 = gtk_hbox_new(FALSE,1); gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE ,0); GtkWidget *table = gtk_table_new(2,2,FALSE); gtk_box_pack_start(GTK_BOX(hbox1), table, TRUE , TRUE , 0); GtkWidget *IP_label = gtk_label_new("地址:"); gtk_table_attach_defaults(GTK_TABLE(table),IP_label,0,1,0,1); IP_entry = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(table),IP_entry,1,2,0,1); GtkWidget *port_label = gtk_label_new("端口:"); gtk_table_attach_defaults(GTK_TABLE(table),port_label,0,1,1,2); port_entry = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(table),port_entry,1,2,1,2); GtkWidget *connect_button = gtk_button_new_with_label("连接"); gtk_box_pack_start(GTK_BOX(hbox1), connect_button, TRUE, TRUE ,0); GtkWidget *hseparator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 0); GtkWidget *hbox2; hbox2 = gtk_hbox_new(FALSE,1); gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE ,0); GtkWidget *send_entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox2), send_entry, TRUE, TRUE ,0); GtkWidget *send_button = gtk_button_new_with_label("发送"); gtk_box_pack_start(GTK_BOX(hbox2), send_button, TRUE, TRUE ,0); g_signal_connect(send_button, "clicked", G_CALLBACK(g_client_send), gtk_entry_get_buffer(GTK_ENTRY(send_entry))); GtkWidget *recv_text = gtk_text_view_new(); gtk_box_pack_start(GTK_BOX(vbox), recv_text, TRUE, TRUE, 0); g_signal_connect(connect_button, "clicked", G_CALLBACK(g_client_connect), gtk_text_view_get_buffer(GTK_TEXT_VIEW(recv_text))); gtk_widget_show_all(window); gtk_main(); return 0; } 后台网络通迅模型接口声明client_socket.h #ifndef CLIENT_SOCKET_H #define CLIENT_SOCKET_H int client_connect(const char *IP, const int port); void client_close(int sockfd); void client_send(int sockfd,const unsigned char *buffer, const size_t count); size_t client_recv(int sockfd,unsigned char *buffer,size_t count); #endif 后台网络通迅模型实现client_socket.c(采用POSIX接口,WIN下需改为win32API接口) #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <strings.h> #include <unistd.h> #include <arpa/inet.h> #include "client_socket.h" int client_connect(const char *IP, const int port){ static struct sockaddr_in servaddr; int sockfd = socket(AF_INET,SOCK_STREAM,0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; inet_pton(AF_INET, IP, &servaddr.sin_addr); servaddr.sin_port = htons(port); connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)); return sockfd; } void client_close(int sockfd){ close(sockfd); } void client_send(int sockfd,const unsigned char *buffer, const size_t count){ send(sockfd,buffer,count,0); } size_t client_recv(int sockfd,unsigned char *buffer,size_t count){ return recv(sockfd,buffer,count,0); } 编译脚本makefile gmaxtrix: gmaxtrix.o client_socket.o gcc gmaxtrix.o client_socket.o -o gmaxtrix `pkg-config --cflags --libs gtk+-2.0` gmaxtrix.o: gmaxtrix.c client_socket.h gcc -c gmaxtrix.c `pkg-config --cflags --libs gtk+-2.0` client_socket.o: client_socket.h client_socket.c gcc -c client_socket.c `pkg-config --cflags --libs gtk+-2.0` clean: @echo "cleanning project" -rm gmaxtrix *.o @echo "clean completed"
「分享」C语言如何编写图形界面 贴吧内经常有人问C语言是不是只能用于字符终端界面开发,不能用于图形界面。大家也都有回答,需要其他的库。MFC,GTK,QT。 本人近期刚用GTK库加上纯C写成了第一个LINUX实用程序。现在与大家分享:主界面程序gmaxtrix.c #include<gtk/gtk.h> #include"client_socket.h" #define MAX_BUFFER 1024 static GtkWidget *IP_entry; static GtkWidget *port_entry; static gint sockfd; static gint tag; gchar buffer[MAX_BUFFER]; void g_show_alarm_dialog(const gchar *message){ GtkWidget *dialog; dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "%s",message); gtk_window_set_title(GTK_WINDOW(dialog),"警告"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); } void g_client_send(GtkWidget *widget, gpointer textbuffer){ if (sockfd > 0){ client_send(sockfd, gtk_entry_buffer_get_text(GTK_ENTRY_BUFFER(textbuffer)), gtk_entry_buffer_get_bytes(GTK_ENTRY_BUFFER(textbuffer))); }else{ g_show_alarm_dialog("未连接到中控主机"); } } void g_client_recv(gpointer data, gint source, GdkInputCondition condition){ gint count = client_recv(source, buffer, MAX_BUFFER); buffer[count] = 0; GtkTextIter iter; gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(data),&iter); gtk_text_buffer_insert(GTK_TEXT_BUFFER(data),&iter,buffer,-1); } void g_client_connect(GtkWidget *widget, gpointer date){ if (sockfd > 0){ client_close(sockfd); gtk_button_set_label(GTK_BUTTON(widget),"连接"); gdk_input_remove(tag); }else{ sockfd = client_connect(gtk_entry_get_text(GTK_ENTRY(IP_entry)),atoi(gtk_entry_get_text(GTK_ENTRY(port_entry)))); gtk_button_set_label(GTK_BUTTON(widget),"断开"); tag = gdk_input_add(sockfd, GDK_INPUT_READ, g_client_recv,date); } } int main(int argc, char *argv[]){ gtk_init(&argc, &argv); GtkWidget *window; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit),NULL); gtk_widget_set_size_request(window, 260, 250); gtk_container_set_border_width(GTK_CONTAINER(window),5); GtkWidget *vbox; vbox = gtk_vbox_new(FALSE,1); gtk_container_add(GTK_CONTAINER(window),vbox); GtkWidget *hbox1; hbox1 = gtk_hbox_new(FALSE,1); gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE ,0); GtkWidget *table = gtk_table_new(2,2,FALSE); gtk_box_pack_start(GTK_BOX(hbox1), table, TRUE , TRUE , 0); GtkWidget *IP_label = gtk_label_new("地址:"); gtk_table_attach_defaults(GTK_TABLE(table),IP_label,0,1,0,1); IP_entry = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(table),IP_entry,1,2,0,1); GtkWidget *port_label = gtk_label_new("端口:"); gtk_table_attach_defaults(GTK_TABLE(table),port_label,0,1,1,2); port_entry = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(table),port_entry,1,2,1,2); GtkWidget *connect_button = gtk_button_new_with_label("连接"); gtk_box_pack_start(GTK_BOX(hbox1), connect_button, TRUE, TRUE ,0); GtkWidget *hseparator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 0); GtkWidget *hbox2; hbox2 = gtk_hbox_new(FALSE,1); gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE ,0); GtkWidget *send_entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox2), send_entry, TRUE, TRUE ,0); GtkWidget *send_button = gtk_button_new_with_label("发送"); gtk_box_pack_start(GTK_BOX(hbox2), send_button, TRUE, TRUE ,0); g_signal_connect(send_button, "clicked", G_CALLBACK(g_client_send), gtk_entry_get_buffer(GTK_ENTRY(send_entry))); GtkWidget *recv_text = gtk_text_view_new(); gtk_box_pack_start(GTK_BOX(vbox), recv_text, TRUE, TRUE, 0); g_signal_connect(connect_button, "clicked", G_CALLBACK(g_client_connect), gtk_text_view_get_buffer(GTK_TEXT_VIEW(recv_text))); gtk_widget_show_all(window); gtk_main(); return 0; } 后台网络通迅模型接口声明client_socket.h #ifndef CLIENT_SOCKET_H #define CLIENT_SOCKET_H int client_connect(const char *IP, const int port); void client_close(int sockfd); void client_send(int sockfd,const unsigned char *buffer, const size_t count); size_t client_recv(int sockfd,unsigned char *buffer,size_t count); #endif 后台网络通迅模型实现client_socket.c(采用POSIX接口,WIN下需改为win32API接口) #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <strings.h> #include <unistd.h> #include <arpa/inet.h> #include "client_socket.h" int client_connect(const char *IP, const int port){ static struct sockaddr_in servaddr; int sockfd = socket(AF_INET,SOCK_STREAM,0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; inet_pton(AF_INET, IP, &servaddr.sin_addr); servaddr.sin_port = htons(port); connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)); return sockfd; } void client_close(int sockfd){ close(sockfd); } void client_send(int sockfd,const unsigned char *buffer, const size_t count){ send(sockfd,buffer,count,0); } size_t client_recv(int sockfd,unsigned char *buffer,size_t count){ return recv(sockfd,buffer,count,0); } 编译脚本makefile gmaxtrix: gmaxtrix.o client_socket.o gcc gmaxtrix.o client_socket.o -o gmaxtrix `pkg-config --cflags --libs gtk+-2.0` gmaxtrix.o: gmaxtrix.c client_socket.h gcc -c gmaxtrix.c `pkg-config --cflags --libs gtk+-2.0` client_socket.o: client_socket.h client_socket.c gcc -c client_socket.c `pkg-config --cflags --libs gtk+-2.0` clean: @echo "cleanning project" -rm gmaxtrix *.o @echo "clean completed"
从柯南看中国动漫产业 我最近闲暇无聊时看了一下前13部柯南剧场版的收入情况: 引爆摩天楼(1997/04/23)票房:11亿日元 第十四个目标(1998/04/15)票房:18.5亿日元 世纪末的魔术师(1999/04/14)票房:26亿日元 瞳孔中的暗杀者(2000/04/12)票房:25亿日元 通往天国的倒计时(2001/04/11)票房:29亿日元 贝克街的亡灵(2002/04/17)票房:33.8亿日元 迷宫的十字路口(2003/04/19)票房:32亿日元 银翼的魔术师(2004/4/17)票房:28.5亿日元 水平线上的阴谋(2005/04/09)票房:21.5亿日元 侦探们的镇魂歌(2006/04/15)票房:30亿日元 绀碧之棺(2007/04/21)票房:25.3亿日元 战栗的乐谱(2008/04/19)票房:24.2亿日元 漆黑的追迹者(2009/4/18 )票房:35.93亿日元 我感到柯南这个形象已成为了一个虚拟的动漫明星,不再是一个动画形象。 再反观我国国内近几年的动漫产业情况,我总结出了以下几点: 1,思想观念上,制作动画的人还是承继老一辈的人思想,认为动画是给小孩子看的。就拿最近热播的《喜羊羊与灰太郎》还没有摆脱动画是给小孩子看的这个观点,全篇都是搞笑,介绍科学与奥运知识还是很呆板。(对于国内动漫,我觉得不错的应该是我高中时看的〈我为歌狂〉,这是一部面向15-17岁的高中生播放的。我当时的高中同学也挺喜欢这部作品。)而反观柯南这部动漫其各个事件中,都有对社会现实的思考,各种生活科学的应用与解答和情节的安排,都是以一个成年人的视角观察。 2,题材上,我近两年有时候浏览电视节目时,看到国内动漫整天就是从〈封神演义〉和〈西游记〉等名著当中的人物改编。就算你要从小说中改编,难道我们国家可以算得上好作品的就只有那明清时代的小说,当代的小说家都是废物,写不出超过前人的小说?而柯南情节,每个故事情节设计和推理思路都可以带动观众的大脑一起思考。 3,产业链上,中国动漫作品向来都是放在电视上播放,有时就发售一些原版CD赚些小钱;而柯南就不同,其是以漫画,电视和电影三种平台上传播,并且还有CD,公仔等周边产品的收入。目前国内仅喜羊羊与灰太狼有进行过这种尝试。 综合上述三点,我个人认为:产业链这块是最好解决的,一旦有受欢迎的作品,就会有资金注入去解决这块问题。难得是如何改变动画是画给小朋友看的这个传统观点。 现在中国人口结构老年比例会越来越大,出生率会越来越低,如果在那之前从业者还不能改变这个观点,那动漫产业就谈不上前途了。
1 下一页