'ı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
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.

.Net HttpWebRequest.() GetResponse htt...
Neden Krom yanlış sayfada farklı bir d...
Üretimi birden fazla mimarileri için M...
Yapamadı, hata ayıklama yönetilen visu...
İzin heroku kodu dağıtırken (açık anah...