【发布时间】:2025-11-24 16:20:07
【问题描述】:
考虑以下一段 C 代码 -
char sum_char(char a,char b)
{
char c = a+b;
return c;
}
它涉及-
- 将第二个参数转换为符号扩展。
- 将签名的扩展参数作为 b 推送到堆栈上。
- 将第一个参数转换为符号扩展。
- 将签名的扩展参数作为 a 推送到堆栈上。
- 添加 a & b,结果转换为 char 并存储在 c 中。
- C 再次符号扩展。
- 符号扩展 c 被复制到返回值寄存器和函数返回给调用者。
- 为了存储结果调用函数再次将 int 转换为 char。
我的问题是 -
- 这是谁做的?
- 做这么多转换的必要性是什么?
- 会降低/提高机器/编译器的性能吗?
- 如果它降低了性能,我们应该怎么做才能提高它?
【问题讨论】:
-
你在什么机器上编译代码?
-
这个问题太笼统了。您基本上是在问,“计算机如何运行程序?”我不认为它真的适合这里。
-
@dan1111 这个问题是关于表达式中正常的
char到int的提升。也许,表达不清。
标签: c performance optimization sign-extension