- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一张图片胜过一千个文字:
我知道如何解决该问题。但是我如何在 Microsoft 中修复它,这样我就不会收到警告?
编辑:
编辑2:
在遇到导致实际意外错误的格式不兼容问题(以及在 Windows 上使用 GDB 高级功能的可怕经历之后),我决定在 Windows 上永远放弃 GNU。对于 Windows 机器上的 C 跨平台开发,我现在使用 Clang。到目前为止,我对这个决定百分百满意。感谢所有花时间帮助我的人。
最佳答案
值得指出这里的根本问题是什么,即:严重、公然违反 "don't repeat yourself"原则。我们有一个库函数 printf
,它在运行时将解析其格式字符串并尝试打印一些内容。然后我们在 C 编译器中有一段完全不同的代码,它将在编译时解析相同的格式字符串,并警告用户潜在的问题。
对于 Windows 下的 MinGW,问题变得更加复杂,因为两个解析器是由两组完全不同的人编写和维护的,他们之间没有任何联系。 (至少在 Linux 下,从事 gcc 工作的人和从事 glibc 工作的人之间有大量的协调。)
因此,两个解析器之间对于接受的内容没有完全一致也就不足为奇了。 (事实上,如果完全一致那将是一个奇迹。) this question 的答案详细描述一下2012年的协调有多么不完美,10年后的今天,它仍然不完美。
不完美就是游戏的名称,可能没有完美的解决方案。我必须相信,到 2021 年,微软的 C 运行时库确实支持%zu
。但是,如果 MinGW 内置的最新版本的 gcc 还没有 catch 这一事实,如果它仍然警告不支持 z
修饰符,那么您可能无能为力。您可以向 MinGW 人员发送错误报告,他们最终可能会采取行动,但同时您已经获得了今天需要编译的代码。您可以关闭 -Wformat
,但您可能不想这样做(事实上我也不想这样做),因为您可能希望 -Wformat
继续检查其他错误你可能会做。
我是维护大型、成熟、跨平台代码库的团队的一员,尽管这是我非常想使用的理想解决方案,但我们仍然不经常使用%zu
,因为我们仍然无法确定我们使用的每个编译器和每个运行时库都同意它。
我这么说并不是建议您也放弃 %zu
,而只是表达我的同情:即使在 2021 年,printf size_t
仍然非常困难> 值安全且便携。
关于c - 如何让 MinGW GCC 识别 size_t 的 %zu 格式说明符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68900199/
error C2664: 'errno_t wcstombs_s(size_t *,char *,size_t,const wchar_t *,size_t)' : cannot convert pa
size_t有什么区别和 std::size_t在声明它们的位置,何时应该使用它们以及任何其他差异化功能方面? 最佳答案 C的size_t和 C++ 的 std::size_t都是一样的。 在 C 中
刚读完: Does "std::size_t" make sense in C++? 我意识到使用 ::size_t不符合标准(虽然我的编译器支持)当你#include .我想遵守标准,但我不想在前
有什么理由不假设 SIZE_T 是 Microsoft 的 Visual C/C++ 编译器上 size_t 的类型定义? Windows intsafe.h 函数确实包括从一个函数到另一个函数的安全
size_t 和 std::size_t 在声明的位置、应在何时使用以及任何其他区别特性方面有何区别? 最佳答案 C 的 size_t和 C++ 的 st
在某些 Windows API 调用中,我得到:cannot convert argument 6 from 'size_t *' to 'SIZE_T *' . This answer告诉我SIZE
将迭代器条件右操作数从 size_t 转换为 int 更好,还是迭代可能超过 int 的最大值?答案实现具体吗? int a; for (size_t i = 0; i (i)) (有关 numeri
我尝试了三个连续的行(每个单独一个),但是没有一个起作用。 为什么?? int main() { size_t j{8}; char arr[static_cast(j)]={'t'}
我的 C++ 知识一塌糊涂。我有 Apple 提供的代码,他们像往常一样提供了不完整的解决方案。 在此代码中,他们提供了两个空的方法 header : - (NSString *)encodeBase
这是证据: inline constexpr std::size_t prev(std::size_t i) { --i; return i; } int main() { s
我对 size_t 的某些行为感到困惑我注意到: size_t zero = 0x1 << 32; size_t big = 0x1 << 31; size_t not_as_big = 0x1 <<
size_t 在哪里什么时候我什么都没有? 总是假设 size_t 是否合理? == std::size_t ? 什么时候应该使用 size_type在 std容器(string::size_type
我在为 32 位编译时遇到此错误。相同的文件在 64 位 Windows 上编译没有错误 1>c:\project\test.cpp(1317) : error C2664: 'StringCbCop
我希望只有一个模板函数。所以我想到了…… template > || std::is_same_v > > > std::ostream& op
我正在使用 Visual Studio 2017 社区版。它允许我在没有适当包含的情况下同时使用 size_t 和 std::size_t。它似乎适用于大多数 std 库。我认为这是因为图书馆本身的一
我可能要疯了,但我认为我从未在 C++ 中看到过这种情况(尽管我的引用代码是在 C 中)。为什么这里代码的返回值上有一个static,有什么影响?我认为我从未见过类范围之外的静态函数(但显然 C 没有
它没有在 std::string 中明确列出 constructor doc ,(编辑: 这里的人说我应该引用实际的 cppreference 而不是 cplusplus.com)但显然它有效。这意味
将 -1 分配给 size_t 类型的变量 t 并检查它与 -1 和 4294967295(FFFFFFFF,2 对-1 的补充;我的系统是64 位;值可能因系统而异),那么在这两种情况下,它都返回
我正在实现循环数组数据结构,其代码如下所示: struct CircularArrayException : public std::exception { std::string msg;
这个问题在这里已经有了答案: how to pass 2 dimensional array if both dimensions are unknown at compile time (5 个答
我是一名优秀的程序员,十分优秀!