c 中 #define 的奇怪错误

发布于 2024-11-23 17:11:24 字数 425 浏览 6 评论 0原文

我知道#define 在编译为实际值之前被替换。那么为什么这里的第一个代码编译没有错误,而第二个代码却没有呢?

第一个;

#include <stdio.h>
#include <stdlib.h>
int main()
{
   printf("bc");
   return 0;
}

第二个(不工作);

#include <stdio.h>
#include <stdlib.h>
#define Str "bc";
int main()
{
   printf(Str);
   return 0;
}

error: expected ')' before ';' token

谢谢你的回答,对我糟糕的英语感到抱歉......

I know that #define replaced before the compiling to real values. so why the first code here compile with no error, and the 2nd not?

the 1st;

#include <stdio.h>
#include <stdlib.h>
int main()
{
   printf("bc");
   return 0;
}

the 2nd(not working);

#include <stdio.h>
#include <stdlib.h>
#define Str "bc";
int main()
{
   printf(Str);
   return 0;
}

error: expected ')' before ';' token

thank you for the answers, and sorry about my poor English...

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

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

发布评论

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

评论(7

等风来 2024-11-30 17:11:24

因为 Str 宏的计算结果为 "bc"; — 包含分号。所以你的宏扩展为:

printf("bc";);

你不需要在 #define 后跟分号。它们以换行符结束,而不是像 C 语句那样以分号结束。我知道这很令人困惑; C 预处理器是一个奇怪的野兽,它是在人们了解之前就被发明的。

Because the Str macro evaluates to "bc"; — the semicolon is included. So your macro expands to:

printf("bc";);

You do not need to follow a #define with a semicolon. They end at a newline, rather than at the semicolon like a C statement. It is confusing, I know; the C preprocessor is a strange beast and was invented before people knew better.

面如桃花 2024-11-30 17:11:24

实际上,第二个有效,第一个无效。问题是分号:

#define Str "bc";
                ^

Actually the second works and the first doesn't. The problem is the semicolon:

#define Str "bc";
                ^
且行且努力 2024-11-30 17:11:24

使用,它将如下所示:

#define Str "bc"

替换后与您的定义一起

printf("bc";);

Use

#define Str "bc"

with your define after the substitution it will look like:

printf("bc";);
玩世 2024-11-30 17:11:24

第一个的问题是 Str 被替换为 "bc";

将其更改为

#define Str "bc"

The problem with the first one is that Str is replaced with "bc";.

Change it to

#define Str "bc"
缱倦旧时光 2024-11-30 17:11:24

您需要删除;你在哪里定义 str.因为你会得到 printf("bc";);

You need to remove ; where you define str. Because you will get printf("bc";);

究竟谁懂我的在乎 2024-11-30 17:11:24

第一个代码无法编译,因为您需要在 #define 之后删除分号,第二个代码才能正常工作。

The first code does not compile because you need to remove the semicolon after the #define the 2nd code works as it should.

药祭#氼 2024-11-30 17:11:24

第一个不起作用,因为这些行:

#define Str "bc";
printf(Str);

扩展到此行:

printf("bc";);

您想要:

#define Str "bc"

The first one doesn't work because these lines:

#define Str "bc";
printf(Str);

expand to this line:

printf("bc";);

You want:

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