Atualmente, estou lendo um rascunho da especificação C11. As novas palavras-chave introduzidas: _Bool, _Alignof, _Atomic
todas parecem extensões personalizadas, em vez de palavras-chave reservadas padrão struct, union, int
.
Sei que o padrão consiste basicamente em extensões padronizadas ... mas ainda assim, isso é horrível! Talvez em breve __Long_Long_Reallylong_Integer_MSVC_2020_t
acabemos rastejando no padrão!
A compatibilidade com versões anteriores de código não padrão é a única razão do novo estilo das palavras-chave?
<stdbool.h>
arquivo de cabeçalho de qualquer implementação C11 deve incluir uma macro de pré-processador, como#define bool _Bool
. Essa é uma solução interessante, pois mantém a compatibilidade com versões anteriores, mas permite que qualquer novo código, que inclua o novo arquivo de cabeçalho, use a sintaxe mais atraente.Respostas:
Eu imagino que a compatibilidade com o código perfeitamente padrão seja uma das razões mais importantes.
Se você adicionar uma palavra-chave que possa ter sido usada como um identificador legítimo no código anterior, criará um monte de problemas, possíveis erros sutis, especialmente em C, um idioma com regras de análise de alguma forma complicadas.
Se esses identificadores foram usados como uma interface pública em algum lugar, você adiciona desconforto a todos os usuários dessas bibliotecas infelizes, que talvez não usem C, mas chamam a biblioteca de Ruby, Python etc.
É por isso que novas palavras-chave tendem a se parecer menos com palavras bonitas e mais com hacks que as pessoas têm menos chances de usar para outra finalidade.
fonte
Bool
no código legado que foi amplamente aceito como um booleano, mas nunca realmente parte do padrão C, portanto, a suposição não é segura. faço.bool
seria mais no espírito de C. Além disso, não estou completamente convencido por esta resposta, pois palavras feias também podem ter sido usadas por código não padrão. E alterar o estilo das palavras torna mais difícil reconhecer rapidamente as palavras padrão.bool
foi adicionado incondicionalmente ao idioma, todos os projetos que possuem sua própria versão (perfeitamente legítima)bool
parariam de compilar. Isso prejudicaria seriamente a aceitação da revisão do idioma. Esta é a razão pela qual todos os novos identificadores estão sendo obtidos do conjunto reservado (começando assim_[capital]
). Como também havia uma grande demanda porbool
si mesma, isso foi adicionado comotypedef _Bool bool
em<stdbool.h>
.stdbool.h
ou atualizem seu próprio typedef para o novo tipo para suportar seu código legado.Os nomes que começam com sublinhado e maiúscula (e qualquer coisa com sublinhado duplo) foram reservados para a implementação de compilador / biblioteca padrão nos padrões anteriores.
Dos identificadores reservados de C89 e C99:
Portanto, em teoria, essas novas palavras-chave não devem ser usadas em nenhum código escrito antes e isso leva a uma melhor compatibilidade com versões anteriores do que qualquer nome simples, o que provavelmente é o único motivo.
fonte