Em C, void
é usado para várias coisas não relacionadas. Dependendo do uso, seu significado pode ser um tipo de unidade, um tipo vazio ou qualquer outra coisa.
Quando void
é usado por si só (ao contrário de void*
um ponteiro para anular), é um tipo de unidade, ou seja, um tipo com um único valor. void
Diz-se que as funções que retornam "não retornam nada", mas o que isso realmente significa é que elas não retornam nenhuma informação. Eles retornam bits de informação, o que significa que retornam um valor de um tipo que contém valores distintos, ou seja, um tipo de unidade.2 0 = 1020=1
Este não é um tipo vazio: uma função que retorna um tipo vazio não pode retornar um valor, pois não há valor desse tipo. Uma função cujo tipo de retorno está vazio pode fazer loop apenas para sempre, ou abortar o programa, ou gerar uma exceção ( longjmp
) (ou de outra forma organizar para não retornar, por exemplo, transferindo o controle para outro thread ou processo usando a funcionalidade além do padrão C). Para manter as coisas confusas, é convencional em C usar void
no lugar de um tipo vazio (C não tem um tipo vazio).
O void
tipo requer bits de armazenamento. Como C insiste em todos os objetos que ocupam um número inteiro e nulo de bytes de armazenamento, é proibido criar um objeto do tipo e há uma sintaxe especial para retornar o valor (uma declaração com o valor omitido). Não há sintaxe que produz o valor do tipo , mas esse valor existe sempre que uma função cujo tipo de retorno é retornado.0void
void
return
void
void
C não possui um tipo inferior no sentido de permitir qualquer tipo possível. Mesmo tipos incompletos especificam a natureza geral de seus valores, por exemplo, ponteiros ou estruturas, uniões ou funções. Mas void*
é um ponteiro para qualquer tipo que não seja de função: é o menor elemento da álgebra dos tipos de ponteiros de objetos, ou seja, é o tipo de ponteiro de objeto inferior. Ao contrário do caso geral de T*
onde T
é algum tipo não nulo, void*
não é o tipo de ponteiros para um valor do tipo void
, mas o tipo de ponteiros para um valor do tipo não especificado.