Top Banner
15 a Aula - Bibliotecas e ’make’. Programa¸ ao Mestrado em Engenharia F´ ısica Tecnol´ ogica Samuel M. Eleut´ erio [email protected] Departamento de F´ ısica Instituto Superior T´ ecnico Universidade de Lisboa Mestrado em Engenharia F´ ısicaTecnol´ogica Programa¸c˜ ao - 15 a Aula (05.11.2018)
44

Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio [email protected]

Nov 10, 2018

Download

Documents

NguyenDat
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

15a Aula - Bibliotecas e ’make’.

ProgramacaoMestrado em Engenharia Fısica Tecnologica

Samuel M. [email protected]

Departamento de FısicaInstituto Superior Tecnico

Universidade de Lisboa

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 2: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Como Criar uma Biblioteca (Library)

Quando se tem diversos ficheiros que se vao usar como umconjunto, como e o caso de uma biblioteca de uso diverso, econveniente criar um arquivador que junta (arquiva) osficheiros compilados num so.

O arquivo assim criado devera ser posteriormente utilizadopelo compilador na operacoes de ’ligacao’ dos constituintes doprograma (’linkagem’).

O comando de ’unix’ que nos permite executar estas tarefas e’ar’. Podemos entao juntar os nossos ficheiros (ja compilados):

ar rv libPessoal.a Utils.o UtilsVect.o

em que:

r: insere os ficheiros no arquivo, substituindo-os caso existam;v: informa sobre a accao efectuada;

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 3: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Como Criar uma Biblioteca (Library)

Quando se tem diversos ficheiros que se vao usar como umconjunto, como e o caso de uma biblioteca de uso diverso, econveniente criar um arquivador que junta (arquiva) osficheiros compilados num so.

O arquivo assim criado devera ser posteriormente utilizadopelo compilador na operacoes de ’ligacao’ dos constituintes doprograma (’linkagem’).

O comando de ’unix’ que nos permite executar estas tarefas e’ar’. Podemos entao juntar os nossos ficheiros (ja compilados):

ar rv libPessoal.a Utils.o UtilsVect.o

em que:

r: insere os ficheiros no arquivo, substituindo-os caso existam;v: informa sobre a accao efectuada;

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 4: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Como Criar uma Biblioteca (Library)

Quando se tem diversos ficheiros que se vao usar como umconjunto, como e o caso de uma biblioteca de uso diverso, econveniente criar um arquivador que junta (arquiva) osficheiros compilados num so.

O arquivo assim criado devera ser posteriormente utilizadopelo compilador na operacoes de ’ligacao’ dos constituintes doprograma (’linkagem’).

O comando de ’unix’ que nos permite executar estas tarefas e’ar’. Podemos entao juntar os nossos ficheiros (ja compilados):

ar rv libPessoal.a Utils.o UtilsVect.o

em que:

r: insere os ficheiros no arquivo, substituindo-os caso existam;v: informa sobre a accao efectuada;

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 5: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Como Criar uma Biblioteca (Library)

Quando se tem diversos ficheiros que se vao usar como umconjunto, como e o caso de uma biblioteca de uso diverso, econveniente criar um arquivador que junta (arquiva) osficheiros compilados num so.

O arquivo assim criado devera ser posteriormente utilizadopelo compilador na operacoes de ’ligacao’ dos constituintes doprograma (’linkagem’).

O comando de ’unix’ que nos permite executar estas tarefas e’ar’. Podemos entao juntar os nossos ficheiros (ja compilados):

ar rv libPessoal.a Utils.o UtilsVect.o

em que:

r: insere os ficheiros no arquivo, substituindo-os caso existam;v: informa sobre a accao efectuada;

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 6: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Como Criar uma Biblioteca (Library)

Uma vez criado o arquivo ’libPessoal.a’, devemos criar umındice contendo todos os sımbolos (nomes, funcoes, variaveis,etc.) definidos nos ficheiros do arquivo:

ranlib libPessoal.aisto acelera o processo de ’linking’ da biblioteca e permitir asfuncoes nela contidas chamarem-se umas as outrasindependentemente da sua posicao no arquivo.

Note-se que as duas operacoes anteriores podem ser reunidasnuma so acrescentando a opcao ’s’ aos qualificadores de ’ar’:

