我尝试在 Ubuntu 和 gcc 编译器下运行string.h中的函数“strlwr”、“strupr”、“strcmpi”、“strrev”;收到下一条消息:
警告:函数“strupr”的隐式声明 [-Wimplicit-function-declaration]
以及
(.text+0x84): 未定义的对“strupr”的引用
一旦我尝试过 Windows,相同的编译器,一切正常。
我在“/usr/include”下查看了 linux 中的 string.h,它指出这是 GNU C 库 ISO C99 7.21 字符串处理的一部分(也尝试使用-std=c99进行编译,但不起作用),我从头文件中了解到我可以使用“strcasecmp”函数,而不是“strcmpi”。
不能在 Windows 中做同样的事情(查看头文件的代码),因为头文件和库文件是嵌入在编译器代码下的,对吗?(1)
再次在Linux中搜索string.h文件,发现/usr/include/linux等不同路径下有近50个同名文件;/usr/include/x86-64-linux-gnu/bits others 在Oracle VB目录和Arduino目录下。为什么有这么多文件在 C 中处理字符串但以不同的方式处理?编译器如何知道要使用哪一个来完成工作?有什么方法可以在 C 文件下或在编译过程中定义多个头文件之一?(2)
我是否使用过时的标题和库,是否有任何“官方”来源可以知道是否有任何库已贬值?如何知道 Windows 头文件和库下面有什么?(3)
我正在使用 gcc 版本 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5) 和 Windows 8。