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

  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • Fraser Raft

    Fraser Raft

    9 Mart 2010
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006