ar rsv libPessoal.a Utils.o UtilsVect.o

Para visualizar o conteudo do arquivo ’libPessoal.a’, podeusar-se o comando ’nm’ (lista dos sımbolos):

nm libPessoal.a

Para mais informacoes sobre estes programas ver ’FreeBSDMan Pages’ (em ’Bibliografia’ no site da cadeira).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 7: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Como Criar uma Biblioteca (Library)

Uma vez criado o arquivo ’libPessoal.a’, devemos criar umındice contendo todos os sımbolos (nomes, funcoes, variaveis,etc.) definidos nos ficheiros do arquivo:

ranlib libPessoal.a

isto acelera o processo de ’linking’ da biblioteca e permitir asfuncoes nela contidas chamarem-se umas as outrasindependentemente da sua posicao no arquivo.

Note-se que as duas operacoes anteriores podem ser reunidasnuma so acrescentando a opcao ’s’ aos qualificadores de ’ar’:

ar rsv libPessoal.a Utils.o UtilsVect.o

Para visualizar o conteudo do arquivo ’libPessoal.a’, podeusar-se o comando ’nm’ (lista dos sımbolos):

nm libPessoal.a

Para mais informacoes sobre estes programas ver ’FreeBSDMan Pages’ (em ’Bibliografia’ no site da cadeira).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 8: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Como Criar uma Biblioteca (Library)

Uma vez criado o arquivo ’libPessoal.a’, devemos criar umındice contendo todos os sımbolos (nomes, funcoes, variaveis,etc.) definidos nos ficheiros do arquivo:

ranlib libPessoal.aisto acelera o processo de ’linking’ da biblioteca e permitir asfuncoes nela contidas chamarem-se umas as outrasindependentemente da sua posicao no arquivo.

Note-se que as duas operacoes anteriores podem ser reunidasnuma so acrescentando a opcao ’s’ aos qualificadores de ’ar’:

ar rsv libPessoal.a Utils.o UtilsVect.o

Para visualizar o conteudo do arquivo ’libPessoal.a’, podeusar-se o comando ’nm’ (lista dos sımbolos):

nm libPessoal.a

Para mais informacoes sobre estes programas ver ’FreeBSDMan Pages’ (em ’Bibliografia’ no site da cadeira).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 9: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Como Criar uma Biblioteca (Library)

Uma vez criado o arquivo ’libPessoal.a’, devemos criar umındice contendo todos os sımbolos (nomes, funcoes, variaveis,etc.) definidos nos ficheiros do arquivo:

ranlib libPessoal.aisto acelera o processo de ’linking’ da biblioteca e permitir asfuncoes nela contidas chamarem-se umas as outrasindependentemente da sua posicao no arquivo.

Note-se que as duas operacoes anteriores podem ser reunidasnuma so acrescentando a opcao ’s’ aos qualificadores de ’ar’:

ar rsv libPessoal.a Utils.o UtilsVect.o

Para visualizar o conteudo do arquivo ’libPessoal.a’, podeusar-se o comando ’nm’ (lista dos sımbolos):

nm libPessoal.a

Para mais informacoes sobre estes programas ver ’FreeBSDMan Pages’ (em ’Bibliografia’ no site da cadeira).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 10: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Como Criar uma Biblioteca (Library)

Uma vez criado o arquivo ’libPessoal.a’, devemos criar umındice contendo todos os sımbolos (nomes, funcoes, variaveis,etc.) definidos nos ficheiros do arquivo:

ranlib libPessoal.aisto acelera o processo de ’linking’ da biblioteca e permitir asfuncoes nela contidas chamarem-se umas as outrasindependentemente da sua posicao no arquivo.

Note-se que as duas operacoes anteriores podem ser reunidasnuma so acrescentando a opcao ’s’ aos qualificadores de ’ar’:

ar rsv libPessoal.a Utils.o UtilsVect.o

Para visualizar o conteudo do arquivo ’libPessoal.a’, podeusar-se o comando ’nm’ (lista dos sımbolos):

nm libPessoal.a

Para mais informacoes sobre estes programas ver ’FreeBSDMan Pages’ (em ’Bibliografia’ no site da cadeira).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 11: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Como Criar uma Biblioteca (Library)

