2013-01-03 10 views
6

Ostatnim razem, gdy sprawdzałem, mówiąc, że kodujesz w ANSI C, to znaczy "to jest kod zgodny z C99 i nic więcej w nim nie ma". Teraz z C11 i C++ 11, czy to rozróżnienie wciąż pozostaje? Czy nadal ma jakieś znaczenie?Czy "ANSI C" lub "ANSI C++" nadal coś znaczą?

+2

Normy C i C++ są standardami certyfikowanymi przez ISO. –

+0

@AlokSave ok, ale ANSI to jeszcze inna organizacja ... – user1849534

+0

Tak, są to różne organizacje, ale proces normalizacji jest zintegrowany, więc zasadniczo standardowa wersja ISO jest zatwierdzona przez ANSI. –

Odpowiedz

15

Historycznie „ANSI C” był używany w znaczeniu „standardowego C”, to jest C89, w przeciwieństwie do „K & Rc” oraz różne warianty wstępnie standardowych wymyślone przez kompilator autorów. Właśnie dlatego 2nd Ed. "The C Programming Language" ma duży czerwony znaczek "ANSI C" na okładce.

Następnie przez pewien czas "ISO C" oznaczało "nowy standard C", tj. C99, w przeciwieństwie do "ANSI C".

Było to zawsze mylące użycie, ponieważ zarówno ISO, jak i ANSI ratyfikowały C89 i C99. ISO ratyfikowało tę pierwszą jako C90 i opublikowało ją z pewnymi zmianami układu z wersji ANSI, ale podobno te same treści merytoryczne. Zatem "ANSI C" zawsze było standardem ISO, a "ISO C" zawsze było standardem ANSI. Jedyną różnicą było to, który organ nadzorował proces standaryzacji.

Po tym użyciu (i prawdopodobnie zachęcanie do kontynuowania), flaga -ansi do GCC jest równoważna -std=c90. W tym kontekście oznacza to "C90, a także niektóre rozszerzenia GNU, które nie kolidują ze standardem".

Nie jestem świadomy "ANSI C" odnoszącego się do C99, ale to nie znaczy, że nie zostało to użyte w ten sposób.

Nie sądzę, że użycie terminu "ANSI C" pomogło komukolwiek w ciągu ostatnich 10 lat. ANSI ratyfikowało C11, ale nie byłoby pomocne, aby zacząć mówić: "aha! Dobrze w tym przypadku, ANSI C nagle oznacza teraz C11!". Z pewnością możemy powiedzieć, że C11 jest aktualnym standardem ANSI C, ale mimo to termin "ANSI C" nie może być używany z uzasadnionymi oczekiwaniami, że ludzie wyraźnie zrozumieją, że to C11.

+1

Skąd, u diabła, dowiadujesz się o tym wszystkim? : | – varevarao

+0

dziękuję, więc najlepiej nie używać już tych słów, jeśli dobrze zrozumiałem, to tylko coś, co może mieć inne znaczenie i może generować hałas w komunikacji. – user1849534

9

Zarówno ISO C11, jak i ISO C++ 11 zostały ratyfikowane jako nowe standardy ANSI C i C++.

Na przykład, w moim egzemplarzu ANSI C11 jest napisane:

Przyjęty przez INCITS (Międzynarodowy Komitet Standardów Informacyjnych Technology) jako standardu amerykańskiego Narodowego. Data ANSI Homologacja: 5/23/2012

+0

dobrze, więc w zasadzie teraz ANSI = ISO? – user1849534

+2

Nie. ANSI bierze udział w procesie standaryzacji ISO. –

+1

@ user1849534 C11 został zatwierdzony jako nowy standard ISO C w grudniu 2011 r., A ANSI zatwierdza go w maju 2012 r. ISO i ANSI to dwie różne organizacje o różnych celach. – ouah

5

ponieważ obecnie 3 różne wersje standardu C i „dwa i pół” w C++ jednego są szeroko stosowane, to powiedziałbym, że taka terminologia dzisiaj ma mniej sensu niż kiedykolwiek.


  1. Faktycznie, w danym momencie jest tylko jedna „bieżąca” C (C++) standard, ostatni, ponieważ zastępuje poprzednie wersje. Mówię tu o tym, że wszystkie poprzednie wersje są nadal bardzo istotne (często bardziej niż ostatnia wersja).
+0

dwa i pół? – Geoffroy

+0

@Geoffroy C++ 03 to tak naprawdę niewielka aktualizacja C++ 98. – Gorpik

+0

@Gorpik ok, dzięki za wyjaśnienie – Geoffroy