Articles of gcc

log (10.0) pode compilar mas log (0.0) não pode?

Para o seguinte código-fonte C : #include int main(void) { double x; x = log(0.0); return 0; } Quando eu compilo com o gcc -lm , eu tenho: /tmp/ccxxANVH.o: In function `main’: ac:(.text+0xd): undefined reference to `log’ collect2: error: ld returned 1 exit status Mas, se eu replace log(0.0) com log(10.0) , então ele pode […]

Como Switch Case Statement Implementado ou funciona internamente?

Eu li em algum lugar que a instrução switch usa “Binary Search” ou algumas técnicas de sorting para escolher exatamente o caso correto e isso aumenta seu desempenho em comparação com a escada else-if. E também, se dermos o caso em ordem, o switch funcionará mais rápido? é assim? Você pode adicionar suas sugestões valiosas […]

Os diferentes dialetos do GCC podem ser ligados entre si?

Eu sei que, em princípio, isso é provavelmente um comportamento indefinido, mas no interesse de lidar com um grande projeto, aqui está minha pergunta sobre o GCC: Suponha que eu compile uma unidade de gcc -std=c++98 com gcc -std=c++98 e outra com -std=c++11 , usando exatamente a mesma instalação do compilador. Existe algum tipo de […]

Por que a divisão inteira por -1 (negativo) resulta em FPE?

Eu tenho uma atribuição de expor alguns comportamentos aparentemente estranhos do código C (rodando em x86). Eu posso facilmente completar tudo, mas este realmente me confundiu. Trecho de código 1 saídas -2147483648 int a = 0x80000000; int b = a / -1; printf(“%d\n”, b); O snippet de código 2 não produz nada e fornece uma […]

Compile com libc mais antiga (a versão `GLIBC_2.14 ‘não encontrada)

Eu tenho que compilar um programa em um ubuntu atual (12.04). Este programa deve então ser executado em um cluster usando o CentOS com um Kernel antigo (2.6.18). Eu não posso compilar diretamente no cluster, infelizmente. Se eu apenas compilar e copiar o programa sem quaisquer alterações, recebo a mensagem de erro “kernel too old”. […]

O compilador ac / c ++ otimiza as divisões constantes pelo valor da potência de dois em turnos?

Pergunta diz tudo. Alguém sabe se o seguinte … size_t div(size_t value) { const size_t x = 64; return value / x; } … está otimizado em? size_t div(size_t value) { return value >> 6; } Os compiladores fazem isso? (Meu interesse está no GCC). Existem situações em que isso acontece e outras onde isso […]

Fusão multiplicar adicionar e modos de arredondamento padrão

Com o GCC 5.3, o seguinte código compilar com -O3 -fma float mul_add(float a, float b, float c) { return a*b + c; } produz o seguinte conjunto vfmadd132ss %xmm1, %xmm2, %xmm0 ret Eu observei o GCC fazendo isso com o -O3 já no GCC 4.8 . Clang 3.7 com -O3 -mfma produz vmulss %xmm1, […]

Erro de tipos conflitantes ao compilar o programa c usando gcc

Eu tentei compilar o seguinte programa com o gcc. 0 #include 1 2 main () 3 4 { 5 char my_string[] = “hello there”; 6 7 my_print (my_string); 8 my_print2 (my_string); 9} 10 11 void my_print (char *string) 12 { 13 printf (“The string is %s\n”, string); 14 } 15 16 void my_print2 (char *string) […]

O __attribute __ ((__ packed__)) do GCC mantém o pedido original?

Propósito Eu estou escrevendo um programa de rede em C (especificamente gnu89 ) e gostaria de simplificar as coisas reinterpretando uma certa struct X como um grande array de bytes (também conhecido como char ), enviando os bytes pela rede e reinterpretando-os como struct X no outro lado. Para este fim, decidi usar o __attribute […]

Posso fazer o gcc me dizer quando um cálculo resulta em NaN ou inf em tempo de execução?

Existe uma maneira de dizer ao gcc para lançar um SIGFPE ou algo semelhante em resposta a um cálculo que resulta em NaN ou (-)inf em tempo de execução, como seria para uma divisão por zero? Eu tentei o -fsignaling-nans , que parece não ajudar.