Uma vez criado o arquivo ’libPessoal.a’, devemos criar umındice contendo todos os sımbolos (nomes, funcoes, variaveis,etc.) definidos nos ficheiros do arquivo:

ranlib libPessoal.aisto acelera o processo de ’linking’ da biblioteca e permitir asfuncoes nela contidas chamarem-se umas as outrasindependentemente da sua posicao no arquivo.

Note-se que as duas operacoes anteriores podem ser reunidasnuma so acrescentando a opcao ’s’ aos qualificadores de ’ar’:

ar rsv libPessoal.a Utils.o UtilsVect.o

Para visualizar o conteudo do arquivo ’libPessoal.a’, podeusar-se o comando ’nm’ (lista dos sımbolos):

nm libPessoal.a

Para mais informacoes sobre estes programas ver ’FreeBSDMan Pages’ (em ’Bibliografia’ no site da cadeira).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 12: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Em termos genericos uma biblioteca e um ficheiro que contemoutros ficheiros que, por sua vez, tem codigo compilado. E,estando indexada, e facil encontrar os sımbolos nela definidos.

Podemos classificar as bibliotecas em dois grupos:

Bibliotecas com ligacao estatica (’static libraries’ – ”.a”): naoperacao de link de um programa, o codigo da biblioteca ficaintegrado no ficheiro executavel.Bibliotecas com ligacao partilhada (’shared libraries’ – ”.so”):durante o link, e verificado se todos os sımbolos exigidos estaodefinidos no codigo do utilizador ou nas bibliotecas invocadas.Ao executar o programa, o sistema verifica as bibliotecasassociadas e liga-as ao programa (’dynamic loader’).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 13: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Em termos genericos uma biblioteca e um ficheiro que contemoutros ficheiros que, por sua vez, tem codigo compilado. E,estando indexada, e facil encontrar os sımbolos nela definidos.

Podemos classificar as bibliotecas em dois grupos:

Bibliotecas com ligacao estatica (’static libraries’ – ”.a”): naoperacao de link de um programa, o codigo da biblioteca ficaintegrado no ficheiro executavel.Bibliotecas com ligacao partilhada (’shared libraries’ – ”.so”):durante o link, e verificado se todos os sımbolos exigidos estaodefinidos no codigo do utilizador ou nas bibliotecas invocadas.Ao executar o programa, o sistema verifica as bibliotecasassociadas e liga-as ao programa (’dynamic loader’).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 14: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Em termos genericos uma biblioteca e um ficheiro que contemoutros ficheiros que, por sua vez, tem codigo compilado. E,estando indexada, e facil encontrar os sımbolos nela definidos.

Podemos classificar as bibliotecas em dois grupos:

Bibliotecas com ligacao estatica (’static libraries’ – ”.a”): naoperacao de link de um programa, o codigo da biblioteca ficaintegrado no ficheiro executavel.

Bibliotecas com ligacao partilhada (’shared libraries’ – ”.so”):durante o link, e verificado se todos os sımbolos exigidos estaodefinidos no codigo do utilizador ou nas bibliotecas invocadas.Ao executar o programa, o sistema verifica as bibliotecasassociadas e liga-as ao programa (’dynamic loader’).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 15: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Em termos genericos uma biblioteca e um ficheiro que contemoutros ficheiros que, por sua vez, tem codigo compilado. E,estando indexada, e facil encontrar os sımbolos nela definidos.

Podemos classificar as bibliotecas em dois grupos:

Bibliotecas com ligacao estatica (’static libraries’ – ”.a”): naoperacao de link de um programa, o codigo da biblioteca ficaintegrado no ficheiro executavel.Bibliotecas com ligacao partilhada (’shared libraries’ – ”.so”):durante o link, e verificado se todos os sımbolos exigidos estaodefinidos no codigo do utilizador ou nas bibliotecas invocadas.Ao executar o programa, o sistema verifica as bibliotecasassociadas e liga-as ao programa (’dynamic loader’).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 16: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Na maioria das utilizacoes, em que existe codigo comum adiversos programas, usam-se ’shared libraries’, excepto quando,por razoes de seguranca ou emergencia, se quer garantir ofuncionamento correcto dos programas.

Para criar uma biblioteca partilhada (’shared library’)chamada ’libPessoal.so’ a partir dos dois ficheiros objecto (’.o’)criados faz-se:

