闲言
用Java语言用久了已经习惯了“Java思维”,不禁想起网上流行的一句话“如果你手里有一把锤子,所有东西看上去都像钉子”......
最近用Java Swing写了个工具,打包成exe做些简单的密码运算,东西做完了测试效果还可以;在公司实际用的时候发现点退出的时候会提示程序崩溃。开始以为代码有缺陷,windows程序dump也看不懂,查了半天也没结果,很无语。
前两天用IDEA,关闭的时候居然也崩溃了,经过总结对比,终于发现罪魁祸首是google拼音输入法(近期安装的最新版本),windows原生的exe却没事儿。于是有了重拾C的想法。
以前也在别人的代码基础上修修补补鼓捣点东西,但是C的运行原理和Java差别太大,以至于去问做C的人怎么把COM像静态库一样打包到exe里面,闹出了笑话。
买了本《程序员的自我修养》,在网上补了下,开始C语言的入门之旅。
看这篇博文的人想必都在学校里入门过C了,所以这里没有数组指针结构体,直接面向平台编程。
正言
一段代码要变成Linux(Windows也一样)下ELF格式的可运行文件,要经过以下步骤:
1、预处理
gcc -E test.c -o test.i 或 gcc -E test.c
2、编译
gcc -S test.i -o test.s
3、汇编
gcc -c test.s -o test.o
4、链接
gcc test.o -o test
每一步生成的结果都有对应工具可以查看,暂且不论,因为我们的首要目标是实用,所以离不开头文件和库,包括动态库和静态库。
这里是一个“五脏俱全”包含五个文件的HelloWorld,五个文件分别是。
join.c
#include <string.h> /* *join two string together */ char *join(char *dst, char *src){ char* fullName = (char*)malloc(strlen(dst) + strlen(src)); strcpy(fullName, dst); strcat(fullName, src); return fullName; }
hello.c
#include <stdio.h> #include <stdlib.h> #include <string.h> char* join(char* dst, char* src); void hello(char* name, char* familyName){ char* who = join(name, familyName); printf("Hi i am: %s.\n", name); free(who); }
hello.h
#include <stdio.h> #include <stdlib.h> void hello(char* name, char* family_name);
main.c
#include "hello.h" int main(){ char full_name[50] = "Jack boy"; hello(full_name, "Gates"); }
这里把join.c编译为一个静态库(动态库后面会有)main.c通过hello.h引用hello.c。
编译步骤如下:
第一步把join.c编译成目标文件:
gcc -c join.c -o join.o
第二步把目标文件打包成静态库
相关推荐
该资料是《C语言入门经典(第4版)》的源代码及课后练习答案 对应的书籍资料见: C语言入门经典(第4版) 基本信息 原书名: Beginning C: From Novice to Professional, Fourth Edition 原出版社: Apress 作者: ...
读过本之后可以感受到C语言的侧重点在于实践,从实践出发,提供了干货,让读者明白如何在实际编程中去运用,在每章最后都会有一节来让读者自己制作一个稍大些的程序,通过"问题-分析-解决方案"的方式逐步引导读者实际地...
C语言 不是光用说的 单片机就是很好的用武之地 看了这个之后也许 你会更胜人一筹 哟
这是经过整理与运行测试成功的C语言程序基础代码。如果你是初学C语言的朋友,他会对你帮助很大。资料内容详实、代码具全。特别适合初学者。
《单片机C语言轻松入门》结合了作者多年教学、科研实践所获取的经验,在单片机C语言课程教学改革基础上,融入了教学改革的成果而编写。它依据学习者的认知规律来编排内容,充分体现了以人为本的指导思想。 编辑推荐...
这套「C语言入门教程」将多年的编程经验灌输其中,典型的实践派。既适合初学者入门(学习语法),也适合程序员进阶(学习底层)。 学习C语言,除了要学习语法,还要学习内存、字符编码、调试技巧以及编程思维,这些...
C语言上机实践指导,入门必备!对于没有一点基础的人入门会有很大帮助的。
然而,Objective-C的学习并非一蹴而就,需要不断的实践和探索。未来,随着技术的不断发展和应用的深入,Objective-C仍将继续发挥其在iOS和macOS开发中的重要作用。 希望本教程能为读者在Objective-C的学习道路上提供...
c语言【2024年C语言入门这一篇就够了-学习笔记详解(超详细)简介】 内容概要: 本文为初学者提供了一个全面的学习指南,通过通俗易懂的语言和详细的代码注释,介绍了C语言的基础知识和高级特性。文章以小学生可以...
《新概念51单片机C语言教程:入门、提高、开发、拓展》内容丰富,实用性强,书中大部分内容均来自科研工作及教学实践,许多C语言代码可以直接应用到工程项目中。《新概念51单片机C语言教程》配套光盘提供13讲近30学时...
本课程是零基础的入门课程,完成本课程之后,就能具有初步的运用C语言编写程序的能力。要想完整的学习C语言,还需要进一步学习本课程的后续课程——《C语言程序设计进阶》。 程序设计是实践性很强的课程,该课程的...
实验报告,内含设计思想、实验代码及注释、验证与结论、总结与心得体会等。 实验一:运行环境及顺序结构 实验题目1:C编程环境 实验题目2:简单的四则运算实现 ...实验题目4:物品折旧计算器 实验二:选择结构 ...
实验报告,内含问题描述、设计思想、实验代码及注释、验证与结论、总结与心得体会等。 实验五:数组 实验题目1:数组元素遍历 实验题目2:数组合并与排序 实验题目3:填充矩阵 实验题目4:字串处理 ...
AVR单片机入门及C语言高效设计实践
48小时让您学会单片机C语言 基于51单片机 只要用心学保你48小时内学会单片机,但要熟练还得多实践
对于初学者从入门到实践的很好的指导。从入门到提高,再到实践。
初级c语言入门教程比较适合零基础的小白,这个周期一般在22天,度过这个阶段的小白,基本上已经拥有了编程思维,且能开发简单的C语言小程序。但要走入市场还是欠缺一定的理念实践。 中级教程。中级C语言教程,适合刚...
商业源码-编程源码-C语言开发入门与编程实践源码.zip
c语言基础
AVR单片机入门及C语言高效设计实践(九)