我知道,SO 中有一些类似主题的问题,但没有一个真正回答问题。
通常你定义一个常量数组如下:
const char arr[] = {0x00, 0x01, 0x02, 0x03}
“我可以使用 #define 指令来做完全相同的事情吗?”这个问题的回答大多是简单的否,但是我偶然发现了一个头文件lxr,正在寻找一个结构。那是我发现这个的时候:
extern const struct in6_addr in6addr_any;
#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
extern const struct in6_addr in6addr_loopback;
#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
extern const struct in6_addr in6addr_linklocal_allnodes;
#define IN6ADDR_LINKLOCAL_ALLNODES_INIT \
{ { { 0xff,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
extern const struct in6_addr in6addr_linklocal_allrouters;
#define IN6ADDR_LINKLOCAL_ALLROUTERS_INIT \
{ { { 0xff,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2 } } }
extern const struct in6_addr in6addr_interfacelocal_allnodes;
#define IN6ADDR_INTERFACELOCAL_ALLNODES_INIT \
{ { { 0xff,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
extern const struct in6_addr in6addr_interfacelocal_allrouters;
#define IN6ADDR_INTERFACELOCAL_ALLROUTERS_INIT \
{ { { 0xff,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2 } } }
extern const struct in6_addr in6addr_sitelocal_allrouters;
#define IN6ADDR_SITELOCAL_ALLROUTERS_INIT \
{ { { 0xff,5,0,0,0,0,0,0,0,0,0,0,0,0,0,2 } } }
#endif
(在 http://elixir.free-electrons.com/linux/v4.12-rc6/source/include/linux/in6.h 找到)
这是否只在内核中有效,或者是否有特定的方法可以对任何阵列完成此操作?
最佳答案
上面显示的#defines 用作初始化特定类型结构的简写。
使用你给出的例子:
const char arr[] = {0x00, 0x01, 0x02, 0x03}
您还可以执行以下操作:
#define ARR_INIT {0x00, 0x01, 0x02, 0x03}
const char arr[] = ARR_INIT;
关于c - 在 C 中定义常量数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44727295/