gpt4 book ai didi

c - 如何帮助程序员在 C 中编写安全和正确的 printf 调用?

转载 作者:太空狗 更新时间:2023-10-29 15:45:38 24 4
gpt4 key购买 nike

[为清楚起见更新了组织和内容]

真正的问题

对于 C 来说,有什么好方法可以帮助程序员在他/她打字的同时,编写对项目特定的类似 printf 的调试函数的安全和正确的调用?

C 宏?C 包装函数?代码编辑器宏或模板?其他?

背景问题和答案

许多软件使用 printf 或类似 printf 的函数进行调试,或者在出现问题时临时调试,或者用于调试日志。然而它很容易出错。

Q1:我们怎么知道的?
A1:静态分析器有 printf 不匹配错误的类别——这是一类常见的错误——我经常看到这些工具在 C 代码上发出这些警告。

Q2:这个错误有哪些子类?
A2:主要是格式说明符错误,格式说明符个数错误。通常真正的错误是相反的:错误的变量类型,或错误的打印输出变量数。

Q3:我们为什么关心?
A3:充其量导致错误的日志信息并妨碍调试。最坏的情况是软件崩溃。

Q4:有没有人尝试过解决这个问题?
A4:当然,虽然我还没有看到 C 的任何内容(相对于 C++ 或其他),例如:

http://www.ddj.com/cpp/184401999?pgno=1 http://mi.eng.cam.ac.uk/~er258/cvd/tag/html/group__printf.html

除了我现在正在查看用 C 编写的产品并需要为 C 解决问题之外,我在这些产品和其他产品中缺少的是它们是事后解决方案。他们可以避免崩溃,并且可以对出错的地方提供警告解释, 出了什么问题,但他们肯定无法猜测程序员的意图(请参见上面的问答 #2)。

Q5:为什么使用printf这么容易出错?
A5:因为编写 printf 调用需要程序员在一行中混合使用变量的类型和数量、格式说明符、自由文本字符串常量和标点符号——所有这些看起来彼此非常相似。

最佳答案

gcc 提供 -Wformat 来警告 printf/scanf/strftime/strfmon 格式错误。

$ gcc -Wformat -c -o test.o test.c
test.c: In function ‘main’:
test.c:5: warning: format ‘%s’ expects type ‘char *’,
but argument 2 has type ‘int’
$ cat test.c
#include <stdio.h>

int main(int argc, const char *argv[])
{
printf("%s\n", 0);
return 0;
}

关于c - 如何帮助程序员在 C 中编写安全和正确的 printf 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1969832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com