不同C编译器之间头文件是否能共用

[复制链接]
4126|11
 楼主| jiyiche 发表于 2009-4-10 12:10 | 显示全部楼层 |阅读模式
    这几天在用台湾HOLTEK单片机时遇到一个问题,把KEIL C中<string.h>拷贝到该IDE的INC库文件夹中后,编译时出错。该程序是从51上移植过来的,里面用到<string.h>中声明的函数。
    我在想应该是string.h中的一些语法在HOLTEK编译器下是语法错误的,比如#pragma预处理语句。
    如果是这样,那C语言移植性不就很受限制?每个编译器都有自己的语法,而头文件中的语法对每种编译器并不一定都是正确的。是不是这样的编译器比较奇特不遵循标准C的规定?或者是标准C本身就没这样的规定呢?
    玩过两种以上编译器的人,你们是怎么看的?是不是我哪里理解错了。疑惑中。
computer00 发表于 2009-4-10 12:22 | 显示全部楼层

晕……你还没搞清楚这个关系呀……

每个开发环境都有自己库和对应的头文件的。你只要引用即可,引用时是引用对应的开发环境的头文件,而不是别人的头文件。

单一个头文件一点用都没有的,要靠库的支持。

如果你的编译器它支持string这个库,那么你就可以直接用,否则它不支持的话,移植别人的头文件都没用的。
其实这根本不是什么移植,是库文件的问题。与可移植性无关。
songbangyan 发表于 2009-4-10 12:39 | 显示全部楼层

楼上正解

ayb_ice 发表于 2009-4-10 12:40 | 显示全部楼层

LZ可能就是要这种移植

computer00 发表于 2009-4-10 12:43 | 显示全部楼层

这是库文件,你怎么移植?除非你的程序都不要用库文件,

全部自己写代码实现,那就没问题了。
dudongdao 发表于 2009-4-10 12:58 | 显示全部楼层

硬移植。兄弟,来硬的。

你用到了51库里的什么函数,自己写一个相同名字,相同功能的函数,我估计你用的库函数不会多~~~  那你就都自己写一个,空的 也好,先解决编译问题,然后再慢慢补上。我这么干过的,相信我,兄弟。
 楼主| jiyiche 发表于 2009-4-10 13:30 | 显示全部楼层

谢谢楼上各位,谢谢圈圈

我知道头文件只是一个声明的文件,其中声明的函数还是在库函数里,只是每个开发环境都有自己的库文件和头文件,那每次把这个开发环境里的程序用到另一开发环境中,这些头文件和库函数不就要改变?这样太麻烦了吧。
比如我在KEIL C里面写了一个液晶模块用到string.h这个头文件,现在要把这个程序用在HOLTEK单片机上,该怎么办?是不是一定要自己编写string.h里声明的对应的函数(比如strcat)才可以?
huangqi412 发表于 2009-4-10 14:33 | 显示全部楼层

看看你现在用的ide提供库函数有没有你之前用到的

如果有但名字不同,修改啊  如果没有,变通,或者自己写
computer00 发表于 2009-4-10 15:30 | 显示全部楼层

本来就是这样的,不同的开发环境有不同的库。

有些开发环境还有自己独特的关键字呢,这些移植时必须要考虑的。

例如51的关键字code,idata,xdata,pdata等等。
 楼主| jiyiche 发表于 2009-4-10 19:55 | 显示全部楼层

难怪

51的关键字code,idata,xdata,pdata等等在其他环境下不一定能用,是吗?
bjc125 发表于 2009-4-10 19:57 | 显示全部楼层

路过 学习中

walnutcy 发表于 2009-4-10 21:11 | 显示全部楼层

code,idata,xdata,pdata都定义为空呗

您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

484

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部