Jak powszechnie jest obsługiwany C99?

Jak powszechnie jest wspierany standard C99 w dzisiejszych kompilatorach? Rozumiem, że nawet GCC w pełni tego nie popiera. Czy to prawda?

Które funkcje C99 są obsługiwane bardziej niż inne, tzn. których mogę użyć, aby mieć pewność, że większość kompilatorów mnie zrozumie?

Author: Stephen Kennedy, 2008-09-26

7 answers

Jeśli chcesz napisać przenośny Kod W C, to proponuję napisać w C89 (stary standard ANSI C). Standard ten jest obsługiwany przez większość kompilatorów.

Kompilator Intel C ma bardzo dobrą obsługę C99 i produkuje szybkie binaria. (Thanks 0x69 !)

MSVC obsługuje niektóre nowe funkcje , A Microsoft planuje poszerzyć wsparcie w przyszłych wersjach.

GCC obsługuje kilka nowych rzeczy z C99. Stworzyli tabelę o statusie C99 funkcje . Prawdopodobnie najbardziej użyteczną cechą C99 jest tablica zmiennej długości, a GCC obsługuje ją teraz. Clang (clang LLVM) obsługuje większość funkcji z wyjątkiem pragmatów zmiennoprzecinkowych.

Wikipedia wydaje się mieć ładne podsumowanie obsługi C99 kompilatorów.

 21
Author: KovBal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-17 10:46:21

Ktoś wspomniał, że kompilator Intela ma wsparcie dla C99. Istnieje również kompilator Comeau C/C++ , który w pełni obsługuje C99. Tylko o nich wiem.

Funkcje C99, których nie używam, ponieważ nie są dobrze obsługiwane, obejmują:

  • tablice o zmiennej długości
  • makra ze zmienną liczbą parametrów.

C99 funkcje, które regularnie używam, które wydają się być dość dobrze obsługiwane (z wyjątkiem Microsoft):

  • stdint.h
  • snprintf() - MS ma niestandardowe _snprintf(), które ma poważne ograniczenia nie zawsze null kończące bufor i nie wskazujące, jak duży bufor powinien być
Aby obejść brak wsparcia Microsoftu, używam public domain stdint.h z MinGW (który zmodyfikowałem, aby działał również na VC6) i prawie public domain snprintf() z Holgera Weissa

Elementy, które nie są obsługiwane przez Microsoft, ale nadal będą używane na innych Kompilatory w zależności od projektu obejmują:

  • deklaracje mieszane i kod
  • funkcje inline
  • _Pragma() - dzięki temu wózki są o wiele bardziej użyteczne
 16
Author: Michael Burr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-21 01:17:56

Dla gcc istnieje Tabela ze wszystkimi obsługiwanymi funkcjami . Wydaje się, że najbardziej brakuje tablic o zmiennej długości. Większość pozostałych brakujących funkcji to problemy z biblioteką, a nie funkcje językowe.

 7
Author: Torsten Marek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-26 13:26:49

Kompilator IBM C obsługuje c99, gdy jest wywoływany jako c99, ale nie gdy jest wywoływany jako cc lub xlc.

 5
Author: frankster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-11 16:08:27

Spójrz na C99 suport status dla GNU aby dowiedzieć się, które funkcje są obecnie obsługiwane.

Sun Studio ma obsługiwać całą specyfikację C99. Nigdy ich nie używałem, więc nie mogę potwierdzić.

Nie wierzę, że kompilator Microsoftu obsługuje specyfikację C99 w całości. W tej chwili bardziej skupiają się na C++

 3
Author: Benoit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-26 13:27:33

Clang (kompilator C i C++ oparty na LLVM) ma całkiem dobre wsparcie dla C99. Myślę, że jedyną rzeczą, której nie obsługuje, są pragmy zmiennoprzecinkowe.

 3
Author: Cromulent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-17 06:52:40

Microsoft wydaje się śledzić standardy C++, ale nie mają wsparcia dla C99. (Mogą wybrać niektóre funkcje, ale można powiedzieć, że są to cherry-picking C++0x, gdzie istnieje nakładanie się.)

Począwszy od Visual Studio. NET 2003, nowe projekty mają domyślnie włączoną opcję' Skompiluj kod C jako C++ (/TP)'.

 2
Author: Mike Dimmick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-26 16:16:53