Estive observando o código-fonte das bibliotecas Boost e notei que muitas vezes existem sinais de libra única sem nenhuma diretiva de pré-processador anexada a elas. Li o manual do pré-processador do GCC e o guia de especificações e não consigo encontrar nada sobre isso.
(1) #ifndef BOOST_CONFIG_HPP
(2) # include <boost/config.hpp>
(3) #endif
(4) #
(5) #if defined(BOOST_HAS_PRAGMA_ONCE)
(6) # pragma once
(7) #endif
Na linha 4, não há nada após o sinal de libra. Que efeito isso tem? É definido na especificação do pré-processador C (CPP)?
Como o Boost é uma biblioteca de plataforma cruzada, eu assumiria que qualquer CPP deve analisá-lo corretamente. Qual seria o efeito / efeitos colaterais de ter sinais aleatórios de libra / hash em todo o código?
c++
c
boost
c-preprocessor
callyalater
fonte
fonte
Respostas:
A
#
por si só em uma linha não tem efeito algum. Presumo que esteja sendo usado para valor estético.O padrão C diz:
O padrão C ++ diz a mesma coisa:
fonte
Faz o código fonte parecer bonito, só isso.
Destaca o fato de que todo o bloco é uma seção de pré-processador.
E, de fato, os pré-processadores C e C ++ devem ignorar
#
em uma linha.fonte
{
ou}
no vim).#
impediria o uso de{
ou}
. De fato, pode ser mais fácil pressionar}
duas vezes para pular o bloco (no exemplo do OP) do que não ser capaz de pular para o meio dos dois blocos.Sempre verifique uma fonte autorizada em vez de confiar em outros recursos. C é padronizado como ISO 9899 :: 2011, C ++ também possui um padrão ISO. Ambos são bem aceitos e os rascunhos finais estão disponíveis em uma breve pesquisa. O padrão C declara em 6.10.7 (C ++ possui praticamente o mesmo texto):
Esta é uma diretiva nula , tanto quanto uma
;
expressão sem precedentes no idioma principal é uma declaração nula. .Para o pré-processador, é apenas para formatação / legibilidade destacar que as linhas pertencem semanticamente. (o ponto e vírgula OTOH é semanticamente relevante).
fonte