gcc - -share -o libPessoal.so Utils.o UtilsVect.o

Dependendo dos sistemas, podera ou nao ser feita a compilacaodos ficheiros ’.c’ com a opcao ’-fPIC’ (position-independentcode).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 17: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Na maioria das utilizacoes, em que existe codigo comum adiversos programas, usam-se ’shared libraries’, excepto quando,por razoes de seguranca ou emergencia, se quer garantir ofuncionamento correcto dos programas.

Para criar uma biblioteca partilhada (’shared library’)chamada ’libPessoal.so’ a partir dos dois ficheiros objecto (’.o’)criados faz-se:

gcc - -share -o libPessoal.so Utils.o UtilsVect.o

Dependendo dos sistemas, podera ou nao ser feita a compilacaodos ficheiros ’.c’ com a opcao ’-fPIC’ (position-independentcode).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 18: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Na maioria das utilizacoes, em que existe codigo comum adiversos programas, usam-se ’shared libraries’, excepto quando,por razoes de seguranca ou emergencia, se quer garantir ofuncionamento correcto dos programas.

Para criar uma biblioteca partilhada (’shared library’)chamada ’libPessoal.so’ a partir dos dois ficheiros objecto (’.o’)criados faz-se:

gcc - -share -o libPessoal.so Utils.o UtilsVect.o

Dependendo dos sistemas, podera ou nao ser feita a compilacaodos ficheiros ’.c’ com a opcao ’-fPIC’ (position-independentcode).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 19: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Na maioria das utilizacoes, em que existe codigo comum adiversos programas, usam-se ’shared libraries’, excepto quando,por razoes de seguranca ou emergencia, se quer garantir ofuncionamento correcto dos programas.

Para criar uma biblioteca partilhada (’shared library’)chamada ’libPessoal.so’ a partir dos dois ficheiros objecto (’.o’)criados faz-se:

gcc - -share -o libPessoal.so Utils.o UtilsVect.o

Dependendo dos sistemas, podera ou nao ser feita a compilacaodos ficheiros ’.c’ com a opcao ’-fPIC’ (position-independentcode).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 20: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 21: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 22: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 23: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 24: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 25: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 26: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Bibliotecas (’Library’)

Na compilacao e indica a biblioteca com ’-l’ e o nome dabiblioteca sem o ’lib’;

Caso a biblioteca nao esteja numa das pastas de bibliotecas dosistema (por exemplo, ’/usr/lib/’, em unix), tem de se indicar apasta em que ela se encontra, ’-Lpasta’, assim,

gcc -o prog 01 prog 01.c -L./ -lPessoal -lm

Para a execucao do programa e agora necessario incluir apasta em que esta a biblioteca na lista das pasta em que osistema ira procurar bibliotecas.

Tal pode ser feito acrescentando a pasta em que ela esta avariavel de ambiente ’LD LIBRARY PATH’:

export LD LIBRARY PATH =¨LD LIBRARY PATH:./¨

Finalmente, pode executar-se o programa.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 27: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Criacao de uma ’Makefile’

Por vezes a compilacao e a ’linkagem’ sao operacoes queincluem um conjunto complexo de operacoes, por isso, eextremamente conveniente utilizar instrumentos queexecutem correctamente essas tarefas. Em ’unix’ existemdiversas ferramentas capazes de executar aquelas tarefas. Aquiiremos usar uma das mais comuns, o comando ’make’.

O comando ’make’ (sem mais argumentos) le o ficheiro denome ’Makefile’ e executa o conjunto de instrucoesassociadas a etiqueta (’label’) ’all:’.

Uma ’Makefile’ e organizada por tarefas especıficas,chamadas comandos, enderecadas pelas suas etiquetas.

Os comandos sao separados entre si por linhas vazias.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 28: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Criacao de uma ’Makefile’

Por vezes a compilacao e a ’linkagem’ sao operacoes queincluem um conjunto complexo de operacoes, por isso, eextremamente conveniente utilizar instrumentos queexecutem correctamente essas tarefas. Em ’unix’ existemdiversas ferramentas capazes de executar aquelas tarefas. Aquiiremos usar uma das mais comuns, o comando ’make’.

