MAX在编译时?

时间:2018-06-15 15:29:20

标签: c arrays compilation max sizeof

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之间最大的常量字符串。

  • 由于在编译时评估sizeof,所有信息都可用于在运行时之前评估大小。有任何已知的解决方案吗?
  • 如果是,如何将此扩展为n字符串而不是两个?

1 个答案:

答案 0 :(得分:0)

如果你没有锁定字符串的类型,只是它们是一个常量字符串,你可以将它们作为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;
}