【问题标题】:Could MACRO be defined as an array?MACRO 可以定义为数组吗?
【发布时间】:2017-04-03 16:45:00
【问题描述】:
#include <stdio.h>
#define TEST_ARR  {1, 2, 3}

int main() {
    printf("%d %d %d", TEST_ARR[0], TEST_ARR[1], TEST_ARR[1]);
    return 0;
}

这个程序肯定不能运行,我只是想用这个例子来说明我的问题,是否可以将 MACRO 定义为数组。我很感激你的回答。

【问题讨论】:

  • 为什么是 c++ 标签?
  • 宏被预处理器直接替换。 [1,2,3][0] 是有效的 C 代码吗?
  • 可能dupe ?

标签: c arrays macros


【解决方案1】:

是的,但是像这样(C11):

#include <stdio.h>
#define TEST_ARR  (int const[]){1, 2, 3}

int main() {
    printf("%d %d %d", TEST_ARR[0], TEST_ARR[1], TEST_ARR[1]);
    return 0;
}

不适用于[1, 2, 3]。 (我相信可以肯定地说,[1, 2, 3] 是不合理的 C 代码。

【讨论】:

  • 或者 #define TEST_ARR "\1\2\3" 如果卡在 C89 编译器上。
  • 抱歉,我尝试编写 {1, 2, 3} 而不是 [1, 2, 3],从 python 移植,问题已修改。
【解决方案2】:

这不会是正确的。我可以用简短的总结来解释和证明......请耐心等待......“我刚刚也在我的编译器上尝试过”,因为你想用宏来检查......所以不要根据我的答案来判断那个。

问题。 basic中的宏是什么?

回答。基本上,它是一个符号常数。它是语法-

  #define macro_symbol defination

这意味着它是一个符号(这是预定义的),并且可以在需要时使用,只需使用符号(可能称为标识符)。

关键点-->定义只是粘贴到您使用宏符号的任何位置。

所以在完成我的简要总结之后,来到你的代码:

#define TEST_ARR  {1, 2, 3}

这似乎是正确的代码。因为你只需要遵循语法。

好的,继续你接下来的工作-

 printf("%d %d %d", TEST_ARR[0], TEST_ARR[1], TEST_ARR[1]);

嘿嘿!,出事了,你没有按照我上面描述的重点。

问题。为什么??

Ans.
第 1 点。 编译器只知道预定义的符号 TEST_ARR 。 但是您想生成一个名为 TEST_ARR[index] 的新宏,编译器之前不知道它是什么。所以这是错误的。

第 2 点。有两个一般规定,c 中的宏规定。一是宏符号,二是宏函数..

所以,你想做的不对,兄弟..自己搜索更多..谢谢:)

【讨论】:

  • 请发表您的评论..如果我以这种方式帮助了您..? :)
  • 这样,我可以进一步改进我的解释方式.. :) 分享您的反馈 :)
猜你喜欢
  • 2016-08-09
  • 2015-04-24
  • 1970-01-01
  • 2022-10-04
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多