Simplesmente fantástico!!!
Arquivos da Tag: Tecnologia
ABC++ Criando variáveis em qualquer lugar.
Em C não se pode criar variáveis no meio do programa.
Deve-se que cria-las somente no início das funções, Certo ?
Errado !
Isso é para Pascal que é amarrado, em C você pode criar as variáveis onde quiser.
Só precisa de um bloco de código que inicia co ‘{‘ (abre chaves) e termina com ‘}’ (fecha chaves).
Ou seja vc pode colocar entre um for(…){ } entre um while(…) { } ou até entre um bloco de programa composto apenas de ‘{‘ e ‘}’ …
Assim são válidas as seguintes formas de criar variáveis:
// estude com cuidado este exemplo pois os whiles tem pontos que podem causar bugs lógicos terríveis
//fique atento.
#include <stdio.h>
main(){
int z=0;
// neste while o x é zerado toda vez que dá loop
while(z<=3){
int x=10; // o valor de x volta a ser 10 noloop.
printf("x somente existe neste bloco (x=%d)\n",x);
x++;
z++;
}
// neste while o x não é zerado.
z=0;
while(z<=3){
int x; // o valor de x não é zerado no loop.
if (z==0) x=0;
printf("x somente existe nste bloco (x=%d)\n",x);
x++;
z++;
}
{
int i;
for(i=0;i<10;i++){
int y=0;
printf("i:%d y:%d\n",i,y);
}
}
}
Só uma coisa depois do ‘}’ fecha chaves o programa desconhece a variável, ela só vale para dentro daquele bloco. ou seja, é uma variável local do bloco e se for referenciada fora do bloco trata-se de OUTRA variável e não a mesma.
Por exemplo:
#include <stdio.h>
main(){
int x=10;
printf("x vale:%d\n",x);
{
int x=123;
printf("x vale:%d\n",x);
}
printf("x vale:%d\n",x);
}
Nesse exemplo o x vale 123 somente dentro do bloco onde ele é referenciado, fora ele vale 10... o resultado pro programa é:
x vale:10
x vale:123
x vale:10
Também deve-se observar que dentro de um loop se declaramos um valor inicial á variável este valor inicial é novamente carregado na variável assim que ocorrer o loop.
Isso não deve ser esquecido (ler primeiro exemplo de código com cuidado).
Imagine agora que você tem um programa com uma função que é pequena e você só usa uma vez. e você quer refatorar e colocar esta função dentro do programa principal.
Basta copiar o conteúdo da função dês do ‘{‘ até o ‘}’. Não tem que mover as variáveis locais para fora nem nada disso. Somente tem que passar os parâmetros de outra forma mudando o nome das variáveis de parâmetro para os valores ou variáveis do programa principal.
Esite um outro uso: Alguns trechos do programa exigem variáveis que somente serão usadas naquele lugar. Então não é necessário declarar as variáveis lá no inicio da função ou como global. Você pode declarar dentro do bloco local. Isso é bom para usar a memória somente quando necessário.
ABC++: Função que testa Expressão Regular.
int regexcmp(char *myregex, char *entrada) {
/* aloca espaço para a estrutura do tipo regex_t */
regex_t reg;
/* compila a ER passada em (a)
* em caso de erro, a função retorna diferente de zero
*/
if (regcomp(®, myregex, REG_EXTENDED | REG_NOSUB) != 0) {
fprintf(stderr, "erro regcomp\n");
exit(1);
}
/* tenta casar a ER compilada (®) com a entrada
* se a função regexec retornar 0 casou, caso contrário não
*/
return regexec(®, entrada, 0, (regmatch_t *) NULL, 0);
}// Fim da função
// exemplo de uso
//-----------------------------------------------------------------------------------
void main(int argc, char *argv[]){
if(!regexcmp("<[[:alnum:]]+>", argv[1])){
printf("Tem tags XML\n");
}else{
printf("Não tem tags XML");
}
}
ABC++ Coletando lixo do C (Garbage colector para C e C++)
/*
Pessoal,
Todos que usam C e C++ com mais seriedade sabem que a utilização da
memória pode ser um problema.
Matreizes dinâmicas, ponteiros de char e tudo o mais que pode crescer
e explodir o programa.
Não seria bom se a linguagem C tivesse um recurso para controlar a
memória ? Em alguns projetos, sim. Em outros é bom ter um controle
manual da memória.
Tudo que é automático falha automaticamente.
Mas e se fosse possível usar este recurso sempre que for conveniente
sem perder o poder de poder fuçar na unha quando for necessário ?
Hmmmm agora estamos falando como programadores de verdade!
A linguagem C é extensível e existe como adicionar uma lib que faça o
sujo trabalho de coletar o lixo para nós.
Sim, a biblioteca de GC (Garbage Colector), possui um algoritmo de
"limpeza" de memória e basicamente você não vai ficar perdido em meio
a funções free() não finalizadas e também vai ter uma indicação melhor
em tempo de execução se alguma área de memória explodiu, e onde.
Isso dá uma grande agilidade e poder de depuração.
Bom, as referências dessa lib: Está hospedada e mantida pela HP. É
usada no projeto Mozilla, Inkscape, Mono e vários projetos.
Abaixo um simples exemplo de programa devorador de memória alocada e
como ele fica simples feito com a lib.
Vejam que basta utilizar GC_MALLOC() no lugar do mal-loco() original
ou seja a lib possui interface com o esquema de alocação de memória
feito por programadores cabra-macho sim senhor.
E notem também que o free() foi pra /dev/null
*/
//Exemplo de utilização da biblioteca. loop.c
#include "gc.h"
#include <assert.h>
#include <stdio.h>
int main()
{
int i;
GC_INIT(); /* Optional on Linux/X86; see below. */
for (i = 0; i < 10000000; ++i)
{
int **p = (int **) GC_MALLOC(sizeof(int *));
int *q = (int *) GC_MALLOC_ATOMIC(sizeof(int));
assert(*p == 0);
*p = (int *) GC_REALLOC(q, 2 * sizeof(int));
if (i % 100000 == 0)
printf("Heap size = %d\n", GC_get_heap_size());
}
return 0;
}
//EOF
// Compilação:
// cc -I/home/xyz/gc/include loop.c /home/xyz/gc/lib/libgc.a -o loop
//Referencias da lib:
//http://www.hpl.hp.com/personal/Hans_Boehm/gc/
//http://www.hpl.hp.com/personal/Hans_Boehm/gc/simple_example.html
Teste de processador
O que acontece quando se retira o cooler do processador?
O calor gerado é tanto que dizem por aí que se pode até fritar um ovo:
Crianças, não façam isso em casa… façam na do RicLeite!!!
Aprenda a dobrar camisas com um engenheiro
Muito interessante! Me lembro que até o Sheldon Cooper do seriado The Big Bang Theory utilizou um apetrecho destes…
Teste de Velocidade do Google Chrome
O que é mais rápido: fazer batata frita, o som, um raio ou o Google Chrome?
Criando um pendrive para instalar o Slackware 13
Hoje em dias os pendrives estão ficando cada vez maiores em capacidade e mais baratos. Se você tem um pendrive a partir de 2Gb, pode faze-lo ser um Pendrive instalador de Slackware.
A seguir passarei os passos para criar um pendrive “bootavel” para instalar o Slackware em dispositivos sem CD ou DVD ou mesmo para reparar instalações danificadas: Continuar lendo
Nerdicas 6 – O comando date
O date é um comando que sempre foge á memória, pois seu formato é um pouco prolixo.
Vamos ser sinceros, todos já erramos na sintaxe desse monstinho !
Normalmente eu uso o ntpdate para acertar hora e data e mando o date as favas. Mas nem sempre isso é possível.
Vou passar a dica rápida para alterar a data do linux sem ter que mexer nas horas e minutos e como alterar as horas e minutos sem mexer na data. Continuar lendo
Nerdicas 5 – Encriptação
Guardar senhas ou outras informações em um arquivo encriptado com o VIM
Sei que existe o ótimo kwallet que é um aplicativo que serve para armazenar senhas dos mais diversos aplicativos. Ele é ótimo e seria perfeito se tivesse integração com o firefox e com outros aplicativos não Qt … (hmm deu vontade de escrever um add on… Continuar lendo