如何为返回Exception对象而非char*的函数使用__attribute_format_arg__?
问题
我定义了如下函数:
Exception* make_exception(Exception* caused_by, size_t caused_at, const char* format, ...) __attribute_format_arg__(3);
其中Exception是存储函数结果的结构体,编译时出现错误:
error: function does not return string type
请问有什么解决办法?
解决办法
这个错误的核心原因是__attribute_format_arg__(n)属于GCC的特定属性,它的设计目的是标记返回字符串类型的函数,用于告知编译器该函数会处理第n个参数指向的格式化字符串(比如生成一个新的格式化后字符串)。但你的函数返回的是Exception*结构体指针,完全不符合该属性的类型要求。
针对这个问题有两种明确的解决路径:
- 若你想保留编译器对
printf风格格式化参数的类型检查(比如验证格式化符和参数的匹配性),应该替换成__attribute__((format(printf, 3, 4)))属性。这个属性专门用于标记接受printf风格参数的函数,不限制返回值类型,只需要指定格式化字符串的位置(第3个参数)和可变参数的起始位置(第4个参数)。修改后的函数声明如下:Exception* make_exception(Exception* caused_by, size_t caused_at, const char* format, ...) __attribute__((format(printf, 3, 4))); - 若你不需要编译器的格式化参数检查,直接移除
__attribute_format_arg__(3)这个属性即可,编译错误会直接消除。
内容的提问来源于stack exchange,提问作者Tenobaal
相关产品推荐
相关产品推荐

