I have been looking at the Boost libraries source code, and I have noticed that often there are single pound signs without any preprocessor directives attached to them. I read through the GCC preprocessor manual and specification guide and can't find anything about it.
(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
On line 4, there is nothing after the pound sign. What effect does this have? Is it defined in the C preprocessor (CPP) specification?
As Boost is a cross-platform library, I would assume that any CPP should parse it correctly. What would the effect/side-effects be of having random pound/hash signs throughout the code?
A #
on its own on a line has no effect at all. I assume it's being used for aesthetic value.
The C standard says:
6.10.7 Null directive Semantics A preprocessing directive of the form # new-line has no effect.
The C++ standard says the same thing:
16.7 Null directive [cpp.null] A preprocessing directive of the form # new-line has no effect.
It makes the source code look pretty, that's all.
Highlights the fact that the whole block is a preprocessor section.
And indeed, both the C and C++ preprocessors must ignore #
on a line.
{
or }
in vim).
#
would prevent you from using {
or }
. In fact, it may be easier to press }
twice to jump over the block (in the OP's example) than not be able to jump to the middle of the two blocks.
Always check an authoritative source instead of relying on other resources. C is standardised as ISO 9899::2011, C++ also has an ISO standard. Both are well accepted and the final drafts available by a short search. The C standard states in 6.10.7 (C++ has much the same text):
A preprocessing directive of the form # new-line has no effect.
This is a null directive, as much as an ;
without a preceeding expression in the core-language is a null statement .
For the preprocessor it is just for formatting/readability to highlight that the lines belong semantically together. (the semicolon OTOH is semantically relevant).
Success story sharing