O que é a Flag '-ansi' do compilador ? [RESOLVIDO]

1. O que é a Flag '-ansi' do compilador ? [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 09/09/2014 - 19:20h

Galera ,

Hoje eu estava criando um makefile (olhando em outros para entender como funcionava),dai eu vi a flag -ansi.

Meu 'projeto' tem alguns arquivos , e com o -ansi ele não reconheceu esses outros arquivos.

O que é a flag -ansi e para o que ela serve?

Agradeço desde já

T+


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 10/09/2014 - 02:26h

De um “man gcc”:

-ansi
In C mode, this is equivalent to -std=c90. In C++ mode, it is equivalent to -std=c++98.

This turns off certain features of GCC that are incompatible with ISO C90 (when compiling C code), or of standard C++ (when compiling C++ code), such as the "asm" and "typeof" keywords, and predefined macros such as "unix" and "vax" that identify the type of system you are using. It also enables the undesirable and rarely used ISO trigraph feature. For the C compiler, it disables recognition of C++ style // comments as well as the "inline" keyword.

The alternate keywords "__asm__", "__extension__", "__inline__" and "__typeof__" continue to work despite -ansi. You would not want to use them in an ISO C program, of course, but it is useful to put them in header files that might be included in compilations done with -ansi. Alternate predefined macros such as "__unix__" and "__vax__" are also available, with or without -ansi.

The -ansi option does not cause non-ISO programs to be rejected gratuitously. For that, -pedantic is required in addition to -ansi.

The macro "__STRICT_ANSI__" is predefined when the -ansi option is used. Some header files may notice this macro and refrain from declaring certain functions or defining certain macros that the ISO standard doesn't call for; this is to avoid interfering with any programs that might use these names for other things.

Functions that would normally be built in but do not have semantics defined by ISO C (such as "alloca" and "ffs") are not built-in functions when -ansi is used.


Que arquivos deixam de funcionar quando você usa essa opção, e com que tipo de mensagem de erro?

3. Re: O que é a Flag '-ansi' do compilador ? [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 10/09/2014 - 10:29h

E o que isso quer dizer ???

Eu tenho o arquivo main.c e 5 'headers'.h

Parece que se eu usar o -ansi tenho que fazer dessa forma :

gcc arquivo1.h arquivo2.h arquivo3.h arquivo4.h arquivo5.h main.c -o Arquivo -ansi -pedantic

Os erros são que ele não reconheçe os outros arquivos incluidos.

Vale a pena usar o -ansi ?

T+


4. Re: O que é a Flag '-ansi' do compilador ? [RESOLVIDO]

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 10/09/2014 - 10:43h

FLAG -ansi é para tirar o suporte ANSI, é o que vc quer?


5. Re: O que é a Flag '-ansi' do compilador ? [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 10/09/2014 - 10:51h

Thihup escreveu:

E o que isso quer dizer ???


Não sou o autor do texto, mas suponho que quer dizer exatamente o que diz.

Eu tenho o arquivo main.c e 5 'headers'.h

Parece que se eu usar o -ansi tenho que fazer dessa forma :

gcc arquivo1.h arquivo2.h arquivo3.h arquivo4.h arquivo5.h main.c -o Arquivo

Os erros são que ele não reconheçe os outros arquivos incluidos.

Vale a pena usar o -ansi ?

T+


Você não deveria compilar explicitamente arquivos de cabeçalhos. Eles são referidos somente dentro de arquivos ".c", por meio da diretiva do preprocessador #include.

Se vale a pena usar -ansi ou não depende do que você quer fazer. A explicação que reproduzi aqui, tirada da própria documentação do GCC, explica de modo mais ou menos detalhado o que deixa de ou passa a funcionar quando você usa a opção.

O fato é: existe um padrão ANSI (depois copiado pela ISO) para a linguagem C, que descreve a linguagem que é aceita pelo compilador e prescreve requisitos para o próprio compilador. Quase todos os compiladores, no entanto, inclusive o GCC, implementam extensões à linguagem padronizada e ao funcionamento do compilador prescrito no padrão. Se você as utilizar, pode correr o risco de que seu código não compile numa outra implementação.

Se você tiver interesse que seu código possa ser utilizado em outros sistemas, deve procurar não utilizar tais extensões. A opção -ansi pode lhe ajudar a diagnosticar eventuais usos de extensões que quebrariam a desejada compatibilidade.

N.B.: -ansi se preocupa apenas com a linguagem. Não tem relação alguma com bibliotecas que você venha a utilizar.


6. Re: O que é a Flag '-ansi' do compilador ? [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 10/09/2014 - 12:17h

@paulo

Se quiser me adicionar no skype , eu agradeceria , nós poderiamos trocar umas ideias e se quiser , vc poderia me ajudar no meu projeto (de um jogo)

Meu skype é (thihup) (sem parenteses)

T+






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts