gpt4 book ai didi

C 控制字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 04:41:10 25 4
gpt4 key购买 nike

当我使用 System.out.println(); 时,我知道在 Java 等其他语言中我在其中放了一个变量,就像一个包含数字 22 的 int,它会将 22 打印到控制台。

在 C 中,如果我用 printf() 做同样的事情;我需要在字符串中指定类型,例如 printf("%d", n);我也知道Java有自己的printf函数。

我在这里想说明的是 C 控件字符串与其他语言(例如 Java)相比如何工作,在 Java 中您不必在 System.out.println(); 中提供类型标识符;它会自动识别变量是一个 int。

这是 C 的效率方式的一部分,它实际上不检查类型并依赖于程序员理解他们提供的类型吗?

最佳答案

事实上,printf 是一种既不高效也不类型安全的数据写入方式。

存在性能损失,因为格式字符串在编译时被解析,类型特定的操作也在运行时被选择,而在 C++ 和 Java 中,它可以在编译时完成。此外,可变参数被迫在堆栈上传递,这比在寄存器中传递它们效率低。

更重要的是 printf 不是类型安全的。可以将任意数量的任意类型的参数传递给 printf,忽略格式字符串规定。当然,它很容易触发未定义的行为。

这种行为的唯一原因是 C 中没有函数重载。

另一方面,它并没有那么糟糕。首先,大多数编译器解析格式字符串并在它与传递给 printf 的参数不一致时发出警告。其次,与推导类型后格式化和打印文本的成本相比,上述性能损失实际上可以忽略不计。

关于C 控制字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26397184/

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