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ą?
Odpowiedz
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.
Skąd, u diabła, dowiadujesz się o tym wszystkim? : | – varevarao
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
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
dobrze, więc w zasadzie teraz ANSI = ISO? – user1849534
Nie. ANSI bierze udział w procesie standaryzacji ISO. –
@ 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
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.
- 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).
Normy C i C++ są standardami certyfikowanymi przez ISO. –
@AlokSave ok, ale ANSI to jeszcze inna organizacja ... – user1849534
Tak, są to różne organizacje, ale proces normalizacji jest zintegrowany, więc zasadniczo standardowa wersja ISO jest zatwierdzona przez ANSI. –