是否有可能在複合語句中使用alloca? 例子:alloca內部複合語句
typedef struct
{
size_t len;
char* data;
} string_t;
#define str_to_cstr(str) \
({ \
char* v = alloca(str.len + 1); \
v[len] = 0; \
memcpy(v, str.data, str.len); \
})
// ... and somewhere in deep space
int main()
{
string_t s = {4, "test"};
printf("%s\n", str_to_cstr(s));
return 0;
}
從我的經驗效果很好,但我不知道它是安全的。 BTW,它用gcc 4.8.4
'v [len]'typo .. – BLUEPIXY
...無論是,還是'memcpy(v,str.data,str.len + 1);' –
雖然你建議應該工作,爲什麼不只是維護一個'.data'結尾的空字符並使用它(可能強制轉換爲'const char *')? – Dmitri