SORU
27 Aralık 2011, Salı


'ın bu 1988 C kodu ile yanlış?

Kitaptan bu kod parçası derlemeye çalışıyorum "" (K & R). C Programlama Dili UNİX programı wc çıplak kemikleri sürüm:

#include <stdio.h>

#define IN   1;     /* inside a word */
#define OUT  0;     /* outside a word */

/* count lines, words and characters in input */
main() {
    int c, nl, nw, nc, state;

    state = OUT;
    nl = nw = nc = 0;
    while ((c = getchar()) != EOF) {
          nc;
        if (c == '\n')
              nl;
        if (c == ' ' || c == '\n' || c == '\t')
            state = OUT;
        else if (state == OUT) {
            state = IN;
              nw;
        }
    }
    printf("%d %d %d\n", nl, nw, nc);
}

Ve aşağıdaki hatayı alıyorum:

$ gcc wc.c 
wc.c: In function ‘main’:
wc.c:18: error: ‘else’ without a previous ‘if’
wc.c:18: error: expected ‘)’ before ‘;’ token

Bu kitabın 2. baskısı 1988 ve Belki derleyici sürümü ile bir ilgisi yoktur C'ye yeni sayılırım belki de sadece saçmalıyorum.

Modern C kod main işlevi farklı bir kullanım gördüm:

int main() {
    /* code */
    return 0;
}

Bu yeni bir standart, hatta yazın daha az bir ana kullanabilir miyim?

CEVAP
27 Aralık 2011, Salı


Senin sorunun IN OUT basit tanımları ile

#define IN   1;     /* inside a word */
#define OUT  0;     /* outside a word */

Bunların her biri sonunda bir noktalı virgül ne kadar fark. Bu kadar basit onları genişletir, kod kabaca gibi görünecektir:

    if (c == ' ' || c == '\n' || c == '\t')
        state = 0;; /* <--PROBLEM #1 */
    else if (state == 0;) { /* <--PROBLEM #2 */
        state = 1;;

İkinci noktalı virgül parantez kullanarak değil çünkü bir önceki maç gibi if var, else neden olur. Yani, IN OUT basit tanımları noktalı kaldırın.

Ders burada olduğunu öğrendimbasit ifadeler noktalı virgül ile bitmek zorunda değil.

Ayrıca, her zaman parantez kullanmalısınız!

    if (c == ' ' || c == '\n' || c == '\t') {
        state = OUT;
    } else if (state == OUT) {
        state = IN;
          nw;
    }

Yukarıdaki kod içinde asılıelse belirsizlik yok.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Learn Math Tutorials

    Learn Math T

    20 Kasım 2011
  • SellerDp

    SellerDp

    27 EKİM 2009
  • Sparta Spartanutul

    Sparta Spart

    18 HAZİRAN 2013