在Mac/Windows/Linux上使用GNU C库和其他数据结构库?

3
我想知道C库中的system/string/data structure/data base等是否与特定平台有关。
这些库中的哪些元素依赖于特定平台,例如正则表达式/字符串操作/SQL连接等?
我是否可以在任何平台上使用它们进行文件I/O/路径等操作,就像我们在Python中使用sys/os等模块一样?
我想要构建一个处理字符串、数据库(SQLite3、MySQL、Oracle)、数据结构、文件I/O和系统路径的程序,并且可以在Windows、Linux和Mac上重新编译后运行。我希望它是基于控制台的。
请不要建议我使用其他编程语言,请让C专家回答。谢谢。
2个回答

2
只要使用标准的C库,就没有问题。GNU C库(glibc)是C标准的一种实现,例如Microsoft也有自己的实现。
从用户(您)的角度来看,实现并不重要。例如,如果您使用的是一个编译好的程序,那么您可能根本不知道它使用了哪种C库实现。
#include <stdio.h>

如果你在任何符合标准的平台上调用fopen(),然后使用fread()进行文件输入/输出,或者使用其他标准C函数。

Linux、Mac和Windows都符合标准(即实现了ISO C),因此标准函数在所有平台上执行相同的操作。传递给fopen()的文件路径也是相同的。Windows在文件路径中使用反斜杠(\)而不是Unix方式(正斜杠,/),但这并不重要:在Windows中,你可以在C程序中使用Unix风格的表示法。


0
对于C库函数,我建议您确保使用POSIX标准内的函数。这将(至少在理论上)保证与其他POSIX平台的兼容性。
如果您正在使用glibc(即正常的C库)在Linux上进行编程,则其文档在指出哪些是GNU扩展方面相当不错,但是POSIX标准(如上所述)是金标准。
对于其他库,您需要查看相关库的文档。
请记住,如果存在特定的不兼容区域,您可以在这些位周围使用#ifdef等,并将机器特定元素保留在特定文件中。
针对您提到的具体问题: * POSIX regexp 函数 (regcomp, regexec, regerror, regfree) 是 POSIX 标准的一部分。 * 大多数字符串操作函数(如strstr)是 POSIX 标准的一部分。有些函数(如asprintf)是 GNU 扩展。 * C 库不提供 SQL 连接功能。您需要使用特定的 C 库来处理 SQL 连接,或者使用类似于 libdbi 的东西。您需要查看特定库以了解其他平台上的支持情况。

特别要注意在 Windows 上的路径操作 (考虑正斜杠和反斜杠以及驱动器字母),特别是如何输入用户输入以及传递给函数的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接