Tag: 可移植性

PhysicsFS平台独立吗?

我正在考虑在我的游戏引擎项目中使用PhysicsFS,但我想首先确保它完全独立于平台。 那是因为我想在完成Windows代码(例如Wii Homebrew)之后将我的引擎移植到一些相当模糊的平台上。

为列表节点分配内存的安全方法

在一个简单的列表中,ex: struct Node { Node *next; void *data; } 如果我在一个分配中分配节点和数据(如果我知道大小),有什么问题,比如说 Node * t = (Node*)malloc(sizeof(Node) + DataSize)); 并始终在分配的块的末尾分配数据, t->data = (BYTE*)t+ sizeof(Node); /* BYTE is byte length, can use char in gcc */ 节点和数据将在sinlge go中删除,因此没有真正的问题紧密耦合它们(按设计) 我正在研究可移植性问题(特别是包装)或其他未知问题? 这种分配方式安全便携吗?

位字段可移植性

我在这里读到位字段不可移植。 这是否意味着下面定义位字段的代码(从这里获取的代码)无法在某些机器上编译? 如果是这样,为什么呢? #include #include /* define simple structure */ struct { unsigned int widthValidated; unsigned int heightValidated; } status1; /* define a structure with bit fields */ struct { unsigned int widthValidated : 1; unsigned int heightValidated : 1; } status2; int main( ) { printf( “Memory size occupied by status1 : %d\n”, sizeof(status1)); […]

如何限制C / POSIX中函数的执行时间?

与此问题类似,我想在C中限制函数的执行时间 – 最好是微秒精度。我想C ++exception可用于实现类似于此 Python解决方案的结果。 虽然它并不理想,但这种方法在普通C中完全不可用。 那么,我想知道如何在Posix系统上的C中经过一定的时间间隔后中断函数的执行? 对于相对简单的情况,一些愚蠢的业务工作得很好,但这增加了与问题解决方案正交的大量代码。 假设我有这样的函数: void boil(egg *e) { while (true) do_boil(e); } 我想在鸡蛋上运行煮沸*,每50μs打断一次,检查一下这样做: egg *e = init_egg(); while (true) { preempt_in(50, (void) (*boil), 1, e); /* Now boil(e) is executed for 50μs, then control flow is returned to the statement prior to the call to preempt_in. */ if (e->cooked_val > […]

制作便携式代码

关于开源项目的所有大惊小怪,为什么还没有一个强大的标准可以让你制作可移植的代码(我的意思是在C/C++而不是Java或C# )每个人都有点自己做汤。 甚至还有一些像Apache Portable Runtime这样的第三方库。

端口为零的绑定将绑定到空闲端口。 这是便携式吗?

我希望我的程序绑定到一个自由端口。 Google告诉我,使用port = 0的绑定会这样做,但是我没有发现这是否可以保证在任何系统上运行(特别是Windows / Linux)。 有人可以链接一个说这个的文档吗?

#pragma optimize的代码有多便携?

使用#pragma optimize代码有多便携? 大多数编译器是否支持它以及对#pragma的支持有多完整?

最大化SDL窗口

我该如何告诉SDL最大化应用程序窗口? 我正在用这些标志创建窗口:SDL_OPENGL | SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_RESIZABLE。

枚举是否永远不会在API中使用?

我正在使用提供给我的C库。 我在编译库时使用的编译器,版本,选项等信息有限。 库接口在传递的结构中使用enum ,并直接作为传递的参数使用。 问题是:当我编译代码以使用提供的库时,我如何保证或确定我的编译器将使用相同大小的enum ? 如果没有,则结构将不会排列,并且参数传递可能会混乱,例如long与int 。 我的担忧源于C99标准,该标准规定了enum类型: 应与char,有符号整数类型或无符号整数类型兼容。 类型的选择是实现定义的,但应能够表示枚举的所有成员的值。 据我所知,只要最大值适合,编译器就可以选择任何类型,它非常随意,有效地随心所欲,不仅可能在编译器之间变化,而且可能在同一编译器和/或编译器选项的不同版本之间变化。 它可以选择1,2,4或8字节表示,从而导致结构和参数传递中的潜在不兼容性。 (它也可以选择签名或未签名,但我没有看到在这种情况下出现问题的机制。) 我在这里错过了什么吗? 如果我没有遗漏某些内容,这是否意味着永远不应该在API中使用enum ? 更新: 是的,我错过了什么。 虽然语言规范在这里没有帮助,但正如@Barmar所指出的应用程序二进制接口(ABI)所做的那样。 或者如果没有,则ABI不足。 我系统的ABI确实指定enum必须是带符号的四字节整数。 如果编译器不服从,那就是一个bug。 给定完整的ABI和兼容编译器, enum 可以在API中安全使用。

如何移植大文件支持?

我目前正在编写一个C程序,用于读取和写入大小超过2 GiB的文件。 在linux上, feature_test_macros (7)指定: _LARGEFILE64_SOURCE Expose definitions for the alternative API specified by the LFS (Large File Summit) as a “tran‐ sitional extension” to the Single UNIX Specification. (See ⟨http://opengroup.org/platform /lfs.html⟩) The alternative API consists of a set of new objects (ie, functions and types) whose names are suffixed with “64” (eg, off64_t versus […]