2010-02-08 25 views
26

Używam gcc (4.4.1-4ubuntu9 Ubuntu) do kompilacji programu, który piszę, ale wydaje się wymiotować, kiedy widzi komentarz // w moim kodu, mówiąc:Dlaczego nie mogę użyć // - stylu komentarzy w moim kodzie C?

interface.c :##: error: expected expression before â/â token< 

Does w trybie kompilacji gcc używam komentarzy zakazujących //?

$ gcc -g -ansi -pedantic interface.c structs.h -c -I. -I/home/me/project/h 

Dlaczego?

+3

Należy zdać sobie sprawę, że termin "ANSI C" jest powszechnie (i * nieprawidłowo *) używany w odniesieniu do języka opisanego w standardzie ANSI C z 1989 roku. Ten standard został zastąpiony przez normę ISO C z 1990 r. (Która opisuje ten sam język) i został zastąpiony przez normy ISO C z 1999 i 2011 roku. ANSI oficjalnie przyjęło wszystkie trzy standardy ISO C po ich opublikowaniu. Tak więc, ściśle rzecz biorąc, "ANSI C" odnosi się do ISO C 2011 - które jest wyraźniej nazywane "ISO C". Starsze standardy mogą nadal mieć znaczenie, ale wyraźniej jest się do nich odnieść w ciągu roku (C89/C90, C99, C11). –

Odpowiedz

62

// komentarze są niedozwolone w starych (wcześniej 99) wersjach C, użyj /**/ (lub usunąć -ansi, że jest synonimem standardu C89)

+1

Krótkie, dokładne i na temat. Najlepsza odpowiedź do tej pory i prawdopodobnie najlepsza. –

+2

Bez '-ansi', gcc obsługuje obecnie C89 z rozszerzeniami specyficznymi dla GNU; jednym z tych rozszerzeń jest komentarz "//". Z '-std = c99', stara się dostosować do standardu ISO C z 1999 roku, który wymaga obsługi komentarzy' // '. –

3

// komentarze są rzeczywiście C++ funkcja pochodzenia, które dlatego -ansi je wyłącza.

+9

Są one również ważne przez ostatnie 10 lat. –

+0

Tak. Zmieniono, aby wyrazić, co miałem na myśli. – chaos

+3

Powstały w BCPL, jednym z przodków C. C++ przyjął je od początku; C nie było do 1999. –

20

Zobacz C++ comments w dokumentacji kompilatora GNU.

W GNU C możesz użyć komentarzy w stylu C++, które zaczynają się od // i kontynuować do końca wiersza. Wiele innych implementacji C dopuszcza takie komentarze, i są one zawarte w standardzie C 1999. Jednak komentarze w stylu C++ nie są rozpoznawane po określeniu opcji -std określającej wersję ISO C przed C99 lub -ansi (odpowiednik).

(Podkreślenie jest moje, ponieważ niektóre posty twierdzą, że // nie są dozwolone w standardowym C, podczas gdy jest to prawdziwe tylko w przypadku standardów sprzed 99).

+3

Dla niektórych z nas "Standard C" standaryzowano na długo przed '99. Zawsze mądrze określić dokładnie, która wersja standardu! :-) –

+1

@Brian: Więc ... potrzebujemy standardu ... standardu. – Amy

+0

Większość użytkowników, którzy nie muszą się martwić o wiele platform, prawdopodobnie będzie bardziej zadowolona z '-std = gnu99' – nolandda

Powiązane problemy