我计划使用Cygwin套件在带有Netbeans的Windows上编写ANSI-C程序,稍后我想在UNIX系列OS上编译源代码并使用该程序。我应该担心任何兼容性问题吗?

最佳答案

如果仅使用C标准中描述的功能,则可能的不兼容性通常会减少为:


char的签名
所有类型的大小(例如Windows中的int = long = 32位,在UNIX中不一定如此),我的意思是全部,包括指针和enums
很少考虑类型转换和强制转换,尤其是涉及指针和负值(在表达式中混合有符号和无符号类型也容易出错)
类型对齐及其在结构/联合中的填充
字节序
位域的顺序
实施定义/特定的行为,例如负号的右移,舍入和除正负号时的正负号
浮点数:不同的实现和不同的优化
未指明的行为,例如函数参数和子表达式求值的顺序,memcpy()复制数据的方向(从低到高地址或相反方向)等
未定义的行为,例如i+i++a[i]=i++,修改字符串文字,指向对象的指针消失时(例如free()'d),不使用或误用constvolatile的指针取消引用等
提供带有不适当参数的标准库函数,导致未定义行为,例如用错误的数字或种类的参数调用类似printf()的函数
非ASCII字符/字符串
文件名格式(特殊字符,长度,区分大小写)
时钟/时间/语言环境格式/范围/值/配置


还有更多。实际上,您必须阅读该标准,并注意保证可以工作的标准和不能保证工作的标准,以及是否存在任何条件。

如果您使用C标准以外的功能,则该功能可能在其他平台上不可用或相同。

所以,是的,有可能,但是您必须要小心。通常,您所做的假设使您的代码难以移植。

09-11 19:23