zap*_*ing 11 c unix windows cross-platform
用Windows和Unix编写的C有什么区别吗?
我教C和C++,但我的一些学生回来说,一些示例程序不能在Unix中运行它们.Unix对我来说很陌生.不幸的是没有任何经验.我所知道的就是拼写它.如果有任何差异,那么我应该建议我们的部门投资Unix系统,因为目前我们实验室中没有Unix系统.我不希望我的学生觉得他们被拒绝或远离某些东西.
Mat*_*lia 15
当您不遵守裸C标准时,通常会出现这种问题,并对可能不正确的环境做出假设.这些可能包括依赖:
<conio.h>,<windows.h>,<unistd.h>,...);fflush(stdin)正如其他人所报告的那样,不需要按标准做任何事情 - 它实际上是未定义的行为来调用fflush除输出流之外的任何东西;通常,较旧的编译器更容易违反某些微妙的规则,例如严格的别名,所以要小心"聪明"的指针技巧);short= 16位,int= long= 32位假设不适用于所有地方 - 例如64位Linux,有64位long);void *并不总是32位,并且不能总是安全地转换为a unsigned long); 一般来说,你应该小心的转换以及涉及指针比较,你应该总是使用所提供的类型那样的任务,而不是"正常"的intS(具体参见size_t,ptrdiff_t,uintptr_t)floats和doubles在IEEE 754中,尽管我从未见过平台做不同的事情);__beginthread,MS安全字符串函数;另一方面,POSIX/GNU扩展)__inline,__declspec,#pragmaS,...)和一般任何以双下划线开始(甚至以单下划线,在旧的,非标准的实现);\n无处不在,但在文件\n上写入时,它在*NIX上,\r\n在Windows上,\r在OSX之前的Mac上; 转换是由文件流自动处理的,因此在您真正想要写二进制数据时要小心打开二进制文件,并在想要写文本时将它们保留为文本模式.无论如何,一个不在*NIX上编译的程序示例会有所帮助,我们可以为您提供精确的建议.
关于该计划的详细信息尚未获得.这些学生来自我们之前的批次.已经要求了.turbo C是目前正在使用的.
正如评论中所述,请删除Turbo C和(如果你使用它)Turbo C++,现在它们都是历史记录,并且与当前的C和C++标准有许多不兼容性(如果我记得很清楚它们都生成16位可执行文件,甚至不能在x86_64上的64位操作系统上运行).
有许多免费的,工作的和符合标准的替代方案(Windows上的VC++ Express,MinGW,Pelles C,CygWin,gcc/g ++是Linux上的事实标准,可与clang相媲美),你只需选择一个.
MSVC附带的标准库和典型的Linux或Unix编译器附带的标准库之间的差异足够大,以至于您可能会遇到兼容性问题。MSVC和GCC之间也可能存在较小的辩证变异。
在类似Unix的环境中测试示例的最简单方法是在现有Windows套件上安装Cygwin或MSYS。它们基于GCC和常见的开放源代码库,其行为将更像Unix或Linux系统上的C编译器环境。
Cygwin是最像“ unix like”的,并且基于cygwin.dll,它是一个仿真层,它在本机Win32 API的基础上模拟unix系统调用。通常,任何可以在Cygwin上编译的东西都很有可能在Linux上编译,因为Cygwin基于gcc和glibc。但是,本机Win32 API不适用于在Cygwin上编译的应用程序。
MSYS / MinGW32设计为使用GCC生成本机Win32应用程序。但是,大多数标准的GNU和其他OSS库都可用,因此它的行为比VC更像是UNIX环境。实际上,如果您使用的代码不使用Win32或UNIX特定的API,则它可能比在MinGW32和MSVC之间更容易在MinGW32和Linux之间移植。
虽然在您的实验室中安装Linux可能是一件有用的事情(如果您无法获得新服务器的资金,请使用VMWare播放器或其他管理程序),您可以使用上述任一工具链来获取可能会“关闭”的东西。足够”以满足您的目的。您可以按照自己的喜好来学习unix,Cygwin和MSYS都将为您提供类似unix的环境,与此同时,您还可以得到一些温和的介绍。
| 归档时间: |
|
| 查看次数: |
10887 次 |
| 最近记录: |