можно ли использовать 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;
}
По моему опыту, это работает хорошо, но я не уверен, что это безопасно. Кстати, он скомпилирован с помощью gcc 4.8.4.
On many systems alloca() cannot be used inside the list of arguments of a function call, because the stack space reserved by alloca() would appear on the stack in the middle of the space for the function arguments
Значит ли это, что некоторые системы позволяют использовать alloca внутри аргументов? 11.07.2015