编译时最大?

MAX at compile time?

static const char * a = "0,0,0,%d,0,0,0,0,0,0,0,0,0,0";
static const char * b = "0,%d,0,0,0,0,0,0,%d,0,0,0";

void function(void)
{
  const uint16_t bufferSize = MAX(sizeof(a),sizeof(b));
  char bufferData[bufferSize+1];
}

我现在这个代码是无效的,但它是为了这个想法。

目标是定义一个足够大的数组来容纳 a 和 b 之间的最大常量字符串。

如果您没有锁定字符串的类型,只是知道它们是常量字符串,您可以将它们设置为 char[] 类型以实现此目的:

#define SIZE(Z) (sizeof(Z)/sizeof(char))
#define MAX(X,Y) SIZE(X) > SIZE(Y) ? SIZE(X) : SIZE(Y)

int main()
{
    char a[] = "asdfasdfasdfasdfasdfasdf";       // length: 24
    char b[] = "adsfasdfasdfasdfasdfa";          // length: 21

    char buffer[MAX(a, b) + 1];

    printf("buffer size: %d\n", MAX(a, b) + 1); // returns 25

    return 0;
}