C - 在UNIX上编写Windows编译和反之亦然

时间:2012-10-02 19:26:10

标签: c windows unix compilation

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

2 个答案:

答案 0 :(得分:1)

存在可比性问题,但只要您坚持基本的unix功能,它们就应该可以管理命令行应用程序。但是,如果您的应用程序具有GUI或必须与unix环境中的其他程序进行交互,您可能会后悔自己的方法。

另一种方法是在桌面上的虚拟机中运行适当的unix风格,并且非常确定没有兼容性问题。

答案 1 :(得分:1)

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

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

还有更多。你实际上必须阅读标准,并注意什么是有效的,什么不是,如果有任何条件。

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

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