在一个头文件中使用多个未初始化的数组,这个#定义是什么



我在cyanogenmod的一个头文件中看到了以下代码(更改了名称以提高可读性(:

#define THIS_C 
const char CP::a[] = "a"; 
const char CP::b[] = "b"; 
#define THIS_H 
static const char a[]; 
static const char b[]; 

这是如何工作的?我如何使用这种#define语句?

此外,编译器如何可能在不初始化变量的情况下创建数组?

是如何工作的

宏的工作原理是用其定义替换宏。

如果你把它写在一个源文件中:

THIS_C

预处理器将替换为:

const char CP::a[] = "a";
const char CP::b[] = "b";

以及如何使用它?

如果您想要声明这样的变量,那么您可以使用宏来生成这些声明。然而,在这个琐碎的例子中,不清楚使用宏而不是直接编写声明有什么好处(如果有的话(。宏可能只是用来混淆代码,这是不可取的。


此外,编译器如何在不初始化变量的情况下创建数组?

在类定义的上下文中,THIS_H将是两个数组静态成员的外部声明。这样的声明不需要指定数组的大小,也不可以初始化变量。初始化在定义中(我想这就是THIS_C扩展到的内容(。

最新更新