implicit declaration of function 'asprintf' 警告的解决



asprintf使用起来非常方便,但是它是GNU扩展的C函数库,使用的时候经常会有如下警告:

warning: implicit declaration of function 'asprintf' [-Wimplicit-function-declaration]


调查发现asprintf的头文件是stdio.h,在该头文件中

#ifdef __USE_GNU
/* Write formatted output to a string dynamically allocated with `malloc'.
   Store the address of the string in *PTR.  */
extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
		      _G_va_list __arg)
     __THROW __attribute__ ((__format__ (__printf__, 2, 0))) __wur;
extern int __asprintf (char **__restrict __ptr,
		       __const char *__restrict __fmt, ...)
     __THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
extern int asprintf (char **__restrict __ptr,
		     __const char *__restrict __fmt, ...)
     __THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
#endif

但是__USE_GNU是glibc内容的宏定义,我们不能在自己的代码中定义,因此要怎么解决呢?


解决方法:

在makefile中加入编译选项 -D_GNU_SOURCE

如果是用CMake,需加入add_definitions (-D_GNU_SOURCE)


如果遇到类似因#ifdef __USE_GNU引起的问题,可以通过如上设定尝试解决。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值