将C代码移植到不同的;平台“;
我一直在读很多书/链接中的语句,比如“有很多因素决定了c代码从一个平台移植到另一个平台”。它们指的是操作系统还是微处理器。从一个平台到另一个平台的代码移植依赖于哪些因素。将C代码移植到不同的;平台“;,c,operating-system,porting,platform,C,Operating System,Porting,Platform,我一直在读很多书/链接中的语句,比如“有很多因素决定了c代码从一个平台移植到另一个平台”。它们指的是操作系统还是微处理器。从一个平台到另一个平台的代码移植依赖于哪些因素。 提前感谢您。将平台理解为操作系统,您必须考虑到许多代码使用对操作系统挂钩的本机调用,并且有一些库仅与一个操作系统交互。使用支持目标操作系统的库可以避免此问题 另一方面,如果您将平台理解为体系结构,则会有一些低级警告,如按位、键入、地址大小等。将平台理解为操作系统,您必须考虑到许多代码使用对操作系统挂钩的本机调用,并且有一些库仅
提前感谢您。将平台理解为操作系统,您必须考虑到许多代码使用对操作系统挂钩的本机调用,并且有一些库仅与一个操作系统交互。使用支持目标操作系统的库可以避免此问题
另一方面,如果您将平台理解为体系结构,则会有一些低级警告,如按位、键入、地址大小等。将平台理解为操作系统,您必须考虑到许多代码使用对操作系统挂钩的本机调用,并且有一些库仅与一个操作系统交互。使用支持目标操作系统的库可以避免此问题 另一方面,如果您将平台理解为体系结构,则会有一些低级警告,如按位、键入、地址大小等。“平台”可能指一个或多个操作系统、编译器工具链或目标处理器 影响可移植性的一些因素可能包括:
- 程序中使用的库函数或系统调用
- 一个工具链支持但另一个工具链不支持的可能使用的非标准扩展
- 可以从一个平台更改到另一个平台的类型表示。例如,
在一个平台上可能是32位,在另一个平台上可能是64位,或者数值的尾数可能不同int
- 程序中使用的库函数或系统调用
- 一个工具链支持但另一个工具链不支持的可能使用的非标准扩展
- 可以从一个平台更改到另一个平台的类型表示。例如,
在一个平台上可能是32位,在另一个平台上可能是64位,或者数值的尾数可能不同int
- 操作系统提供的API,用于动态内存分配、线程同步、共享资源保护等
- 基本类型的大小,由编译器决定(除了
,C语言标准为1)sizeof(char)
- 指针的大小,取决于虚拟内存地址空间的大小(32位平台上为4字节,64位平台上为8字节)
- 底层硬件架构的端性,当通过“原始地址”(例如,使用
)访问大于char*
的类型时,会产生不同的行为char
- 操作系统提供的API,用于动态内存分配、线程同步、共享资源保护等
- 基本类型的大小,由编译器决定(除了
,C语言标准为1)sizeof(char)
- 指针的大小,取决于虚拟内存地址空间的大小(32位平台上为4字节,64位平台上为8字节)
- 底层硬件架构的端性,当通过“原始地址”(例如,使用
)访问大于char*
的类型时,会产生不同的行为char
- “平台”可以指一个或多个操作系统、编译器工具链或目标处理器
影响可移植性的一些因素可能包括:
平台可能指操作系统+编译器+虚拟内存地址空间+底层硬件架构 其中一些因素包括:
一个好的技术是首先编写可移植代码,这将您的问题限制为编译器错误和实现限制。然而,关于如何编写可移植代码的好书并不多(如果有的话),因此您必须通过实践来学习。一个好的技术是首先编写可移植代码,这将您的问题限制在编译器错误和实现限制上。然而,关于如何编写可移植代码的好书并不多(如果有的话),因此您必须通过实践来学习。原始数据类型的大小是否仅取决于编译器?还是包括了其他一些因素?@Akhil:据我所知,这完全是由编译器决定的。当然,编译器通常是为某些给定的硬件体系结构指定的。因此,您也可以将此因素归因于硬件(尽管我个人不这么认为)。原始数据类型的大小是否仅取决于编译器?还是包括了其他一些因素?@Akhil:据我所知,这完全是由编译器决定的。当然,编译器通常是为某些给定的硬件体系结构指定的。因此,您也可以将此因素归因于硬件(尽管我个人不这么认为)。