Script gerador de código fonte em ANSI C

Publicado por Roberto Gomes Borges em 03/12/2014

[ Hits: 5.911 ]

 


Script gerador de código fonte em ANSI C



Salve, prezados e prezadas colegas, nobres entusiastas, estudantes e profissionais de TI. Amantes da LIBERDADE PLENA E INCONDICIONAL.

Antes de mais nada, um pequeno aviso:

Logicamente, o script está mais direcionado a estudantes da linguagem C, em fase inicial de aprendizagem, assim como eu. Informo também que o mesmo é bem incipiente e embrionário. Obrigado!

O script gera arquivos e funções contidas nos mesmos de acordo com os valores setados nas variáveis.

Antes mesmo de iniciar o ano "novo" que bate as portas, resolvi tentar aprender um pouco de ANSI C. Ufa! Finalmente Roberto, pois bem. Logo de início, tentei ver os limites e as capacidades do compilador C, no caso o GCC, aí me deparei com termos como (HEAP, BSS, DATA, TEXT, STACK), etc, etc.

Daí veio a ideia de criar um script (Linux bash) que geraria os arquivos fontes em ANSI C. O script gerador de fonte C, mk_c_src.sh, mas para os íntimos, "O MONSTRO DEVORADOR DE SILÍCIO" (explico já o "apelido").

Poupando assim, muito trabalho de digitar o código, pois o mesmo é muito genérico, afinal queremos apenas testar os tais HEAP, BSS, DATA, TEXT, STACK, etc, etc e STRESS de CPU/Memória.

Como o título indica, o script gera arquivos e funções contidas nos mesmos de acordo com os valores setados nas variáveis. E cria também o main.c e o makefile.

Por exemplo, a variável "K" informa quantos arquivos ".c" desejamos criar, a variável "M" informa quantas funções ESTÁTICAS ou NÃO desejamos criar dentro dos arquivos ".c", obviamente a variável "STATIC_S_N", setada com os valores "S/Y/N", indica se as funções serão STATIC "S/Y" ou não "N".

O script da forma que está, gera 8 (oito) arquivos fontes, de cfn1.c até cfn8.c bem como o main.c e o makefile, sendo que cada arquivo contém 16 (dezesseis) funções NÃO ESTÁTICAS. Também são geradas variáveis, GLOBAIS, LOCAIS e ESTÁTICAS, justamente para fazer mudanças nos HEAP, BSS, DATA, TEXT, STACK, de acordo com os valores setados. Além dos estudos já citados, o binário gerado (test) também gera STRESS de CPU/Memória.

Pois o mesmo funciona da seguinte forma: main chama cfn1, que chama todas as funções nele contidas, que no final chama cfn2, e o processo continua até cfn(x) que retorna a main, consumindo CPU e Memória.

main => cfn1(Local_cfn1 ... Local_cfnx) => cfn2(...) => cfnx

Para verificar os valores de HEAP, BSS, DATA, TEXT, STACK, use readelf, size, objdump, etc. Para verificar o STRESS use top, htop, atop, etc, etc.

Variáveis das variáveis:

GLOBAIS:
  • G_CHAR_VAR => 32
  • G_INT_VAR => 32
  • G_FLOAT_VAR => 32
  • G_DOUBLE_VAR => 32

LOCAIS:
  • L_CHAR_VAR => 16
  • L_INT_VAR => 16
  • L_FLOAT_VAR => 16
  • L_DOUBLE_VAR => 16

ESTÁTICAS:
  • S_CHAR_VAR => 8
  • S_INT_VAR => 8
  • S_FLOAT_VAR => 8
  • S_DOUBLE_VAR => 8

Do procedimento:

Por exemplo: hipotético usuário (bob):

pwd
/home/bob
mkdir -p mkc/src
cp /home/bob/Downloads/mk_c_src.sh mkc/
chmod +x mkc/mk_c_src.sh
cd mkc/src
time ../mk_c_src.sh
time make -j <number of cpu cores>
time ./test

Do "apelido": fique atento quanto aos valores configurados nas variáveis do script, pois você pode gerar desde pequenos binários até o limite da arquitetura do compilador/hardware. Um verdadeiro "Monstro Devorador de Recursos".

Espero que o mesmo seja de bom proveito, mk_c_src.sh foi inteira e completamente escrito por mim, e o mesmo é 100% free/open source. Fique à vontade para fazer o que bem entender com ele.

Se por ventura eu não responder e-mails nos próximos 30 dias, é devido ao fato de estar em viagem a locais sem acesso à internet. Maravilhosamente cercado apenas pela natureza e, é claro, alguns livros do bom e velho papel. Sobre linguagem C, é claro.

Obrigado.

Enjoy...
Have a lot of fun...

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Atualizando Linux Mint 17 para Linux Mint 17.1

Configurando impressora de maneira simples no Slackware

Compartilhando a Internet - transfome o Linux em um roteador

LXLE, uma distro legal pra começar!

Canal de vídeo-aulas no Youtube

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts