2011-11-13 11 views
5

Używam makr wymienionych poniżej w moim programie C do tworzenia aplikacji POS. Kiedy kompiluję ten kod, zabłądzam "\" w błędzie programu. Czy ktoś może mi pomóc w rozwiązaniu tego problemu?zabłąkane "" w błędzie programu podczas kompilowania

#define FF(a, b, c, d, x, s, ac) \ 
    {(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ 
    (a) = ROTATE_LEFT ((a), (s)); \ 
    (a) += (b); \ 

     } 
+0

Komunikat o błędzie powinien odnosić się do numeru wiersza. Czy wskazuje na definicję makra (a jeśli tak, która linia), czy na inwokację makra? Jak wygląda inwokacja? Czy możesz pokazać nam mały kompletny plik źródłowy, który demonstruje problem? Czy każde "\" na samym końcu linii, bez spływu białych znaków? (Powyższe kompiluje się bezbłędnie.) –

+3

@itsnikki - Nie powinieneś poprawiać kodu w pytaniu po znalezieniu rozwiązania, bo to sprawia, że ​​odpowiedzi wyglądają śmiesznie. –

+0

@BoPersson: Zgodnie z komentarzem OP, pusta linia nie znajduje się w kodzie, który powoduje problem - a przy pustej linii prawdopodobnie nie wygeneruje tego komunikatu o błędzie. –

Odpowiedz

7

Usuń linię przed nawiasem zamykającym.

(a) += (b); \ 
      <---- 
} 

Ponadto, jeśli chodzi o styl, powinieneś przynajmniej wyrównać tylne ukośniki.

+0

To może nie być problem. Właściwie ta linia została dodana tylko tutaj .. w kodzie nie było spacji. – itsnikki

+0

@itsnikki Właśnie wziąłem czas, aby uruchomić kod. Kompiluje się po usunięciu tej linii. Być może błąd jest gdzie indziej? – cnicutar

3

Większość kompilatorów umożliwia uzyskanie wstępnie przetworzonej formy kodu. Z gcc jest to gcc -C -E source.c > source.i; powinieneś zajrzeć do tego formularza. Pod Linuksem, czasami zrobić:

gcc -C -E source.c | grep -v '^#' | indent > source.i 
gcc -Wall -c source.i 

The grep -v '^#' usuwa wygenerowany numerację linii. Następnie patrzę na source.i w lokalizacjach błędów i rozumiem, co było nie tak z moimi makrami.

Powiązane problemy