奇怪的unsigned char cast

时间:2010-09-08 15:25:25

标签: c

使用

的目的/优势/区别是什么?
/* C89 compliant way to cast 'char' to 'unsigned char'. */
static inline unsigned char
to_uchar (char ch)
{
  return ch;
}

与标准演员相比?

编辑: 在gnulib

中的base64代码中找到

2 个答案:

答案 0 :(得分:1)

也许编写该函数的程序员不喜欢演员语法......

foo(to_uchar(ch));      /* function call */
foo((unsigned char)ch); /* cast */

但我还是让编译器担心它:)

void foo(unsigned char);
char s[] = "bar";
foo(s[2]); /* compiler implicitly casts the `s[2]` char to unsigned char */

答案 1 :(得分:1)

目的

要:

  • char投射到unsigned char
  • 使用演员表演比传统演员更多
  • 打开心扉,了解其他类型之间定制投射的可能性,并从以下优势中选择

优势

有人可以:

  • 调试时打破这些类型的强制转换
  • 通过分析工具跟踪和量化演员表的使用
  • 添加限制检查代码(char转换非常严苛,但对于较大/较小的类型转换可能非常有用)
  • 有妄想的妄想
  • 只需一个点,即可仔细分析和修改生成的代码
  • 您可以根据环境从一系列投射技术中进行选择(例如,在C ++中,您可以使用numeric_limits<>
  • 演员是明确的,永远不会产生警告(或者至少你可以强迫他们在一个地方扼杀)

差分

  • 关闭编译器不佳或编译好的编译器关闭必要的优化标志
  • 该语言不强制一致性,您可能没有注意到您忘记在场所使用演员
  • 有点奇怪,而且Java风格的人应该接受并研究C的弱类型并逐个处理它而不是试图召唤特殊功能来应对