簡體   English   中英

奇怪的unsigned char cast

[英]strange unsigned char casting

使用的目的/優勢/區別是什么?

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

與標准演員相比?

編輯:在gnulib中的base64代碼中找到

也許編寫函數的程序員不喜歡演員語法......

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 */

目的

至:

  • charunsigned char
  • 使用演員比傳統演員更多
  • 敞開心扉,在其他類型之間定制鑄造的可能性,並從下面的優勢中選擇

優點

人們可以:

  • 在調試時打破這些類型的強制轉換
  • 通過分析工具跟蹤和量化演員表的使用
  • 添加限制檢查代碼(對於char轉換非常嚴格,但對於較大/較小的類型轉換可能非常有用)
  • 有妄想的妄想
  • 存在單點轉換,允許您仔細分析和修改生成的代碼
  • 您可以根據環境從一系列的鑄造技術中進行選擇(例如,在C ++中,您可以使用numeric_limits<>
  • 演員是明確的,永遠不會產生警告(或者至少你可以強迫他們在一個地方扼殺它們)

區別

  • 較差的編譯器或編譯好的編譯器關閉了必要的優化標志
  • 這種語言並不強制一致性,你可能沒有注意到你忘了在某些地方使用演員
  • 一種奇怪的,和Java風格的人,應該接受並研究C的弱類型並逐個處理它而不是試圖召喚特殊功能來應對

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM