- ATENÇÃO: Este site está aposentado.
Não receberá posts nem comentários novos. Para ler dicas mais recentes, vá no Stack Overflow. Livros da equipe do CODARE
Expressões Regulares
Uma Abordagem Divertida
de Aurelio Marinho Jargas
Shell Script Profissional
de Aurelio Marinho Jargas
PHP-GTK
de Pablo Dall'Oglio
PHP Programando com Orientação a Objetos
de Pablo Dall'Oglio
Ruby: Conhecendo a Linguagem
de Eustáquio Rangel (TaQ)
Author Archives: Thiago Marcos Santos
C: Escondendo o conteúdo de structs com tipos incompletos
Algumas vezes é possível utilizar alguns paradigmas de orientação à objetos em C. Ao se projetar uma biblioteca, podemos encapsular o conteúdo das structs usando tipos incompletos e provendo funções para manipular o conteúdo destas. Imagine uma biblioteca que cria … Continue reading
C, C++: cannot open shared object file
As bibliotecas compartilhadas são carregadas no início da execução de um programa. No Linux, o dynamic loader procura pelas bibliotecas em /lib e /usr/lib. Caso a biblioteca não esteja presente neste caminho, recebemos uma mensagem de erro parecida com a … Continue reading
Posted in C, CPP, Linux
Tagged -rpath, biblioteca, error, gcc, ld, LD_LIBRARY_PATH, linker, shared libraries
7 Comments
C: Múltiplos programas no mesmo binário
Um mesmo aplicativo pode se comportar de forma diferente dependendo da forma como é invocado. No exemplo a seguir, o mesmo programa é usado para calcular a raiz quadrada e potência de dois de um dado argumento. #include <libgen.h> #include … Continue reading
C, C++: Dupla negação para conversão em booleano
Em C não existe um tipo nativo booleano, temos 0 como falso e tudo diferente de 0 é verdadeiro. Em C++ existe o tipo booleano, onde verdadeiro e falso correspondem respectivamente a 0 e 1. Uma forma de fazer um … Continue reading
Python: Teste condicional e estruturas de dados vazias
Classes que implementam o método __len__, quando testadas com if, este método é invocado. Portanto, para uma lista vazia, o teste falha. x = []; if x: print “OK” # Nao imprime nada Para mudar este comportamento, basta reimplementar o … Continue reading
C: Descobrir se um processo está em execução
No Linux é muito comum um daemon, durante sua execução, criar um arquivo .pid dentro de /var/run. Dentro do arquivo syslogd.pid, por exemplo, contém o PID da instância do syslogd em execução. Usa-se este mecanismo para impedir que duas instâncias … Continue reading
C, C++: Vetores de tamanho zero
Um recurso bastante útil do GCC (apenas) são vetores de tamanho zero. O uso é permitido apenas como último elemento de uma estrutura de dados. struct pessoa { int idade; char nome[0]; }; printf(“%d\n”, sizeof(struct pessoa)); // Imprime “4” Note … Continue reading
C: Indo para background com o daemon()
A forma tradicional de um programa ir para background é fazendo um fork(), terminar o processo pai e criar uma nova sessão com setsid(). Outra forma mais simples, que de fato encapsula tudo isso e mais um pouco, é apenas … Continue reading
C, C++: Cuidado com funções definidas como macros
Imagine uma função definida em uma macro que faça a potência de dois de um determinado número. Ela poderia ser definida da seguinte forma: #define quadrado(n) \ n * n Acontece que o comportamento, dependendo dos parâmetros, nem sempre é … Continue reading
C, C++: Usando a seção de dados
As variáveis da pilha de execução, são automaticamentes desalocadas quando a mesma retorna. No caso do exemplo a seguir, o retorno da função teste() é o endereço de memória da string “Teste123” (ou seja, para onde str aponta e não … Continue reading
C, C++: Banir funções usando o pré-processador
Quem usa o GCC pode tirar vantagem do pré-processador para banir de vez do código algumas funções consideradas maléficas como gets() e sprintf(), por exemplo. Basta acrescentar no seu código a seguinte linha: #pragma GCC poison gets sprintf Um erro … Continue reading
C, C++: Obter macros definidas pelo pré-processador
Palavras-chave: C, pré-processador, macros, macro, define, gcc O pré-processador do GCC define uma série de macros por default. Muitas delas podem lhe ser útil, caso se deseje que um determinado bloco de código seja compilado para apenas uma determinada arquitetura, … Continue reading
C, C++: Fechar a saída padrão e de erro (stdout, stderr)
Uma forma de impedir que seu programa imprima na tela, seja por linkar com uma biblioteca que abusa da verbosidade ou para garantir que um daemon não polua seu terminal quando for para background, é fechando a saída padrão (stdout) … Continue reading
C, C++: Parâmetro não utilizado
Palavras-chave: warning, unused parameter, variable Em alguns casos temos que implementar uma função (na maioria dos casos uma callback) cujo o protótipo já é definido pela API utilizada. Alguns parâmetros podem ser desnecessários, mas geram warnings de compilação caso não … Continue reading
Posted in C, CPP
4 Comments
C, C++: Alocação dinâmica na pilha
Palavras-chave: non-constant initializers, dynamic stack allocation Muitas vezes alocamos memória para um buffer baseado em um tamanho que é passado como parâmetro para a função. Como no seguinte exemplo: void foobar (size_t size) { char *buffer = malloc(size * 2); … Continue reading
Posted in C, CPP
6 Comments