MACRO可以定义为数组吗?

时间:2017-04-03 16:45:00

标签: c arrays macros

#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定义为数组。我很感激你的回答。

2 个答案:

答案 0 :(得分:4)

是的,但是像这样(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代码没有上下文。

答案 1 :(得分:-1)

不对。我可以用简短的总结来解释和证明......请耐心等待。&#34; 我刚刚在我的compilor上尝试过它&#34;因为你想用宏来检查..所以不要根据这个来判断我的答案。

QUES。什么是基本的宏?

答。基本上,它是符号常量。它的sytax -

  #define macro_symbol defination

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

关键点 - &gt; defination是jst paste,只要您使用宏符号。

所以在完成我的简短摘要后,来到你的代码:

#define TEST_ARR  {1, 2, 3}

似乎是正确的代码。因为你jst遵循语法。

好的,继续你下一步的工作 -

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

嘿嘿!发生了一些错误,你不按照我上面描述的关键点进行操作。

QUES。为什么??

答。
第1点。 Compilor只知道预定义符号 TEST_ARR 。  但你想生成一个名为TEST_ARR [index]的新宏,之前compilor不知道..所以这是错误的。

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

所以,你想要做的是不正确的..自己多搜索..谢谢你:)。