Pergunta

Como universalmente é o padrão C99 suportado em compiladores de hoje? Eu entendo que nem mesmo GCC suporte completo a isso. É este direito?

Quais recursos de C99 são suportados mais do que outros, ou seja, que eu possa usar para ter a certeza de que a maioria dos compiladores vai me entender?

Foi útil?

Solução

Se você quiser escrever código C portátil, então eu sugiro que você escrever em C89 (padrão ANSI C de idade). Este padrão é suportado pela maioria dos compiladores.

A Intel C Compiler tem muito bom C99 apoio e produz binários rápidos. (Obrigado 0x69 !)

MSVC suportes algumas novas funcionalidades e Microsoft plano de apoio ampliar em versões futuras.

GCC suporta algumas coisas novas de C99. Eles criaram uma mesa sobre a status do C99 apresenta . Provavelmente a característica mais utilizável do C99 é a matriz de comprimento variável, e GCC suporta agora. Clang (de LLVM C fachada) suporta a maioria das características excepto pragmas de ponto flutuante.

Wikipedia parece ter um resumo agradável de C99 apoio dos compiladores.

Outras dicas

Alguém mencionou o compilador Intel tem suporte C99. Há também o Comeau C / C ++ compilador que suporta inteiramente C99. Estes são os únicos que eu estou ciente de.

C99 características que eu não uso, porque eles não são bem suportados incluem:

  • matrizes de comprimento variável
  • macros com número variável de parâmetros.

C99 dispõe que eu uso regularmente que parecem ser muito bem suportado (exceto pela Microsoft):

  • stdint.h
  • snprintf() - MS tem um _snprintf() não-padrão que tem sérias limitações de nem sempre nulo que encerra o tampão e não indicam o tamanho do buffer deve ser

Para contornar non-de suporte da Microsoft, eu uso um stdint.h domínio público a partir MinGW ( que eu modificado para também trabalhar em VC6) e um snprintf() domínio quase público de Holger Weiss

Os itens que não são suportados pela Microsoft, mas ainda vai usar em outros compiladores, dependendo do projeto incluem:

  • declarações mistos e de código
  • funções inline
  • _Pragma() - isso faz com que pragmas muito mais útil

O c compilador IBM tem suporte c99 quando invocada como c99 mas não quando invocada como cc ou xlc.

C99 suport status para GNU para obter detalhes sobre quais recursos são suportados atualmente.

Sun Studio é suposto apoiar toda a especificação C99. Eu nunca usei-los, por isso não posso confirmar.

Eu não acredito que o compilador Microsoft suporta a especificação C99 na sua totalidade. Eles estão muito mais focados em C ++ no momento

Clang (o LLVM base C e compilador C ++) tem muito bom suporte C99. Acho que a única coisa que não suporte são o pragmas ponto flutuante.

Microsoft parecem estar seguindo padrões C ++, mas não têm suporte para C99. (Eles podem cherry-pick algumas características, mas poderia ser dito ser C ++ 0x onde há uma sobreposição cherry-picking).

Como do Visual Studio .NET 2003, novos projetos têm o 'código de compilação C como C ++ (/ TP)' opção habilitada por padrão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top