代码之家  ›  专栏  ›  技术社区  ›  shodanex

奇怪的无符号字符转换

c
  •  6
  • shodanex  · 技术社区  · 15 年前

    使用的目的/优点/区别是什么

    /* C89 compliant way to cast 'char' to 'unsigned char'. */
    static inline unsigned char
    to_uchar (char ch)
    {
      return ch;
    }
    

    与标准演员相比?

    编辑: 在中的base64代码中找到 gnulib

    2 回复  |  直到 15 年前
        1
  •  1
  •   pmg    15 年前

    也许编写函数的程序员不喜欢cast语法。。。

    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 */
    
        2
  •  1
  •   Matt Joiner    15 年前

    目的

    致:

    • char unsigned char
    • 用石膏比用传统的石膏做得更多
    • 打开你的思维,在其他类型之间定制铸造的可能性,并从下面的优势中选择

    优势

    一个人可以:

    • 调试时中断这些类型的转换
    • 通过分析工具跟踪和量化强制类型转换的使用
    • 添加限制检查代码(对于 烧焦 转换,但对于较大/较小类型转换可能非常有用)
    • 有宏伟的幻想
    • 这里有一个转换点,允许您仔细分析和修改生成的代码
    • 您可以从一系列基于环境的铸造技术中选择(例如在C++中您可以使用)。 numeric_limits<> )
    • 强制转换是显式的,永远不会生成警告(或者至少可以在一个地方强制阻塞它们)

    差异

    • 速度较慢,编译器性能较差,或者编译器性能良好,并且关闭了必要的优化标志
    • 这种语言不会强迫你保持一致,你可能不会注意到你忘记在某些地方使用演员阵容
    • 有点奇怪,Java风格,人们可能应该接受并研究C的弱类型并逐个处理它,而不是试图用特殊的函数来处理