A Biblioteca C GNU/Usando a biblioteca: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Nova página: == Arquivos de Cabeçalho == As bibliotecas para uso em programas escritos em C consistem em duas partes: arquivos de cabeçalho que definem tipos e macros e declaram variáveis e fun...
 
Sem resumo de edição
Linha 24:
 
Na verdade, você não tem que incluir um arquivo de cabeçalho para usar uma função que ele declara; você mesmo pode declarar a função explicitamente, de acordo com as especificações deste livro. Mas geralmente é melhor incluir o arquivo de cabeçalho, pois ele pode definir tipos e macros que não estão disponíveis de outra forma. Além disso, arquivos de cabeçalho definem substituição de macros de modo mais eficiente para algumas funções. E agindo deste modo, você tem certeza de que seu código terá a declaração correta.
 
== Definições de Macros de Funções ==
 
Se nós descrevermos algo como uma função neste livro, ela também pode ter uma definição de macro. Isto normalmente não tem nenhum efeito no modo com que o seu programa funciona. Os equivalentes em macros das funções de biblioteca avaliam os argumentos exatamente uma vez, do mesmo modo que uma chamada de função faria. A principal razão para estas definições de macro é que algumas vezes eles podem produzir expanções nas linhas que são consideravelmente mais rápidos do que seria uma função de verdade.
 
A coleta do endereço de uma função de biblioteca funciona mesmo que ela seja definida como macro. Isso ocorre porque, neste contexto, o nome da função não é seguido pelo parênteses esquerdo que é sintaticamente necessário para reconhecer uma chamada a uma macro.
 
Você ocasionalmente pode querer evitar usar uma definição de macro para uma função. Talvez para tornar o seu programa mais fácil de depurar.Existem duas formas de fazer isso:
 
* Você pode evitar uma definição de macro em uma ocasião específica ao fechar o nome da função entre parênteses. Desta forma, o nome da função não aparece em um contexto sintático onde é reconhecido como uma chamada a macro.
 
* Você pode suprimir qualquer definição de macro de um arquivo de código-fonte inteiro usando a diretiva de pré-processamento "#undef", a menos que isso seja desaconselhado na descrição da facilidade em questão.
 
Por exemplo, suponha que o arquivo de cabeçalho '''stdlib.h''' declare uma função chamada '''abs''' com
 
extern int abs (int);
 
e também forneça uma definição de macro para '''abs'''. Então em:
 
#include <stdlib.h>
int f (int *i) { return abs (++*i); }
a referência para '''abs''' pode se referir tanto à macro quanto à função. Por outro lado, em cada um dos seguintes exemplos a referência é para uma função, e não para um macro.
#include <stdlib.h>
int g (int *i) { return (abs) (++*i); }
 
#undef abs
int h (int *i) { return abs (++*i); }
 
Como definições de macro duplicam o funcionamento da função do mesmo modo que a verdadeira versão da função, geralmente não há necessidade para qualquer um destes métodos. De fato, remover definições de macro geralmente só deixam o seu programa mais lento.