C语言之“先有的鸡还是先有的蛋”浅谈

之前在一个十分著名的网站上看到:“Visual Studio 2010的界面是使用用WPF开发的”;后来又看到“C语言的编译器通常是用C语言或是C++语言开发”,好迷惑啊,怎么感觉好像有有自己生自己,鸡生蛋、蛋生鸡,鸡鸡蛋蛋无穷无尽的意思啊。

WPF本身就是Visual Studio 中提供的一种开发项目模板,怎么Visual Studio 的界面是用它开发的?是现有的Visual Studio 还是先有的WPF?

C语言编译器就是用来编译C语言的,如果C语言编译器也是C开发的,那么是先有C还是先有C编译器?没有C哪来的C编译器?没有C编译器又怎么去编译C?好绕人啊!

仔细想了想,理了理思路,总算是想到了一个能让自己满意的解答。其实”C语言编译器是用C语言开发“这句话的正确理解应该是这样的一个过程:

1. 首先使用汇编语言编写出一个C语言编译器 I.exe(也就是早起的C编译器);

2. 有了 I.exe 之后,就可以用 I.exe 来编写C代码,得到一个程序 II.exe

3. II.exe的功能就可以是读取文本(即C语言源代码),根据文本的生成相应的汇编代码。

4. 这里的 II.exe 其实就是”用C语言开发的C语言编译器“

其实鸡也一样,首先是没有鸡的,后来因为两个不知名的物种,杂交生下了鸡,就像驴和马生成了骡一样,区别就是骡是不可生育的,鸡是可以下蛋的,于是,鸡就开始下蛋,蛋就开始孵化成鸡,于是就有了现在这么多鸡和鸡蛋。

时间: 2024-11-14 12:26:30

C语言之“先有的鸡还是先有的蛋”浅谈的相关文章

C语言中的位拷贝与值拷贝浅谈(转载)

注:C语言实现的PHP变量的赋值过程中,就涉及到了 深拷贝和浅拷贝 位拷贝拷贝的是地址(也叫浅拷贝),而值拷贝则拷贝的是内容(深拷贝).深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝. 位拷贝,及"bitwise assignment"是指将一个对象的内存映像按位原封不动的复制给另一个对象,所谓值拷贝就是指,将原对象的值复制一份给新对象. 在用"bitwise assig

浅谈C语言中的联合体(转载)

联合体union 当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union).在C Programming Language 一书中对于联合体是这么描述的: 1)联合体是一个结构: 2)它的所有成员相对于基地址的偏移量都为0: 3)此结构空间要大到足够容纳最"宽"的成员: 4)其对齐方式要适合其中所有的成员: 下面解释这四条描述: 由于联合体中的所有成员是共享一段内存的,因此每个成员的存放首地址相对于于联合体变量的基地址的偏移量为0,即所有成员的首地址都是一样的.为

浅谈随机数发生器(C语言)

本文出自:点击打开链接 本来在做数据结构课程设计..想用随机数生成测试数据,然后看到随机数就不由自主的想到精度问题,想到精度问题又想到随机数生成的时间问题,想到时间问题又想到调用系统随机数生成问题..呵呵呵呵呵. C语言调用Linux系统随机数:linux C程序中获取shell脚本输出 C语言往里写就好说了(Linux) const char *run ="echo '"+str+"' > test"; system(run); 另外在Google比较难以访

浅谈C语言中的强符号、弱符号、强引用和弱引用

摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014-10-31 我要评论 这篇文章主要介绍了C语言中的强符号.弱符号.强引用和弱引用的定义及相关内容,非常的简单易懂,有需要的朋友可以参考下 首先我表示很悲剧,在看<程序员的自我修养--链接.装载与库>之前我竟不知道C有强符号.弱符号.强引用和弱引用.在看到3.5.5节弱符号和强符号时,我感觉有些困惑

Web服务器和动态语言如何交互--CGI&amp;FastCGI&amp;FPM浅谈

一个用户的Request是如何经过Web服务器(Apache,Nginx,IIS,Light)与后端的动态语言(如PHP等)进行交互并将结果返回给用户的呢? 本文浅谈个人观点,可能有误,欢迎拍砖,共同学习. 一. 首先明确几个概念,以便后续说明 CGI:(Common Gateway Interface)Http服务器与后端程序(如PHP)进行交互的中间层. 工作原理及处理方式(fork-and-execute模式): 1.当Web Server有Request到达 2.fork一个CGI进程或

浅谈c语言typedef 与结构体指针(个人小经验)

 #include<stdio.h> #include<string.h> typedef struct emp{ char sex[8]; char name[15]; int age; }*emp;//这里我们用typedef把emp这个结构体变成了*emp这种指向结构体成员的结构体指针 /*typedef struct emp{ char sex[8]; char name[15]; int age; }pi,*emp;//为了程序的可读性最好不要这样声明*/ int m

C语言之通过冒泡排序浅谈编程思想

写这篇博文的目的是想起到抛砖引玉的作用,还请大牛们留下一些先进的思想,让小菜学习一下.下面入正题. 复习C语言怎么能少的了冒泡呢,记得刚学C语言那会,感觉冒泡排序真的太复杂了,理解不大了,嗯!还是当时的功底不够啊.当时一些冒泡都头疼,感觉这么多的循环(哈哈!!其实也就俩,当时就是感觉太复杂).现在再写冒泡排序,感觉自己当时学C语言的时候是不是太笨了呢. 仔细想想,之前写冒泡之所以感觉到难是没有真正的理解冒泡的思想,就硬着头皮写,结果可以想象,是以失败而告终的.现在写代码也有一段时间了,学的编程语

先有鸡还是先有蛋?应用程序开发与安全

在以前,2013年被认为是"资料外泄的一年",这或许是大错特错.2014年到目前为止,仅仅在美国,有纪录的外泄事件就有600起.这是个全球性的问题,需要更多的投资和能见度.近期所披露的JP摩根和可能的其他几个美国银行网络防御被攻破的确十分惊人. 许多焦点都放在攻击者身上:他们来自哪个国家,攻击背后有什么动机.是国家行动.金钱导向还是黑客主义者?有内贼或承包商疏忽吗?是中国还是俄罗斯?这些攻击以前所未有的程度发生,大多数入侵渗透发生在没有被适当修补的用户计算机或服务器.这本质上是因为应用

浅谈C语言字符串结束符&#39;\0&#39;

如果你希望你的字符串以’\0‘结束,那么你可以这样做: 1 char str[]={"hello"};//①字符串赋值 2 char str[]={'h','e','l','l','o','\0'};//②人为添加 3 char str[6]={'h','e','l','l','o'};//③故意给数组预留一个空位 注:当出现以下情况时,会发生'\0'丢失 1 char str[5]={"hello"};//①数组长度不够 2 char str[]={'h','e'