布林表示式中的整數和指標

所有整數或指標都可以在被解釋為真值的表示式中使用。

int main(int argc, char* argv[]) {
  if (argc % 4) {
    puts("arguments number is not divisible by 4");
  } else {
    puts("argument number is divisible by 4");
  }
...

表達 argc % 4 被評估並導致 0123 中的一個值。第一個,0 是唯一的值並將執行帶入 else 部分。所有其他值都是真實的並進入 if 部分。

double* A = malloc(n*sizeof *A);
if (!A) {
   perror("allocation problems");
   exit(EXIT_FAILURE);
}

這裡評估指標 A,如果它是空指標,則檢測到錯誤並退出程式。

很多人喜歡用 A == NULL 來寫一些東西,但是如果你把這種指標比較作為其他複雜表達的一部分,事情很快就會難以閱讀。

char const* s = ....;   /* some pointer that we receive */
if (s != NULL && s[0] != '\0' && isalpha(s[0])) {
   printf("this starts well, %c is alphabetic\n", s[0]);
}

要進行檢查,你必須掃描表示式中的複雜程式碼並確保運算子首選項。

char const* s = ....;   /* some pointer that we receive */
if (s && s[0] && isalpha(s[0])) {
   printf("this starts well, %c is alphabetic\n", s[0]);
}

相對容易捕獲:如果指標有效,我們檢查第一個字元是否為非零,然後檢查它是否是一個字母。