打印

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

[复制链接]
3460|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可能就是要这种移植

使用特权

评论回复
5
computer00| | 2009-4-10 12:43 | 只看该作者

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

全部自己写代码实现,那就没问题了。

使用特权

评论回复
6
dudongdao| | 2009-4-10 12:58 | 只看该作者

硬移植。兄弟,来硬的。

你用到了51库里的什么函数,自己写一个相同名字,相同功能的函数,我估计你用的库函数不会多~~~  那你就都自己写一个,空的 也好,先解决编译问题,然后再慢慢补上。我这么干过的,相信我,兄弟。

使用特权

评论回复
7
jiyiche|  楼主 | 2009-4-10 13:30 | 只看该作者

谢谢楼上各位,谢谢圈圈

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

使用特权

评论回复
8
huangqi412| | 2009-4-10 14:33 | 只看该作者

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

如果有但名字不同,修改啊  如果没有,变通,或者自己写

使用特权

评论回复
9
computer00| | 2009-4-10 15:30 | 只看该作者

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

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

例如51的关键字code,idata,xdata,pdata等等。

使用特权

评论回复
10
jiyiche|  楼主 | 2009-4-10 19:55 | 只看该作者

难怪

51的关键字code,idata,xdata,pdata等等在其他环境下不一定能用,是吗?

使用特权

评论回复
11
bjc125| | 2009-4-10 19:57 | 只看该作者

路过 学习中

使用特权

评论回复
12
walnutcy| | 2009-4-10 21:11 | 只看该作者

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

484

帖子

0

粉丝