Cabeçalhos Padrão – Standard Headers em Linguagem C

Cabeçalhos Padrão na Linguagem C

Cada função da biblioteca padrão da linguagem C é declarada em um ou mais Cabeçalhos Padrão (“Standard Headers“, ou apenas “headers“). Estes contém também definições de tipos e macros que são fornecidas pela linguagem.

Os cabeçalhos padrão são conhecidos também como Arquivos de Cabeçalho, poiso conteúdo de cada cabeçalho é, no geral, armazenado em um arquivo, com a extensão .h.

A linguagem C padrão atual define 24 arquivos de cabeçalho padrão, listados a seguir:

assert.h inttypes.h signal.h stdlib.h
complex.h iso646.h stdarg.h string.h
ctype.h limits.h stdbool.h tgmath.h
errno.h locale.h stddef.h time.h
fenv.h math.h stdint.h wchar.h
float.h setjmp.h stdio.h wctype.h

Como usar os arquivos de cabeçalho

Adicionamos o conteúdo de um arquive de cabeçalho (header) a um arquivo de código-fonte usando a diretiva #include, preferencialmente incluída logo no início do arquivo.

Por exemplo, suponha que precisamos incluir funções matemáticas presentes no arquivo math.h em um programa. Para tal, usamos a declaração a seguir:

#include <math.h>

Note que não finalizamos a declaração com um ponto-e-vírgula (;). Essa declaração nos permitirá usar uma série de funções matemáticas definidas no cabeçalho math.h, de forma simples e eficiente.

Descrevendo os arquivos de cabeçalho

A seguir vamos descrever sucintamente cada um dos arquivos de cabeçalho listados na tabela anterior, e a partir do próximo artigo descreveremos também as funções, tipos e macros por eles definidas.

assert.h

Define a macro assert(), a qual testa se o valor de uma expressão é diferente de zero.

complex.h

Contém protótipos de funções matemáticas com números complexos e macros relacionadas

ctype.h

Este cabeçalho contém declarações de funções usadas para converter e classificar caracteres únicos.

errno.h

Declara o identificador errno para uso como uma variável de status com o tipo int. Várias funções configuram o errno para um valor que indica o tipo de erro encontrado durante a execução.

fenv.h

Contém todas as declarações que podem ser usadas ao acessar um ambiente de ponto-flutuante, o qual fornece variáveis de sistema que permitem que os programas lidem de forma simplificada e flexível com modos de controle e exceções de ponto flutuante.

float.h

Declara macros que descrevem a faixa de valores, a precisão, e outras propriedades dos tipos float, double e long double.

inttypes.h

Esse header inclui o cabeçalho stdint.h, e mais extensões dele. O cabeçalho stdint.h define os tipos inteiros com larguras de bits especificadas, incluindo os tipos intmax_t e uintmax_t, que representam os maiores tipos inteiros implementados.

iso646.h

Define onze macros que podem ser usadas como sinônimos para os operadores lógicos e bit a bit da linguagem C. As macros são:

Macro Significado
and &&
or ||
not !
bitand &
bitor |
xor ^
compl ~
and_eq &=
or_eq |=
xor_eq ^=
not_eq !=

limits.h

Contém macros que representam o menor e o maior valor representável em cada tipo inteiro.

locale.h

Este cabeçalho declara duas funções, setlocale() e localeconv(), a estrutura lconv, a macro NULL para constantes de ponteiro nulas, e as seguintes macros com nomes iniciados em LC_ para as categorias de informações de localização (locale):

  • LC_ALL
  • LC_COLLATE
  • LC_CTYPE
  • LC_MONETARY
  • LC_NUMERIC
  • LC_TIME

math.h

O cabeçalho math.h declara funções matemáticas para números de ponto-flutuante, e seus tipos e macros relacionados. (As funções matemáticas para números inteiros são declaradas em stdlib.h).

setjmp.h

Declara a função longjmp(), e define o tipo array jmp_buf, além da macro setjmp().

A função setjmp() salva o ambiente de execução atual, incluindo ao menos o registrador momentâneo e os valores da pilha, em uma variável de tipo jmp_buf. Assim, a função setjmp() marca um ponto no programa, para o qual se pode saltar a qualquer momento fazendo uma chamada à função longjmp().
Essas funções juntas permitem, desta forma, programar uma espécie de “goto” no programa.

signal.h

Esse cabeçalho declara as funções raise() e signal(), assim como macros relacionadas e o tipo inteiro sig_atomic_t.

Essas funções permitem tratar sinais por meio de um manipulador de sinais (signal handler). Um manipulador de sinais é uma função que é automaticamente executada quando o programa recebe um determinado sinal do ambiente do sistema operacional.

Cada tipo de sinal que os programas podem receber é identificado por um número de sinal. O cabeçalho signal.h define macros de tipo int que designam os tipos de sinais, sendo que a macros de tipo de sinal requeridas são as seguintes:

  • SIGABRT
  • SIGFPE
  • SIGILL
  • SIGINT
  • SIGSEGV
  • SIGTERM

Vamos explicar com detalhes o significado e aplicação dessas macros em um artigo específico.

stdarg.h

