Bom... os Posts anteriores foram todos sobre programação, né?
Chegou a hora do limão (com cachaça e açucar)
Receita de caipirinha
Have fun!
terça-feira, 19 de maio de 2009
sexta-feira, 3 de outubro de 2008
funções inline em C++
O que é uma função inline?
Uma função inline é um tipo de função que tem um comportamento levemente diferente das funções comuns que temos em C++. Basicamente, suas chamadas são substituídas pela lógica da função em si, em tempo de compilação.
O quê? hein?
Bom, de uma forma bem simplista, o que acontece é o seguinte:
Este pedaço de codigo, quando for compilado, acaba virando isso:
Beleza, mas e o quico?
Esta técnica traz benefícios e malefícios. Na maioria dos casos (muita calma nessa hora! isso nem sempre é assim...) o código compilado torna-se:
- Mais rápido
Isto porque nós vamos economizar as chamadas de funções, ou seja, lá no assembly, não vai existir um desvio de fluxo (um jump) a cada chamada de função.
- Maior
Como a implementação da função é "colada" em cada chamada, o tamanho do executável final tende a crescer.
Implementação
Existem duas formas de tornar uma função inline:
- explicitamente: usando a palavra reservada inline:
- implicitamente: Quando uma função é implementada na própria declaração da classe, ela vira inline.
Esse é um artifício legal da linguagem, e deve ser usado - mas com responsabilidade :-)
Uma função inline é um tipo de função que tem um comportamento levemente diferente das funções comuns que temos em C++. Basicamente, suas chamadas são substituídas pela lógica da função em si, em tempo de compilação.
O quê? hein?
Bom, de uma forma bem simplista, o que acontece é o seguinte:
bla;
funcaoinline();
bla;
Este pedaço de codigo, quando for compilado, acaba virando isso:
bla;
bla2; // Esta eh a implementacao da funcao inline!
bla2; // (ou seja, o codigo que estava dentro da funcao)
bla;
Beleza, mas e o quico?
Esta técnica traz benefícios e malefícios. Na maioria dos casos (muita calma nessa hora! isso nem sempre é assim...) o código compilado torna-se:
- Mais rápido
Isto porque nós vamos economizar as chamadas de funções, ou seja, lá no assembly, não vai existir um desvio de fluxo (um jump) a cada chamada de função.
- Maior
Como a implementação da função é "colada" em cada chamada, o tamanho do executável final tende a crescer.
Implementação
Existem duas formas de tornar uma função inline:
- explicitamente: usando a palavra reservada inline:
inline
void Fred::f(int i, char c)
{
...
}
- implicitamente: Quando uma função é implementada na própria declaração da classe, ela vira inline.
class Fred {
public:
void f(int i, char c)
{
...
}
};
Esse é um artifício legal da linguagem, e deve ser usado - mas com responsabilidade :-)
segunda-feira, 21 de abril de 2008
Ponteiros do Mal
Interessante a questão de uma prova, que um amigo meu fez para arrumar um emprego: Davam o seguinte codigo e pediam para falar o que o programinha ia cuspir na tela quando fosse executado:
E aí campeão? qual o retorno do cout?
...
...
11, certo?
...
Não, cazzo! uma coisa que a gente sempre esquece é que o operador x++ é o operador de pós-incremento, ou seja, a variável x só vai ser incrementada no ciclo seguinte, fazendo com que o programa imprima "10" na tela. A baguncinha com os ponteiros foi só para tirar a atenção disso, que era o que realmente estava sendo avaliado nessa questão... :-P
#include <iostream.h>
int main()
{
int x = 10;
int *p;
int **q;
p = &x;
q = &p;
cout<<**q++<<endl;
return 1;
}
E aí campeão? qual o retorno do cout?
...
...
11, certo?
...
Não, cazzo! uma coisa que a gente sempre esquece é que o operador x++ é o operador de pós-incremento, ou seja, a variável x só vai ser incrementada no ciclo seguinte, fazendo com que o programa imprima "10" na tela. A baguncinha com os ponteiros foi só para tirar a atenção disso, que era o que realmente estava sendo avaliado nessa questão... :-P
segunda-feira, 3 de março de 2008
Apresentação
A idéia deste blog é criar um ambiente um pouco mais ameno para tratar de temas relacionados à computação (mais especificamente, programação). A freqüência de postagens não terá critério algum (não diga que eu não avisei) senão a minha paciência para tal.
Os temas que serão tratados aqui serão, basicamente, as linguagens de programação com as quais trabalho/trabalhei sendo elas: C/C++ (o que mais deverá ter aqui), Java, Perl, PHP, entre outras. Também já trabalhei com HTML/CSS/Javascript, então de vez em quando deve ter algum post sobre isso.
No mais, a intenção destes posts será ajudar quem está começando a programar com algumas dicas, e discutir alguns tópicos mais avançados também.
Os temas que serão tratados aqui serão, basicamente, as linguagens de programação com as quais trabalho/trabalhei sendo elas: C/C++ (o que mais deverá ter aqui), Java, Perl, PHP, entre outras. Também já trabalhei com HTML/CSS/Javascript, então de vez em quando deve ter algum post sobre isso.
No mais, a intenção destes posts será ajudar quem está começando a programar com algumas dicas, e discutir alguns tópicos mais avançados também.
quinta-feira, 28 de fevereiro de 2008
Assinar:
Postagens (Atom)