编译时最大?
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 之间的最大常量字符串。
- 由于 sizeof 是在编译时求值的,所以在 运行 之前所有的信息都可以用来求值。有任何已知的解决方案吗?
- 如果是,如何将其扩展为 n 个字符串而不是两个?
如果您没有锁定字符串的类型,只是知道它们是常量字符串,您可以将它们设置为 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;
}
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 个字符串而不是两个?
如果您没有锁定字符串的类型,只是知道它们是常量字符串,您可以将它们设置为 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;
}