gpt4 book ai didi

c - 在 C 中使用 define 在所有特定函数调用之后或之前添加语句

转载 作者:太空宇宙 更新时间:2023-11-04 06:16:43 24 4
gpt4 key购买 nike

我以前做过,但不知何故现在做不到,所以我在这里问一下。我有一些从 git 存储库下载的代码,我想在调用 malloc 时打印文件名和行号。我做了一个简单的测试。

---- test.c ----
#include <stdlib.h>
#include <stdio.h>
#include "xxx.h"

main()
{
printf("hello\n");
int *ip = malloc(120*sizeof(int));
printf("ip = %x\n",ip);
free(ip);
}

---- xxx.h
#define malloc(x) do {malloc(x); \
printf("malloc at %s()-%d,%s\n",__func__,__LINE__,__FILE__);} \
while(0)

当我执行 gcc test.c 时,我得到了

test.c: In function 'main':
test.c:8: error: expected expression before 'do'

我应该如何修复 xxx.h? (这个问题也适用于 C++)

最佳答案

试试这个:

#define malloc(x) ( \
printf("malloc at %s()-%d,%s\n",__func__,__LINE__,__FILE__), \
malloc(x))

想法是像这样使用“逗号运算符”:

int *ip = (printf(...), malloc(120*sizeof(int)));

逗号运算符的结果始终是它的最后一个参数。

关于c - 在 C 中使用 define 在所有特定函数调用之后或之前添加语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44027116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com