C 为Unix和Windows编写应用程序

C 为Unix和Windows编写应用程序,c,windows,windows-services,unix,C,Windows,Windows Services,Unix,我将为交互式UNIX()编写一个程序。但一年后它将被移植到Windows。我将用ANSIC和/或SH脚本编写它。当它在Windows上运行时,它将作为Windows服务运行。我怎样才能使它尽可能地对我来说容易呢 我希望在移植时尽可能少地进行更改,但要使其成为好代码 不幸的是,交互式Unix是一个旧系统,唯一存在的shell是/bin/sh,如果您甚至考虑使用sh脚本来实现这一点,那么您应该认真考虑已经可以移植的Python 如果您甚至考虑在SH脚本中执行此操作,那么您应该认真考虑已经可以移植的P

我将为交互式UNIX()编写一个程序。但一年后它将被移植到Windows。我将用ANSIC和/或SH脚本编写它。当它在Windows上运行时,它将作为Windows服务运行。我怎样才能使它尽可能地对我来说容易呢

我希望在移植时尽可能少地进行更改,但要使其成为好代码


不幸的是,交互式Unix是一个旧系统,唯一存在的shell是/bin/sh

,如果您甚至考虑使用sh脚本来实现这一点,那么您应该认真考虑已经可以移植的Python

如果您甚至考虑在SH脚本中执行此操作,那么您应该认真考虑已经可以移植的Python

  • 早出晚归
  • 封装不可移植的代码。(不要在代码中散布太多的ifdef,而是在单独的源文件中为每个操作系统分别创建实现的函数
  • 对数据类型要求非常严格(在结构/类中使用长-短,而不是int)
  • 即打开最高警告级别并解决所有警告
      • 早出晚归
      • 封装不可移植的代码。(不要在代码中散布太多的ifdef,而是在单独的源文件中为每个操作系统分别创建实现的函数。)
      • 对数据类型要求非常严格(在结构/类中使用长-短,而不是int)
      • 即打开最高警告级别并解决所有警告

      您可以使用平台相关的ifdef include pragmas和尽可能严格的类型。GLib定义了一些很好的类型,可以在几乎所有平台或体系结构上使用

      纯shell脚本选项不是可行的选择,因为在Windows平台上,默认情况下没有Bourne shell、Bash或KSH,不幸的是,PowerShell在XP机器上似乎很少见。但您可以创建传统的批处理文件和Bourne shell脚本


      但正如其他人所说,如果您使用与平台无关的更高级别的语言会更容易。为什么不呢?:)

      您可以使用与平台相关的ifdef,包括pragmas和尽可能严格的类型。GLib定义了一些很好的类型,可以在几乎所有平台或体系结构上使用

      纯shell脚本选项不是可行的选择,因为在Windows平台上,默认情况下没有Bourne shell、Bash或KSH,不幸的是,PowerShell在XP机器上似乎很少见。但您可以创建传统的批处理文件和Bourne shell脚本


      但正如其他人所说,如果你使用一种与平台无关的更高级语言,那就更容易了。为什么不呢?:)

      如果不能添加python、ruby、perl、java等天生可移植的东西,那么你最好的选择可能是使用ANSI C。C最初流行的一个原因是它(相对较好)便携性。也就是说,任何与操作系统紧密相关的东西,如图形、网络等,在C语言中的可移植性都比在Python语言中要差得多。您应该努力为特定于操作系统的函数制作“包装器”,并将其与主代码分开。这样一来,当需要移植它时,您正在重写包装器,其他所有内容都应该在编译时不会出现很多问题


      尽管如此,用Python编写一些东西并使其在任何地方都能工作要容易得多。此外,写作更“有趣”。因此,如果将来可以避免使用“交互式unix”,那么就这样做。

      如果不能添加python、ruby、perl、java等固有的可移植性,那么最好的选择可能是使用ANSI C。C最初流行的一个原因是它(相对较好)的可移植性。也就是说,任何与操作系统紧密相关的东西,如图形、网络等,在C语言中的可移植性都比在Python语言中要差得多。您应该努力为特定于操作系统的函数制作“包装器”,并将其与主代码分开。这样一来,当需要移植它时,您正在重写包装器,其他所有内容都应该在编译时不会出现很多问题


      尽管如此,用Python编写一些东西并使其在任何地方都能工作要容易得多。此外,写作更“有趣”。因此,如果将来可以避免使用“交互式unix”,那么就这样做。

      我建议使用ANSI-C和Lua(一种可嵌入的小脚本解释器)。尝试将其用于所需的基本C函数


      您需要经常进行移植和测试。如果您在unix上工作一年,然后尝试切换,这将更加困难,因为最好的移植解决方案通常是在所有平台上实现的不同设计。

      我建议使用ANSI-C和Lua(一种可嵌入的小脚本解释器)。尝试将其用于所需的基本C函数


      您需要经常进行移植和测试。如果您在unix上工作一年,然后尝试切换,这将非常困难,因为最好的移植解决方案通常是在所有平台上实现的不同设计。

      Windows无法直接运行sh脚本,您需要使用cygwin。所以,如果你真的想在普通的Windows上运行,你最好使用C。坚持使用C89并且要小心。如果您使用任何系统调用,请坚持使用POSIX调用,您应该可以在Windows上找到它们或等效的调用。Windows还有一个相当全面的类似Berkeley sockets的库,所以您也可以合理地使用它

      你仍然需要做一些自我定义


      如果您将它设置为Windows任务,那么您最终将使用MinGW编译它。如果您进入UNIX领域太远,那么您将不得不将其设置为cygwin二进制文件,这会带来一些麻烦。

      Windows无法直接运行sh脚本,您需要使用cygwin来实现这一点。所以,如果你真的想在普通的Windows上运行,你最好使用C。坚持使用C89并且要小心。如果您使用任何系统调用,请坚持使用POSIX调用,您应该可以在Windows上找到它们或等效的调用。风