Error: macro names must be identifiers using #ifdef 0


I have the source code of an application written in C++ and I just want to comment something using:

#ifdef 0

And I get this error

error: macro names must be identifiers

Why is this happening?

11/27/2015 11:33:19 AM

Accepted Answer

The #ifdef directive is used to check if a preprocessor symbol is defined. The standard (C11 6.4.2 Identifiers) mandates that identifiers must not start with a digit:

    identifier identifier-nondigit
    identifier digit
    other implementation-defined characters>
nondigit: one of
    _ a b c d e f g h i j k l m
    n o p q r s t u v w x y z
    A B C D E F G H I J K L M
    N O P Q R S T U V W X Y Z
digit: one of
    0 1 2 3 4 5 6 7 8 9

The correct form for using the pre-processor to block out code is:

#if 0
: : :

You can also use:

: : :

but you need to be confident that the symbols will not be inadvertently set by code other than your own. In other words, don't use something like NOTUSED or DONOTCOMPILE which others may also use. To be safe, the #if option should be preferred.

4/12/2016 2:04:17 AM

Use the following to evaluate an expression (constant 0 evaluates to false).

#if 0

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow