Os sublinhados duplos são reservados para a implementação
A resposta mais votada cita Programação em C ++: Regras e Recomendações :
"O uso de dois sublinhados (` __ ') em identificadores é reservado para uso interno do compilador de acordo com o padrão ANSI-C. "
No entanto, depois de ler alguns padrões C ++ e C, não consegui encontrar nenhuma menção de sublinhados sendo restritos apenas ao uso interno do compilador. Os padrões são mais gerais, reservando sublinhados duplos para a implementação .
C ++
C ++ (rascunho de trabalho atual, acessado em 26/05/2019) afirma em lex.name
:
- Cada identificador que contém um sublinhado duplo __ ou começa com um sublinhado seguido por uma letra maiúscula é reservado para a implementação para qualquer uso.
- Cada identificador que começa com um sublinhado é reservado para a implementação para uso como um nome no namespace global.
C
Embora esta questão seja específica para C ++, eu citei seções relevantes dos padrões C 99 e 17:
C99 seção 7.1.3
- Todos os identificadores que começam com um sublinhado e uma letra maiúscula ou outro sublinhado são sempre reservados para qualquer uso.
- Todos os identificadores que começam com um sublinhado são sempre reservados para uso como identificadores com escopo de arquivo nos espaços de nomes comuns e de tag.
C17 diz a mesma coisa que C99.
Qual é a implementação ?
Para C / C ++, a implementação refere-se vagamente aos recursos definidos necessários para produzir um executável a partir dos arquivos de origem do usuário. Isso inclui:
- pré-processador
- compilador
- vinculador
- biblioteca padrão
Implementações de exemplo
Existem várias implementações C ++ diferentes mencionadas na Wikipedia . (sem link de âncora, ctrl + f "implementação")
Aqui está um exemplo de implementação C / C ++ da Digital Mars reservando algumas palavras-chave para um recurso deles.