错误:宏名称必须是使用 #ifdef 0 的标识符

发布于 2024-07-12 00:31:36 字数 180 浏览 7 评论 0原文

我有一个用 C++ 编写的应用程序的源代码,我只想使用以下内容来评论一些内容:

#ifdef 0
...
#endif

我收到此错误

错误:宏名称必须是标识符

为什么会发生这种情况?

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

#ifdef 0
...
#endif

And I get this error

error: macro names must be identifiers

Why is this happening?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

枕花眠 2024-07-19 00:31:36

#ifdef 指令用于检查是否定义了预处理器符号。标准 (C11 6.4.2 标识符) 规定标识符不得以数字开头:

identifier:
    identifier-nondigit
    identifier identifier-nondigit
    identifier digit
identifier-nondigit:
    nondigit
    universal-character-name
    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

正确的使用预处理器阻止代码的形式是:

#if 0
: : :
#endif

您也可以使用:

#ifdef NO_CHANCE_THAT_THIS_SYMBOL_WILL_EVER_EXIST
: : :
#endif

但您需要确信这些符号不会被您自己以外的代码无意中设置。 换句话说,不要使用其他人也可能使用的 NOTUSEDDONOTCOMPILE 之类的内容。 为了安全起见,应首选 #if 选项。

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 identifier-nondigit
    identifier digit
identifier-nondigit:
    nondigit
    universal-character-name
    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
: : :
#endif

You can also use:

#ifdef NO_CHANCE_THAT_THIS_SYMBOL_WILL_EVER_EXIST
: : :
#endif

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.

初熏 2024-07-19 00:31:36

使用以下内容计算表达式(常量 0 计算结果为 false)。

#if 0
 ...
#endif

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

#if 0
 ...
#endif
秋风の叶未落 2024-07-19 00:31:36

如果您不遵循宏规则,也可能会发生此错误,

例如

#define 1K 1024 // Macro rules must be identifiers error occurs

原因:宏应该以字母而不是数字开头

更改为

#define ONE_KILOBYTE 1024 // This resolves 

This error can also occur if you are not following the marco rules

Like

#define 1K 1024 // Macro rules must be identifiers error occurs

Reason: Macro Should begin with a letter, not a number

Change to

#define ONE_KILOBYTE 1024 // This resolves 
屋顶上的小猫咪 2024-07-19 00:31:36
#ifdef 0
...
#endif

#ifdef 需要一个宏而不是表达式
当使用常量或表达式

#if 0
...
#endif

或者

#if !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif

使用 #ifdef 时,它会报告此错误

#ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif

,其中 #ifdef 需要宏而不是宏表达式

#ifdef 0
...
#endif

#ifdef expect a macro rather than expression
when using constant or expression

#if 0
...
#endif

or

#if !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif

if #ifdef is used the it reports this error

#ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif

Where #ifdef expect a macro rather than macro expresssion

子栖 2024-07-19 00:31:36

也可能会遇到此错误

#define <stdio.h>

请注意,如果您不小心键入: ...而不是...,

#include <stdio.>

Note that you can also hit this error if you accidentally type:

#define <stdio.h>

...instead of...

#include <stdio.>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文