Eu estava dando uma olhada em alguns códigos C ++ de código aberto e percebi que muitas pontuações duplas eram usadas no código, principalmente no início dos nomes de variáveis.
return __CYGWIN__;
Apenas me perguntando se há uma razão para isso ou são apenas alguns estilos de código de pessoas? Eu acho que o torna difícil de ler.
c++
double-underscore
Nathan W
fonte
fonte
#define FOO 1
mas não devem fazer#define __FOO__ 1
e, portanto, a implementação é livre para usar o nome__FOO__
para suas próprias macros, variáveis, funções, etc.Respostas:
De Programação em C ++, Regras e Recomendações :
fonte
namespace
ser apresentado._main
.A menos que eles sintam que são "parte da implementação", ou seja, as bibliotecas padrão, eles não deveriam.
As regras são bastante específicas e ligeiramente mais detalhadas do que algumas outras sugeriram.
Todos os identificadores que contêm um sublinhado duplo ou começam com um sublinhado seguido por uma letra maiúscula são reservados para o uso da implementação em todos os escopos, ou seja, podem ser usados para macros.
Além disso, todos os outros identificadores que começam com um sublinhado (ou seja, não seguidos por outro sublinhado ou uma letra maiúscula) são reservados para a implementação no escopo global. Isso significa que você pode usar esses identificadores em seus próprios namespaces ou nas definições de classe.
É por isso que a Microsoft usa nomes de função com um sublinhado inicial e todos em minúsculas para muitas de suas principais funções de biblioteca de tempo de execução que não fazem parte do padrão C ++. Esses nomes de função têm a garantia de não entrar em conflito com as funções C ++ padrão ou funções de código do usuário.
fonte
De acordo com o padrão C ++, os identificadores que começam com um sublinhado são reservados para bibliotecas. Identificadores que começam com dois sublinhados são reservados para fornecedores de compiladores.
fonte
Os comentários anteriores estão corretos.
__Symbol__
geralmente é um token mágico fornecido por seu fornecedor de compilador (ou pré-processador) útil. Talvez os mais usados sejam__FILE__
e__LINE__
, que são expandidos pelo pré-processador C para indicar o nome do arquivo atual e o número da linha. Isso é útil quando você deseja registrar algum tipo de falha de declaração do programa, incluindo a localização textual do erro.fonte
É algo que você não deve fazer no código 'normal'. Isso garante que os compiladores e as bibliotecas do sistema possam definir símbolos que não colidam com os seus.
fonte
Os sublinhados duplos são reservados para a implementação
A resposta mais votada cita Programação em C ++: Regras e Recomendações :
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
: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
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:
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.
fonte
Além das bibliotecas sobre as quais muitas outras pessoas responderam, algumas pessoas também nomeiam macros ou #define valores para uso com o pré-processador. Isso tornaria mais fácil trabalhar com ele e pode ter permitido que bugs em compiladores mais antigos fossem contornados.
Como outros mencionados, ajuda a evitar colisão de nomes e ajuda a delinear entre as variáveis da biblioteca e as suas.
fonte