我有一个这样的结构:
typedef struct {
int num_files;
audio_file files[];
} message_files;
我想创建一个宏,这样我就不必指定静态已知数组的文件数量:
#define FILES(arr) {sizeof((audio_file []) arr) / sizeof(audio_file), arr}
message_files files[1] = {
FILES({{1,500}, {2,500}})
};
但这不起作用:我明白了
error: macro "FILES" passed 4 arguments, but takes just 1
。
如何使宏接受数组文字?
你的代码绝对是“C”风格的方法,在 C++20 中我会这样做:
#include <array>
#include <string_view>
#include <concepts>
struct audio_file_t
{
int id;
std::string_view name;
};
int main()
{
constexpr auto files = std::to_array<audio_file_t>({{ 1, "file1" }, { 2, "file2" }});
static_assert(files.size() == 2);
}