Define um tipo e quatro macros para uso no acesso a argumentos opcionais em funções que os suportam.

stdbool.h

Este cabeçalho define as seguintes macros:

  • bool – Sinônimo para o tipo _Bool
  • true – A constante de valor 1
  • false – A constante de valor 0
  • __bool_true_false_are_defined – A constante de valor 1

stddef.h

Este cabeçalho define três tipos e duas macros utilizadas em todos os tipos de programas. Os tipos são:

  • ptrdiff_t – Tipo inteiro com sinal que representa a diferença entre dois ponteiros
  • size_t – Tipo inteiro sem sinal usado para representar o resultado de operações sizeof.
  • wchar_t – Tipo inteiro grande o suficiente para armazenar qualquer código no maior grupo de caractere estendido que a implementação suportar.

Além dos tipos citados, também são implementadas as duas macros seguintes:

  • NULL – Representa uma constante de ponteiro nula.
  • offsetof( tipo_estrutura, memb) – Fornece uma constante inteira com o tipo size_t cujo valor é o número de bytes entre o início de uma estrutura e o início de seu membro memb.

stdint.h

Cabeçalho que define tipos inteiros com tamanhos de bit específicos, e macros que indicam as faixas de valor desses e de outros tipos.

Vamos estudar o cabeçalho stdint.h com mais detalhes em outro artigo, devido à sua maior complexidade.

stdio.h

Contém declarações de todas as funções básicas para entrada e saída, assim com definições de tipos e macros relacionadas

Vamos estudar o cabeçalho stdio.h com mais detalhes em outro artigo, devido à sua maior complexidade.

stdlib.h

Cabeçalho que declara funções de utilidade geral para diversos propósitos, listados a seguir:

  • Geração de números aleatórios
  • Gerenciamento de memória
  • Conversão de strings de números em valores numéricos binários
  • Aritmética de números inteiros
  • Busca e classificação
  • Comunicação com o sistema operacional da máquina
  • Conversão de caracteres multibyte para wide-characters (tipo caractere com tamanho maior que 8 bits; caracteres largos*)

Vamos estudar as funções, tipos e macros do cabeçalho stdlib.h com mais detalhes em outro artigo, devido à sua maior complexidade.

string.h

O cabeçalho string.h declara diversas funções para manipulação de strings, além de funções que operam em arrays de bytes.

Os nomes das funções aqui declaradas começam com str ou com mem, como as funções strcpy() e memcpy().

Além disso, esse cabeçalho também declara o tipo size_t e a macro NULL, que representa uma constante de ponteiro nula.

tgmath.h

Este cabeçalho inclui os cabeçalhos math.h e complex.h, e define macros de tipo genéricas.

time.h

Cabeçalho que declara funções padrão, tipos e macros para manipulação de informações de data e hora. Também declara quatro tipos:

  • size_t – Tipo inteiro sem sinal usado para representar o resultado de operações sizeof.
  • clock_t – Tipo aritmético retornado pela função clock()
  • time_t – Tipo aritmético retornado pelas funções timer() e mktime()
  • struct_tm – Os membros dessa estrutura representam uma data ou uma hora, divididas em segundos, minutos, horas, dia do mês, e assim por diante.

O cabeçalho time.h também define a macro CLOCKS_PER_SEC, que é uma expressão constante do tipo clock_t. Ela permite obter o tempo de uso da CPU pelo programa em segundos, dividindo-se o valor de retorno da função clock() por CLOCKS_PER_SEC.

wchar.h

O cabeçalho wchar.h declara funções para strings largas, que são strings de caracteres largos, do tipo wchar_t. Essas funções são similares às declaradas pelos cabeçalhos stdio.h, stdlib.h, string.h e time.h, que declaram funções para processamento de strings de caractere de um byte.

Além disso, o cabeçalho wchar.h também declara funções para realizar a conversão de caracteres multibyte* para caracteres largos*, e vice-versa.

wctype.h

Este cabeçalho declara funções para classificar e converter caracteres largos. Estas funções são análogas às funções para caracteres de byte declaradas no cabeçalho ctype.h. Além disso, também declara funções de conversão e classificação de caracteres largos extensíveis.

*Observações: 

Um caractere multibyte é um caractere composto por sequências de um ou mais bytes. Cada sequência de bytes representa um único caractere no conjunto de caracteres estendido. Os caracteres multibyte são usados nos conjuntos de caracteres como Kanji.

Os caracteres largos são códigos de caracteres multilíngues que sempre têm 16 bits de largura. O tipo para constantes de caractere é char; para caracteres largos, o tipo é wchar_t. Como os caracteres largos são sempre de tamanho fixo, usar caracteres largos simplifica a programação com conjuntos de caracteres internacionais.

Fonte: MSDN

 

Sobre Fábio dos Reis (1192 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

2 Comentários em Cabeçalhos Padrão – Standard Headers em Linguagem C

  1. ALEXSANDRO NOGUEIRA REIS // 14/11/2018 em 12:07 // Responder

    Prezados,

    Boa tarde. Vocês disponibilizam cursos em video? Estou interessado em fazer um curso de programação. Qual é o custo?

Escreva um comentário

Seu e-mail não será divulgado


*