#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定义为数组。我很感激你的回答。
答案 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中提供的宏。一个是宏符号,第二个是宏函数..
所以,你想要做的是不正确的..自己多搜索..谢谢你:)。