C Glossário
Os termos que aparecem no guia, em ordem alfabética, explicados em uma ou duas frases, cada um com o link para a aula em que é explicado com calma. Termos em inglês aparecem com a tradução. Quando o nome em inglês é o mais usado no dia a dia (como buffer ou malloc), ele é a entrada principal.
Dica
Use Ctrl+F no navegador para achar um termo, ou o índice de letras abaixo. Para consultas rápidas, veja também as referências de printf e scanf, de string.h, de tipos e limites, de operadores e de erros comuns.
A · B · C · D · E · F · G · H · I · L · M · N · O · P · R · S · T · U · V · W
A
- abort
- Função do
stdlib.hque encerra o programa na hora, sem arrumar nada. No terminal apareceAbortado (imagem do núcleo gravada)e o código de saída é 134. É o que oassertchama quando falha. Veja: Testes (assert) e Encerrar o Programa. - Alocação dinâmica
- Pedir memória enquanto o programa roda, no heap, com
malloc,callocourealloc, em vez de declarar uma variável comum. Toda memória pedida assim tem de ser devolvida comfree. Veja: malloc e free. - argc e argv
- Os parâmetros da forma
int main(int argc, char *argv[]): quantos argumentos vieram na linha de comando (argument count) e a lista deles, como textos (argument vector).argv[0]é o nome do programa. Veja: Argumentos da Linha de Comando. - Argumento
- O valor que você entrega a uma função quando a chama: em
soma(2, 3), os argumentos são2e3. Do lado de dentro, eles chegam nos parâmetros. Veja: Parâmetros. - Array (vetor)
- Uma fileira de variáveis do mesmo tipo, lado a lado na memória, com tamanho fixo:
int notas[3];. O primeiro elemento é o de índice 0. O C não confere se o índice passou do fim. Veja: Arrays e Arrays Multidimensionais. - ASCII
- A tabela que dá um número a cada letra, algarismo e símbolo:
'A'é 65,'a'é 97,'0'é 48. Tem 128 posições e nenhuma letra acentuada. Veja: Caracteres (char). - assert
- Macro do
assert.hque confere uma certeza do programador enquanto o programa roda:assert(qtd > 0);. Se for falsa, mostra a condição, o arquivo e a linha e aborta. É desligada com-DNDEBUG. Veja: Testes (assert). - Atributo C23
- Uma etiqueta entre colchetes duplos que dá uma informação a mais ao compilador:
[[nodiscard]](não ignore o retorno),[[maybe_unused]],[[deprecated]],[[fallthrough]]. Veja: Atributos. - Atribuição
- Guardar um valor numa variável que já existe, com
=:idade = 31;. Não confunda com a comparação==. Os atalhos+=,-=,*=fazem a conta e guardam. Veja: Variáveis e Operadores de Atribuição. - Aviso (warning)
- Mensagem do compilador sobre algo suspeito que não impede o programa de ser criado, como uma variável não usada ou um formato errado no
printf. Quase sempre aponta um defeito real; ligue os avisos com-Wall -Wextra. Veja: Compilar com gcc e Avisos.
B
- Biblioteca padrão
- As funções que vêm com todo compilador C e fazem parte do padrão ISO, divididas em cabeçalhos:
stdio.h(entrada e saída),string.h,stdlib.h,math.h… No Linux, quem as implementa é a glibc; no editor do guia, a wasi-libc. Veja: O Editor do Guia e Bibliotecas. - Bit e byte
- O bit é a menor informação do computador: 0 ou 1. Um byte são 8 bits e guarda um número de 0 a 255; é a "gaveta" de memória que tem endereço. Um
charocupa 1 byte; umint, 4. Veja: Memória e Endereços e Operadores de Bits. - Bloco
- Um trecho de código entre chaves
{ }. As variáveis criadas dentro de um bloco só existem até a}que o fecha. Veja: Sintaxe e Escopo. - bool
- O tipo que só guarda
true(verdadeiro, 1) oufalse(falso, 0). No C23 é palavra-chave; no C99 a C17, precisa de#include <stdbool.h>. Veja: Booleanos. - break
- Sai na hora do laço (
for,while,do while) ou doswitchem que está. Num laço dentro de outro, só sai do de dentro. Veja: break e continue. - Buffer
- Uma área de memória usada para guardar dados de passagem, como o array onde o
fgetspõe a linha lida. A saída doprintftambém passa por um buffer antes de chegar à tela. Veja: fgets. - Buffer overflow (estouro de buffer)
- Escrever além do fim de um array, invadindo a memória vizinha:
scanf("%s", nome)sem limite,strcpysem espaço. É comportamento indefinido e uma das falhas de segurança mais antigas. Veja: Segurança.
C
- C23 (e C89, C99, C11, C17)
- As versões do padrão da linguagem, com o ano em que saíram. O guia ensina o C23 (
-std=c23), que trouxeboolcomo palavra-chave,nullptr,constexpr,typeof, atributos e#embed. Veja: Versões do C e Novidades do C99 ao C23. - Cabeçalho (header, arquivo
.h) - Arquivo com declarações (protótipos, structs, constantes) que outros arquivos incluem com
#include. Os da biblioteca padrão vão entre< >(<stdio.h>); os seus, entre aspas ("datas.h"). Veja: Arquivos .h e .c. - Callback
- Uma função passada para outra função, por um ponteiro para função, para ser chamada lá dentro. O exemplo clássico é a função de comparação do
qsort. Veja: Ponteiros para Funções. - calloc e realloc
callocreserva memória para N itens e a enche de zeros;reallocmuda o tamanho de um bloco já reservado (e pode mudá-lo de lugar). Veja: calloc e realloc e Array que Cresce.- Campo de bits
- Um campo de struct com largura em bits, escrita depois de dois-pontos:
unsigned int ligado : 1;. Guarda vários valores pequenos num só inteiro. Veja: Campos de Bits. - Caractere nulo (
'\0') - O caractere de código 0, que marca o fim de uma string.
"Ana"ocupa 4 bytes:'A','n','a'e'\0'. Sem ele, as funções de texto continuam lendo a memória vizinha. Veja: Strings. - Cast (conversão explícita)
- Pedir uma conversão de tipo escrevendo o tipo entre parênteses:
(double) soma / n. Veja: Conversão de Tipos. - char
- O tipo de um caractere, escrito entre aspas simples:
'A'. Ocupa 1 byte e, por dentro, é um número pequeno (o código da tabela ASCII).'ç'não cabe: em UTF-8 são 2 bytes. Veja: Caracteres (char). - Clang
- Um compilador de C (do projeto LLVM), alternativa ao gcc, com as mesmas opções principais. É o compilador do editor do guia e o "gcc" do macOS. As mensagens de erro dizem a mesma coisa com outras palavras. Veja: O Editor do Guia e Compilar com gcc.
- CMake
- Ferramenta que descreve como montar um projeto (arquivo
CMakeLists.txt) e gera os arquivos para omakeou o Ninja:cmake -B buildecmake --build build. Veja: CMake. - Código de saída (exit code)
- O número que o programa devolve ao terminar, visto com
echo $?:0= sucesso. É o valor doreturndomainou doexit. Quando o sistema mata o programa, é 128 + o número do sinal: 139 = falha de segmentação, 134 = abortado. Veja: Olá, Mundo e Encerrar o Programa. - Código-fonte
- O texto que você escreve (
ola.c), que pessoas leem e o compilador traduz para um executável. Veja: Como o C Vira Programa. - Comentário
- Texto que o compilador ignora, escrito para pessoas:
// até o fim da linhaou/* em bloco */. Veja: Comentários. - Compilação condicional
- Trechos de código que só existem se um nome estiver definido, escolhidos pelo pré-processador antes da compilação:
#ifdef,#if,#else,#endife a opção-Ddo gcc. Veja: Compilação Condicional. - Compilador
- O programa que traduz o código-fonte em código de máquina: no guia, o gcc (nos terminais) e o Clang (no editor). Veja: Como o C Vira Programa e Compilar com gcc.
- Comportamento indefinido (undefined behavior, UB)
- O que acontece quando o programa quebra uma regra do C que o compilador não é obrigado a conferir: índice fora do array, variável sem valor inicial, estouro de
int, ponteiro solto. O padrão não diz o que acontece: pode "funcionar", dar lixo ou travar, e mudar com-O2. Veja: Comportamento Indefinido. - const
- Marca uma variável que não pode ser mudada depois de criada:
const double PI = 3.14159;. Num parâmetro ponteiro (const char *s), promete que a função não muda o que é apontado. Veja: Constantes e const e Ponteiros. - constexpr C23
- Uma constante de verdade, com valor conhecido na compilação, que pode ser usada até no tamanho de um array:
constexpr int MAX = 10;. Veja: Constantes. - continue
- Pula o resto da volta atual do laço e passa para a próxima. Veja: break e continue.
- Conversão implícita
- A conversão que o C faz sozinho, sem você pedir: guardar
3.9numintvira3; somarintcomdoubledádouble. O-Wconversionavisa quando ela perde informação. Veja: Conversão de Tipos. - Curto-circuito
- O
&&e o||param de calcular assim que sabem a resposta: emp != NULL && *p > 0, sepfor nulo, o*pnem é lido. Veja: Operadores Lógicos.
D
- Declaração × definição
- Declarar é anunciar que um nome existe e qual é o seu tipo (
int dobro(int x);); definir é criar de verdade (a função com o corpo, a variável com a memória). Um nome pode ser declarado várias vezes, mas definido uma só. Veja: Arquivos .h e .c e Protótipos. - Depurador (debugger)
- Programa que roda o seu passo a passo, para você ver as variáveis e achar a linha de um erro. No guia, o
gdb; compile com-g. Veja: Depurar com gdb. - Desreferenciar
- Ir até o endereço guardado num ponteiro, com
*: sepaponta parax,*pé o própriox. Desreferenciar um ponteiro nulo dá falha de segmentação. Veja: Ponteiros e Ponteiro Nulo. - do while
- Laço que roda o bloco pelo menos uma vez e só depois confere a condição:
do { … } while (cond);. Bom para menus e para pedir de novo uma resposta inválida. Veja: do while. - double e float
- Os tipos de número com casas decimais (ponto flutuante).
doubletem cerca de 15 algarismos de precisão;float, cerca de 7. São aproximações:0.1 + 0.2não dá exatamente0.3. Veja: float e double.
E
- else e else if
- O caminho alternativo de um
if("senão") e a cadeia de várias alternativas, testadas em ordem até a primeira verdadeira. Veja: if e else e else if. - Endereço
- O número da "gaveta" de memória onde uma variável mora, obtido com
&:&idade. É o que oscanfrecebe e o que um ponteiro guarda. Mostra-se com%p. Veja: Memória e Endereços. - enum (enumeração)
- Um tipo com uma lista de constantes inteiras com nome:
enum cor { VERMELHO, VERDE, AZUL };(valem 0, 1 e 2). Veja: Enums e Constantes. - EOF (end of file, fim do arquivo)
- O valor especial (−1) que
getcharescanfdevolvem quando a entrada acaba (Ctrl+D no terminal, fim de um arquivo). Por isso ogetcharse guarda numint, e não numchar. Veja: Caracteres (char) e Entrada com scanf. - errno e perror
errnoé a variável onde as funções do sistema deixam o número do erro quando falham (ENOENT= arquivo não existe);perrormostra a frase correspondente:No such file or directory. Veja: errno e perror.- Escape (sequência de escape)
- Uma barra invertida seguida de uma letra, para escrever caracteres especiais num texto:
\n(nova linha),\t(tabulação),\"(aspas),\\(a própria barra),\0(o nulo). Veja: Novas Linhas e Escapes. - Escopo
- A parte do código onde um nome existe. Uma variável local só existe dentro da sua função (ou do seu bloco); uma global existe no arquivo inteiro. Veja: Escopo e Variáveis static.
- Estouro de inteiro (overflow)
- Quando uma conta passa do limite do tipo. Num
unsigned, ela "dá a volta" (definido); numintcom sinal, é comportamento indefinido:2147483647 + 1costuma dar-2147483648. Veja: Inteiros. - Estouro de pilha (stack overflow)
- Quando a pilha (8 MB no Linux) acaba, em geral por uma recursão que não para ou por um array local enorme. O programa morre com falha de segmentação. Veja: Pilha e Heap e Recursão.
- Executável
- O programa pronto para rodar, que o compilador cria a partir do código-fonte (
gcc ola.c -o olacriaola; sem-o,a.out). Só roda no sistema para o qual foi compilado. Veja: Olá, Mundo. - exit
- Função do
stdlib.hque encerra o programa de qualquer lugar, com um código de saída:exit(1);. Diferente doabort, ela esvazia os buffers e roda as funções doatexit. Veja: Encerrar o Programa. - extern
- Declara uma variável global que está definida em outro arquivo:
extern int contador;. Veja: static e extern.
F
- Falha de segmentação (segmentation fault)
- O sistema matou o programa porque ele mexeu numa memória que não é dele, como um ponteiro nulo. No terminal aparece
Falha de segmentação (imagem do núcleo gravada)e o código de saída é 139. Veja: Ponteiro Nulo e Depurar com gdb. - fgets
- Lê uma linha inteira, com espaços, sem passar do tamanho do array:
fgets(nome, sizeof nome, stdin). O\ndo Enter vem junto. É o substituto seguro dogets, que foi removido. Veja: Ler uma Linha (fgets). - FILE *, fopen e fclose
- Um arquivo aberto é representado por um
FILE *, devolvido pelofopen("notas.txt", "r")(ouNULL, se falhar) e fechado comfclose. Veja: Arquivos (fopen e fclose). - for
- Laço com as três partes numa linha: começo, condição e passo:
for (int i = 0; i < 10; i++). O preferido para repetir um número conhecido de vezes. Veja: for. - fread e fwrite
- Leem e gravam bytes "crus" num arquivo binário, como uma fotocópia da memória: um array de structs inteiro de uma vez. Veja: Arquivos Binários.
- free
- Devolve ao sistema a memória reservada com
malloc,callocourealloc. Depois dofree, o ponteiro não pode mais ser usado, e liberar duas vezes é erro. Veja: malloc e free. - fseek e ftell
- Mudam e informam a posição de leitura e escrita dentro de um arquivo aberto, como um marcador de páginas. Veja: Posição no Arquivo.
- Função
- Um bloco de código com nome, que recebe parâmetros e pode devolver um valor com
return:int dobro(int x) { return 2 * x; }. Todo programa C começa pela funçãomain. Veja: Funções. - Função pura
- Função que recebe tudo pelos parâmetros, devolve o resultado com
returne não faz mais nada (não lê o teclado, não imprime, não muda globais). É a mais fácil de testar. Veja: Testes (assert). - Função variádica
- Função que aceita um número variável de argumentos, como o
printf. Declara-se com...e lê-se comva_list,va_starteva_arg, dostdarg.h. Veja: Funções Variádicas.
G
- gcc
- O compilador C do projeto GNU, o mais usado no Linux. O comando padrão do guia é
gcc -std=c23 -Wall -Wextra arquivo.c -o programa. Veja: Compilar com gcc e Instalar no Linux. - gdb
- O depurador do projeto GNU:
break(parar numa linha),next,step,printebacktrace(onde o programa caiu). Veja: Depurar com gdb. - _Generic C11
- Escolhe uma expressão conforme o tipo de outra, na compilação. Serve para fazer macros que funcionam com vários tipos. Veja: _Generic.
- getchar e putchar
- Leem e escrevem um caractere:
int c = getchar();eputchar(c);. Veja: Caracteres (char) e Saída com printf. - Global (variável global)
- Variável declarada fora de qualquer função, visível no arquivo inteiro e viva durante todo o programa. Começa com zero. Use pouco: qualquer função pode mudá-la. Veja: Escopo e Variáveis static.
- goto
- Pula para um rótulo dentro da mesma função. Raro em código moderno; o uso aceito é sair de vários laços ou ir a um trecho de limpeza no fim da função. Veja: goto.
H
- Heap (monte)
- A região da memória de onde vêm os blocos do
malloc. É grande, e a memória fica lá até você chamarfree, mesmo depois que a função que a pediu terminou. Veja: Pilha e Heap. - Hexadecimal
- Números na base 16, com os algarismos 0 a 9 e as letras a a f:
0xff= 255. É como endereços e bits costumam ser mostrados (%x,%p). Veja: Inteiros e Operadores de Bits.
I
- Identificador
- O nome que você dá a uma variável, função ou tipo. Começa com letra ou
_, não pode ser palavra-chave, e maiúsculas e minúsculas são diferentes (Nota≠nota). Veja: Nomes de Variáveis. - if
- Executa um bloco só se a condição for verdadeira (diferente de zero):
if (nota >= 6) { … }. Veja: if e else. - #include
- Ordem do pré-processador que cola outro arquivo naquele ponto:
#include <stdio.h>traz as declarações doprintf. Veja: Pré-processador. - Include guard
- As linhas
#ifndef DATAS_H/#define DATAS_H/#endifem volta de um.h, para ele não ser incluído duas vezes no mesmo arquivo. Veja: Compilação Condicional e Arquivos .h e .c. - Índice
- A posição de um elemento num array, começando em 0: num
int v[5], os índices vão de 0 a 4. Usarv[5]é passar do fim. Veja: Arrays. - Inicializar
- Dar um valor à variável no momento em que ela é criada:
int total = 0;. Uma variável local sem valor inicial contém lixo. Veja: Variáveis. - inline
- Uma dica ao compilador para copiar o corpo de uma função pequena no lugar de cada chamada. Num
.h, usestatic inline. Veja: Funções inline. - int
- O tipo inteiro do dia a dia: 4 bytes no gcc do laboratório e no editor, de −2147483648 a 2147483647. Os parentes são
short,long,long longe as versõesunsigned. Veja: Inteiros e Tipos de Dados.
L
- Laço (loop, repetição)
- Um bloco que se repete enquanto uma condição for verdadeira:
while,do whileefor. Um laço cuja condição nunca fica falsa é um laço infinito. Veja: while, for e Laços Aninhados. - Ligador (linker,
ld) - A última etapa da compilação: junta os arquivos
.oe as bibliotecas num executável. Os erros dele (referência não definida para "soma", em inglêsundefined reference) aparecem quando falta uma função ou há duas iguais. Veja: Como o C Vira Programa e Vários Arquivos. - Lista ligada
- Uma sequência de nós criados com
malloc, em que cada um guarda um valor e um ponteiro para o próximo; o último aponta paraNULL. Cresce e encolhe sem copiar nada. Veja: Listas Ligadas. - Literal
- Um valor escrito direto no código:
42,3.14,'A',"Ana",0xff. Um literal de string não pode ser alterado. Veja: Inteiros e Strings. - long e long long
- Inteiros maiores que o
int. Olong longtem 8 bytes em todo lugar; olongtem 8 no Linux de 64 bits e 4 no Windows e no editor do guia. Para um tamanho garantido, useint64_t. Veja: Inteiros e stdint.h. - lvalue
- Algo que pode ficar à esquerda do
=, porque tem um lugar na memória: uma variável,v[2],*p. O resultado de um ternário ou de uma conta não é. O gcc avisa comlvalue required as left operand of assignment. Veja: Operador Ternário.
M
- Macro
- Um nome definido com
#defineque o pré-processador troca por um texto antes da compilação:#define MAX 100, ou com parâmetros,#define DOBRO(x) ((x) * 2). Não confere tipos, e o argumento pode ser calculado duas vezes. Veja: Pré-processador e Macros com Parâmetros. - main
- A função por onde todo programa C começa:
int main(void), ouint main(int argc, char *argv[])para receber argumentos. Oreturndela vira o código de saída. Veja: Olá, Mundo. - make e Makefile
- O
makelê um arquivoMakefilecom as regras de como montar o programa e recompila só o que mudou. Veja: Makefile. - malloc (memory allocation)
- Reserva um bloco de memória no heap e devolve o endereço dele, ou
NULLse faltar memória:int *v = malloc(n * sizeof *v);. A memória vem com lixo. Todomalloctem o seufree. Veja: malloc e free. - Máscara de bits e flag
- Um número com só alguns bits ligados, usado para ligar (
x |= m), desligar (x &= ~m), inverter (x ^= m) ou testar (x & m) esses bits. Cada bit pode ser uma opção sim/não, uma flag ("bandeira"). Veja: Máscaras e Flags. - memcpy e memmove
- Copiam N bytes de um lugar da memória para outro. O
memcpyexige que as áreas não se sobreponham; omemmoveaceita. Na dúvida,memmove. Veja: volatile e restrict e string.h. - Montador (assembler)
- A etapa que transforma o código de montagem (
.s) em código de máquina, num arquivo objeto (.o). Veja: Como o C Vira Programa.
N
- NDEBUG
- Se este nome estiver definido (
-DNDEBUG), todos osassertsomem do programa. Por isso, nada que precise acontecer pode ficar dentro de umassert. Veja: Testes (assert). - Nó
- Cada "pedaço" de uma lista ligada ou de uma árvore: uma struct com o valor e um ou mais ponteiros para outros nós. Veja: Listas Ligadas e Árvores Binárias.
- NULL e nullptr
- O ponteiro nulo, que não aponta para lugar nenhum.
NULLé a forma antiga (uma macro);nullptré a palavra-chave do C23. Funções comomallocefopendevolvem nulo quando falham. Veja: Ponteiro Nulo.
O
- Operador
- Um símbolo que faz uma operação: aritméticos (
+ - * / %), de comparação (== != < >), lógicos (&& || !), de bits (& | ^ ~ << >>) e de atribuição (= +=). Veja: Operadores Aritméticos e Referência de Operadores. - Operador ternário (
? :) - Escolhe um entre dois valores numa expressão:
maior = a > b ? a : b;. É o único operador do C com três partes. Veja: Operador Ternário. - Otimização (
-O2) - Com
-O2, o compilador reescreve o programa por dentro para ele ficar mais rápido: guarda valores em registradores, apaga contas sem efeito. Um programa com comportamento indefinido pode mudar de resultado com-O2. Veja: Compilar com gcc e volatile e restrict.
P
- Padrão ISO
- O documento oficial que define a linguagem C, mantido por um comitê internacional. Cada edição é uma versão (C99, C11, C17, C23); os compiladores seguem o padrão e acrescentam extensões. Veja: Versões do C.
- Palavra-chave
- Uma palavra reservada da linguagem, que não pode ser nome de variável:
int,if,while,return,struct… Veja: Nomes de Variáveis. - Parâmetro
- A variável, na definição da função, que recebe o valor do argumento: em
int dobro(int x),xé o parâmetro. Veja: Parâmetros. - Passagem por valor e por ponteiro
- Em C, a função sempre recebe uma cópia dos argumentos (por valor) e não consegue mudar as variáveis de quem chamou. Para mudar, passa-se o endereço (
&x) e a função usa um ponteiro. Veja: Parâmetros e Passar por Ponteiro. - Pilha (memória, stack)
- A região da memória onde ficam as variáveis locais. Cada chamada de função ganha uma "bandeja" que some quando a função termina. É rápida, mas pequena (8 MB no Linux). Veja: Pilha e Heap.
- Pilha e fila (estruturas de dados)
- Na pilha, o último que entra é o primeiro que sai (
pushepop, como pratos empilhados); na fila, o primeiro que entra é o primeiro que sai (como a fila do banco). Veja: Pilhas e Filas. - Ponteiro
- Uma variável que guarda um endereço:
int *p = &x;. Com*pvocê lê e muda oxà distância. Veja: Ponteiros, Ponteiros e Arrays e Ponteiro para Ponteiro. - Ponteiro para função
- Um ponteiro que guarda o endereço de uma função, para chamá-la depois ou passá-la a outra:
int (*op)(int, int) = soma;. Veja: Ponteiros para Funções. - Ponteiro solto (dangling pointer)
- Um ponteiro que ainda guarda um endereço que não vale mais: memória já liberada com
free, ou uma variável local de uma função que terminou. Usá-lo é comportamento indefinido. Veja: Comportamento Indefinido e Valor de Retorno. - Pré-processador
- A primeira etapa da compilação: executa as linhas que começam com
#(#include,#define,#ifdef) e entrega o texto resultante ao compilador.gcc -Emostra o resultado. Veja: Pré-processador. - Precedência
- A ordem em que os operadores são aplicados:
2 + 3 * 4é2 + (3 * 4). Na dúvida, use parênteses. Veja: Precedência. - printf (print formatted)
- Mostra um texto na tela, com lacunas (
%d,%f,%s…) preenchidas pelos valores seguintes:printf("%s tem %d anos\n", nome, idade);. Veja: Saída com printf, Formatos do printf e Referência do printf. - Protótipo
- A declaração de uma função sem o corpo, terminada em
;:int dobro(int x);. Permite chamar a função antes da definição, ou em outro arquivo. Os.hsão listas de protótipos. Veja: Protótipos.
R
- Recursão
- Uma função que chama a si mesma, com um problema menor a cada vez, até chegar a um caso simples (o caso base). Sem caso base, estoura a pilha. Veja: Recursão e Árvores Binárias.
- Registrador
- Uma "gaveta" dentro do próprio processador, muito mais rápida que a memória. Com
-O2, o compilador guarda nos registradores os valores mais usados. Veja: volatile e restrict. - restrict C99
- Promessa, num parâmetro ponteiro, de que aquela memória não é acessada por nenhum outro ponteiro durante a função:
int *restrict a. Permite otimizar; quebrar a promessa é comportamento indefinido. Veja: volatile e restrict. - return
- Encerra a função e devolve um valor a quem chamou:
return a + b;. Nomain, o valor vira o código de saída. Veja: Valor de Retorno.
S
- Sanitizer
- Um "fiscal" que o compilador põe dentro do programa e que para tudo, com um relatório, no primeiro erro de memória (
-fsanitize=address) ou de comportamento indefinido (-fsanitize=undefined). Veja: Sanitizers. - scanf (scan formatted)
- Lê valores do teclado conforme um formato e os guarda nos endereços recebidos:
scanf("%d", &idade). Devolve quantos campos leu: confira sempre. Veja: Entrada com scanf e Validar a Entrada. - setjmp e longjmp
setjmpmarca um ponto do programa;longjmpvolta para ele de dentro de outras funções, como um ponto de salvamento de jogo. Veja: setjmp e longjmp.- Sinal (signal)
- Um aviso que o sistema manda ao programa: o Ctrl+C (
SIGINT), um alarme (SIGALRM), o acesso proibido à memória (SIGSEGV). Comsignalvocê escolhe uma função para tratá-lo. Veja: Sinais. - size_t
- O tipo inteiro sem sinal dos tamanhos: é o que
sizeofestrlendevolvem. Mostra-se com%zu. Tem 8 bytes no Linux de 64 bits e 4 no editor. Veja: Tamanho dos Tipos e stdint.h. - sizeof
- Operador que diz quantos bytes um tipo ou uma variável ocupa:
sizeof(int)é 4. Num array, dá o tamanho inteiro; num ponteiro, só o do ponteiro. Veja: Tamanho dos Tipos. - snprintf
- Como o
printf, mas escreve numa string, sem passar do tamanho informado:snprintf(buf, sizeof buf, "%d", n). É o substituto seguro dosprintf. Veja: Texto ↔ Número. - static
- Dentro de uma função, cria uma variável que lembra o valor entre as chamadas. Fora das funções, esconde uma função ou variável global dos outros arquivos. Veja: Escopo e Variáveis static e static e extern.
- static_assert
- Confere uma condição na compilação: se for falsa, o programa nem é criado.
static_assert(sizeof(int) == 4);. Veja: static_assert. - stdin, stdout e stderr
- Os três canais que todo programa recebe ao começar: a entrada (o teclado), a saída (a tela) e a saída de erros.
fprintf(stderr, …)escreve mensagens de erro. Veja: stdin, stdout e stderr. - stdint.h
- O cabeçalho dos inteiros com tamanho escrito no nome:
int32_t,uint8_t,int64_t, iguais em todo computador. Veja: Inteiros de Tamanho Fixo. - String
- Em C, um texto é um array de
charterminado em'\0':char nome[] = "Ana";. Não se compara com==(usestrcmp) nem se copia com=(usesnprintfoustrcpy). Veja: Strings e Funções de String. - strlen, strcpy, strcmp
- Funções do
string.h: o tamanho de uma string (sem o'\0'), a cópia (cuidado com o espaço do destino) e a comparação (0 = iguais). Veja: Funções de String e string.h. - struct (estrutura)
- Um tipo novo que junta vários campos, como uma ficha de cadastro:
struct aluno { char nome[40]; double nota; };. Acessa-se com.(a.nota) ou, por um ponteiro, com->(p->nota). Veja: Structs e Structs e Ponteiros. - switch
- Escolhe um caminho conforme o valor inteiro de uma expressão, com um
casepara cada valor edefaultpara os outros. Sembreak, a execução continua no próximocase. Veja: switch.
T
- Tabela hash (tabela de espalhamento)
- Estrutura que guarda pares chave–valor e acha uma chave quase na hora, calculando a posição dela com uma função de hash. Veja: Tabela Hash.
- Teste automático
- Um programa separado que chama as suas funções com exemplos de resposta conhecida e confere os resultados, sempre que você quiser. Veja: Testes (assert).
- Tipo
- O que uma variável guarda e quanto espaço ocupa:
int,double,char,bool, ponteiros, structs… Em C, o tipo é decidido na compilação e não muda. Veja: Tipos de Dados e Tipos e Limites. - typedef
- Dá um apelido a um tipo:
typedef struct aluno Aluno;permite escrever sóAluno. Veja: typedef. - typeof C23
- Dá o tipo de uma expressão, para declarar outra variável igual:
typeof(x) copia = x;. Veja: Novidades do C99 ao C23.
U
- UB
- Sigla de undefined behavior: veja Comportamento indefinido. Veja: Comportamento Indefinido.
- union (união)
- Parecida com a struct, mas todos os campos dividem a mesma memória: só um deles vale de cada vez. Veja: Unions.
- unsigned (sem sinal)
- Inteiro que não aceita negativos e, em troca, vai mais longe no positivo:
unsigned intvai de 0 a 4294967295. Misturar com e sem sinal numa comparação dá surpresas. Veja: Inteiros e Conversão de Tipos. - UTF-8
- O jeito de guardar texto usado hoje: as letras sem acento ocupam 1 byte (como no ASCII) e as acentuadas, 2 ou mais. Por isso
strlen("ação")dá 6. Veja: Acentos e UTF-8 e Caracteres (char).
V
- Valgrind
- Ferramenta que roda o programa "por dentro" de um simulador e aponta vazamentos, leituras fora do lugar (
Invalid read) e valores sem inicializar. Use comvalgrind --leak-check=full ./programa. Veja: Valgrind. - Variável
- Um espaço na memória com nome e tipo, que guarda um valor que pode mudar:
int idade = 30;. Veja: Variáveis. - Vazamento de memória (memory leak)
- Memória reservada com
malloce nunca liberada comfree. Num programa que roda por muito tempo, o consumo só cresce. O Valgrind e o-fsanitize=addressacham. Veja: Vazamentos de Memória e Valgrind. - VLA (variable length array) C99
- Um array local cujo tamanho vem de uma variável:
int v[n];. Fica na pilha, então umngrande demais estoura a pilha. Veja: Arrays. - void
- "Nenhum valor": o tipo de retorno de uma função que não devolve nada (
void mostrar(void)) e, nos parênteses, "sem parâmetros". Veja: Funções e Tipos de Dados. - void * (ponteiro genérico)
- Um ponteiro que aceita o endereço de qualquer tipo, mas não pode ser desreferenciado sem conversão. É o que o
mallocdevolve. Veja: Ponteiro void*. - volatile
- Avisa o compilador que a variável pode mudar "por fora" (hardware, um tratador de sinal): cada leitura e escrita tem de acontecer de verdade. Para sinais,
volatile sig_atomic_t. Não serve para threads. Veja: volatile e restrict.
W
- -Wall -Wextra
- As opções do compilador que ligam os avisos mais úteis. O guia compila sempre com elas. Veja: Compilar com gcc e Avisos.
- WebAssembly
- Um formato de programa que roda dentro do navegador. O editor do guia compila o seu C com o Clang para WebAssembly e o roda na própria página. Veja: O Editor do Guia.
- while
- Laço que repete o bloco enquanto a condição for verdadeira, conferindo antes de cada volta: pode rodar zero vezes. Veja: while.