[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Re: chamada de funcao
- Subject: Re: chamada de funcao
- From: Nelson Posse Lago <lago@that.com.br>
- Date: Tue, 26 Mar 2002 18:23:33 -0300
On Tue, Mar 26 2002 at 05:43:10pm +0000, Andre Thomas Kowaltowski wrote:
> Quando tentamos montar o arquivo executavel o gcc reclama de "undefined
> reference to 'produto_escalar'" que deveria ser a funcao chamada. Como a
> funcao em c deve chamar a funcao em linguagem de montagem? No arquivo em
> linguagem de montagem basta colocar um rotulo com o nome da "funcao"
> para identificar a funcao? (com o underscore antes ou nao...)
Bom, primeiro e' bom lembrar que, em C, sempre e' preciso declarar uma
funcao antes de usa-la; voce nao precisa *definir* a funcao (ou seja, nao
precisa escrever o codigo que implementa a funcao), mas precisa
*declara-la* (ou seja, dizer "qual e' a cara" da funcao). No caso da
funcao produto_escalar, voce precisa declara-la de acordo com o enunciado
do EP:
long int produto_escalar (unsigned short, short*, short*);
Isso diz ao compilador: essa funcao existe em algum lugar, entao deixe
tudo preparado para que ela possa ser "enxertada" no lugar certo. Depois
que voce compila os diversos arquivos do seu progrma, o ligador (linker)
encontra todas as funcoes e todas as chamadas a funcoes e faz tudo "cair
no lugar certo".
Gracas a isso voce pode implementar o seu programa em "pedacos", cada
pedaco em um arquivo diferente, e compilar cada arquivo separadamente.
Assim, se voce esta' mexendo no codigo do Mozilla e modifica um arquivo,
apenas esse arquivo precisa ser recompilado e tudo tem que ser "linkado"
novamente; isso provavelmente leva uns 2 minutos, ao inves de ~5h que e' o
tempo para compilar o mozilla inteiro.
Quanto ao arquivo em linguagem de montagem, se entendi a coisa direitinho,
a ideia e' que voce precisa dizer que existe uma "coisa" nesse arquivo
chamada produto_escalar:
.globl produto_escalar
E que essa "coisa" e' uma funcao:
.type produto_escalar,@function
E, finalmente, definir a funcao:
produto_escalar:
...codigo...
Essas sao as informacoes que o linker vai usar para colocar a chamada `a
sua funcao em linguagem de montagem "dentro" da funcao "main" (em C).
Ate' +
Nelson