自适应网站什么意思,网站改版需求,推广策划书模板范文,宁波高等级公路建设指挥部网站最近用到ucos#xff0c;这个RTOS本身是用C语言和部分汇编编写#xff0c;而自己又打算用C来写应用#xff0c;在其中遇到几个问题#xff0c;一番折腾之后#xff0c;让我更加深刻认识到了在一些一般不注意的细节上#xff0c;C与C的不同。 1、对于ucos#xff0c;虽…最近用到ucos这个RTOS本身是用C语言和部分汇编编写而自己又打算用C来写应用在其中遇到几个问题一番折腾之后让我更加深刻认识到了在一些一般不注意的细节上C与C的不同。 1、对于ucos虽然我想Labrosse先生值得我们尊敬为我们提供了ucos这么一个优秀的学习、应用RTOS的样本。但是我认为Labrosse先生的C/C语言功力还算不上炉火纯青。一个简单例子在C中右值无论是何种类型皆可以强制转换为左值类型而不用强制说明但最好自己声明转换。ucos中大量的类型并没有手工声明转换类型而恰恰C中这样是通不过编译的除了基本类型转换。这样当我在工程中使用C编译器来编译时就会报告大量的类型转换出错。这个也许还算OK自己一条一条加上就OK了。 2、对于第二个问题这与Labrosse先生无关了不过我还是被折腾好半天。当我修改好上面的问题后编译再次出错这次问题提示说系统调度的一些核心函数没有定义。这我可晕了半天找了大半天问题除了发现这些报告未定义的函数都是出自于一个ASM汇编写的函数之外似乎其他头绪了。这时候我想会不会是C编译器生成的目标文件的函数名与C编译器生成的目标文件的函数名不同因为ucos的C代码中会调用到ASM中的函数。于是我自己用提供的C和C编译器分别对两段相同的函数文件只是后缀名不同一个C一个CPP进行编译。果然不出所料的确不同。例如我们在C/CPP中命名一个函数例如 OSTickISR()在C编译器生成的ASM中名称是 _OSTickISR在C编译器生成的ASM中名称是OSTickISR$qv。而原ASM文件都是用C编译器一样的格式来声明的所以以前直接用C编译能够正确而现在换C编译器就出错。 至此我的代码终于能够顺利和修改后的ucos一起用C编译器进行编译了。 以前我们区别C与C的不同主要还是集中例如面向对象STLTemplate等技术至上对于这些小细节了解很少。通过这次的问题让我更加深刻认识到C与C在除了面向对象的层次上还存在大量的不同C is not a better C。 该规范适用于Borland C所带的编译器和链接器 转载于:https://www.cnblogs.com/leaway/archive/2006/04/27/386107.html