我在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
扩展到的内容(。