O comando ’make’ (sem mais argumentos) le o ficheiro denome ’Makefile’ e executa o conjunto de instrucoesassociadas a etiqueta (’label’) ’all:’.

Uma ’Makefile’ e organizada por tarefas especıficas,chamadas comandos, enderecadas pelas suas etiquetas.

Os comandos sao separados entre si por linhas vazias.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 29: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Criacao de uma ’Makefile’

Por vezes a compilacao e a ’linkagem’ sao operacoes queincluem um conjunto complexo de operacoes, por isso, eextremamente conveniente utilizar instrumentos queexecutem correctamente essas tarefas. Em ’unix’ existemdiversas ferramentas capazes de executar aquelas tarefas. Aquiiremos usar uma das mais comuns, o comando ’make’.

O comando ’make’ (sem mais argumentos) le o ficheiro denome ’Makefile’ e executa o conjunto de instrucoesassociadas a etiqueta (’label’) ’all:’.

Uma ’Makefile’ e organizada por tarefas especıficas,chamadas comandos, enderecadas pelas suas etiquetas.

Os comandos sao separados entre si por linhas vazias.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 30: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Criacao de uma ’Makefile’

Por vezes a compilacao e a ’linkagem’ sao operacoes queincluem um conjunto complexo de operacoes, por isso, eextremamente conveniente utilizar instrumentos queexecutem correctamente essas tarefas. Em ’unix’ existemdiversas ferramentas capazes de executar aquelas tarefas. Aquiiremos usar uma das mais comuns, o comando ’make’.

O comando ’make’ (sem mais argumentos) le o ficheiro denome ’Makefile’ e executa o conjunto de instrucoesassociadas a etiqueta (’label’) ’all:’.

Uma ’Makefile’ e organizada por tarefas especıficas,chamadas comandos, enderecadas pelas suas etiquetas.

Os comandos sao separados entre si por linhas vazias.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 31: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:

Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.c

E sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 32: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.

Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.c

E sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 33: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;

As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.c

E sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 34: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.c

E sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 35: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.c

E sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 36: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.c

E sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 37: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Criacao de uma ’Makefile’

Assim, cada comando e constituıdo por:Uma etiqueta (’label’): sequencia de caracteres que comecano inıcio da linha e termina em ’:’.Depois dos ’:’ devem ser colocadas as sequencias de comandosque o devem anteceder, ou que decidem da sua execucao;As tarefas a executar seguem-se, sem linhas em branco, umapor linha e iniciadas por um ’TAB’.

Para alem dos comandos podem declarar-se variaveis quepermitem definir os comandos de um modo conveniente. Essasvariaveis definem-se atraves do sinal ’=’. Exemplos:

CC = gccLINK FLAGS = -lm

A utilizacao das variaveis faz-se do seguinte modo:

$(CC) $(CFLAGS) -c UtilsVect.cE sempre uma boa regra definir uma variavel associada a cadaum dos comandos de unix a utilizar.

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 38: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 39: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 40: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 41: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 42: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 43: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)

Page 44: Programação Mestrado em Engenharia Física Tecnológica · 15a Aula - Bibliotecas e ’make’. Programa˘c~ao Mestrado em Engenharia F sica Tecnol ogica Samuel M. Eleut erio sme@tecnico.ulisboa.pt

Funcoes com Numero Variavel de Argumentos(’Prog29 01e2.c’)

Por vezes, ha necessidade de escrever funcoes com um numerovariavel de argumentos (por exemplo, a funcao ’printf’).

A definicao deste tipo de funcoes requer macros que seencontram definidos em ’stdarg.h’.

A sua declaracao requer varios passos:

1 Declarar o prototipo da funcao com os argumentos explıcitos ereticencias nos implıcitos;

2 Inicializar ’vlist’ com a funcao ’va start’: va start (vlist, darg).Em que ’darg’ representa o argumento antes das reticencias.

3 O processamento da lista faz-se usando a funcao ’va arg’ naforma va arg (vlist, tipo), em que ’tipo’ designa o tipo davariavel a extrair;

4 Quando toda a lista ’vlist’ foi processada tem de se usar afuncao ’va end’ na forma va end (vlist).

Mestrado em Engenharia Fısica Tecnologica Programacao - 15a Aula (05.11.2018)