It depends:
Macros are converted to program text by the compiler. They
don't represent anything other than the text that replaces them,
and don't live beyond compile time (unless... see below).
Local variables and such are likely removed, if they don't have
a non-trivial constructor or destructor. (You don't want
something like scoped_lock
removed just because you don't
reference it later in the code.) The same holds for variables
and functions with internal linkage (e.g. defined at namespace
scope with the keyword static
). In most cases, however, the
resources needed for such objects is minimal, and the savings
negligible.
Functions are a bit different, and depend. A virtual function
will generally be considered "used" if there is ever an instance
of its type, and it will almost certainly be present, even if it
is never called.
Beyond that (and this applies to global variables as well): it's
up to the linker. The granularity of most linkers is the object
file which results from compiling a "translation unit": that
object file either is or is not part of your program. If you
tell the linker to incorporate the object file, then you should
get everything that is in it. If you put the object file in
a (static) library, and tell the linker to use this, then the
linker will incorporate the object file into your program if and
only if it resolves an otherwise unresolved external. But if it
incorporates the object file, it generally will incorporate all
of it. (Any good library will put each non-virtual function in
a separate object file, so you don't get more than you need.)
In this regard, DLL's behave like object files (despite their
name). If you link your object files into a DLL, the program
which uses it will get all of the DLL, or none.
Finally: although not part of your program, the object files and
the final executable will often contain symbolic information;
the best systems will even maintain information concerning
macros, so that the debugger can display things the way you
wrote them. (How far it can do this with macros is debatable.)