【发布时间】:2016-08-28 07:43:33
【问题描述】:
我写了一个换行函数来替换stdio.h 的printf。我发现wrap 选项适用于stdlib.h 中的函数,例如malloc 或exit。但它不适用于printf 或fprintf。
wrap 选项是否对stdio.h 中的函数起作用?以及如何包装任意函数?我无法从ld document 获得有用的指导。
代码如下:
//gcc wrap.c -g -Wl,--wrap,fprintf
int __real_fprintf(FILE *stream, const char *format, ...);
int main(){
fprintf(stderr, "MAIN!\n");
return 0;
}
int __wrap_fprintf(FILE *stream, const char *format, ...){
__real_fprintf(stderr, "WRAP!\n");
return 0;
}
【问题讨论】:
-
要包装可变参数函数,您应该初始化 arg 列表,然后将其传递给例如 v*printf
-
"它不起作用" 你期望什么输出?你得到了什么输出?
-
已确认不适用于 fprintf。它适用于 malloc。
-
@n.m.我想得到输出“WRAP!”。但它写了“MAIN!”。结果显示包裹不起作用。