C++中的定义和数组

Define and array in C++

我对 linux 上 g++ 的这个错误有疑问:

srcs/../incs/file.hpp:21:27: error: taking address of temporary array
 # define KEY_ESC_ (char[]){27, 0, 0, 0, 0, 0, 0}
                       ^~~~~~~~~~~~~~~~~~~~~~
 srcs/main.cpp:91:16: note: in expansion of macro 'KEY_ESC_'

如您所见,这是在定义中。我不明白为什么 g++ 说 获取临时数组的地址

它比临时的更全球化...

这个值是从read

中得到的key escape

无论如何...

我该如何解决?

此代码适用于 osx,但我需要在 linux 上进行粗略编译 ...

谢谢

如果您使用 define 语句,代码中 KEY_ESC_ 的所有实例都将逐字替换为 (char[]) {27, 0, 0, 0, 0, 0, 0},,这将在您的代码中成为临时变量。

我猜你有这样的函数:void f(char** A) 所以你传递 &KEY_ESC_

{27, 0, 0, 0, 0, 0, 0}const char 数组。

通过将其转换为 char[],您创建了一个临时变量。

问题是该方法可以保存临时地址,释放后重新使用。

你可以尝试用const:

来解决
const char KEY_ESC_[] = {27, 0, 0, 0, 0, 0, 0};

并调用方法:

void f2(const char** A)

与:

f2(&KEY_ESC_);