printf(“LIST.H”) 其中 LIST.H 是宏

发布于 2024-11-16 10:31:10 字数 437 浏览 1 评论 0原文

#include <stdio.h>
#include<stdlib.h>
#define LIST.H onus;

int main ()
{
         char *p,*s;
         printf(" LIST.H ");
}

我希望 LIST.H 打印 onus 作为输出。 但这并没有发生。 编译后我收到警告

temp.c:3:13: warning: missing whitespace after the macro name

,输出是 LIST.H 而不是责任。 我怎样才能得到上面宏打印出的想要的东西?

更新
我想要输出 作为 onus ,字符串前后各有一个空格。

#include <stdio.h>
#include<stdlib.h>
#define LIST.H onus;

int main ()
{
         char *p,*s;
         printf(" LIST.H ");
}

I expect LIST.H to print onus as out put.
But this does not happen.
upon compiling I get a warning

temp.c:3:13: warning: missing whitespace after the macro name

and the output is LIST.H not onus.
How can I get desired thing printed by the above macro?

UPDATE
I want to have the output
as onus with one space before and after the string.

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

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

发布评论

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

评论(4

三生一梦 2024-11-23 10:31:10

宏名称中不能包含 .。这就是为什么你会收到警告:
警告:宏名称后面缺少空格,在LIST之后它需要一个空格,但它得到一个.

此外,当宏名称位于字符串内(在 "string" 之间)时,它不会被宏定义替换。

您可以这样做:

#define LISTH "onus"

// and then
  printf(LISTH);

预处理器将转换为:

  printf("onus");

如果您这样做:

#define LISTH "onus";

预处理器会将其转换为:

 printf("onus";);

它将无法编译。

Macros names cannot have . inside them. That's why you get the warning:
warning: missing whitespace after the macro name, after LIST it expects a space, but it gets a . instead.

Also, when a macro name is inside a string(between "string") it is not replaced by the macro definition.

You could do this instead:

#define LISTH "onus"

// and then
  printf(LISTH);

which the preprocessor will transform to:

  printf("onus");

If you do:

#define LISTH "onus";

the preprocessor will transform it to:

 printf("onus";);

which won't compile.

天生の放荡 2024-11-23 10:31:10

首先,您不能在宏名称中使用 .

其次,您应该“期望”它打印 ouns;,因为您在宏定义中包含了 ;

第三,为了实现这一点,您可以使用“字符串化”宏运算符 # 和一些辅助宏

#define TO_STRING_(x) #x
#define TO_STRING(x) TO_STRING_(x)


#define LIST_H onus
...
printf(" " TO_STRING(LIST_H) " ");

,或者更好

printf(" %s ", TO_STRING(LIST_H));

Firstly, you can't use . in macro names.

Secondly, you should "expect" it to print ouns;, since you included a ; into your macro definition.

Thirdly, in order to achieve that you can use "stringization" macro-operator # with some helper macros

#define TO_STRING_(x) #x
#define TO_STRING(x) TO_STRING_(x)


#define LIST_H onus
...
printf(" " TO_STRING(LIST_H) " ");

or, better

printf(" %s ", TO_STRING(LIST_H));
Hello爱情风 2024-11-23 10:31:10
#include <stdio.h>

#define LIST_H "onus"

int main()
{
    printf(LIST_H);
}
#include <stdio.h>

#define LIST_H "onus"

int main()
{
    printf(LIST_H);
}
阳光的暖冬 2024-11-23 10:31:10

字符串中的宏未解析,您需要宏解析层才能做到这一点:

#define __STR(x) #x
#define _STR(x) __STR(x)

printf(_STR(LIST));

我上次检查的宏定义中也不能有点,这就是您的错误所在,因此最好使用 LIST_H...

macros in strings aren't resolved, you need to layers of macro resolution to do that:

#define __STR(x) #x
#define _STR(x) __STR(x)

printf(_STR(LIST));

you also cannot have dots in macro defines last I checked, which would be what your error is about, so rather use LIST_H...

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