gpt4 book ai didi

在 C 中创建跟踪当前范围的宏

转载 作者:行者123 更新时间:2023-11-30 14:35:50 24 4
gpt4 key购买 nike

在 C++ 中,对象构造函数和析构函数可用于在代码执行期间跟踪作用域,如下所示:

#define TRACE(msg) Helper trace_helper(msg);
class Helper {
const char* _name;
Helper(const car* name) {
_name = name;
printf(“enter %s”, name);
}
~Helper() { printf(“exit %s”, _name); }
};

这允许我跟踪我的代码,例如

main() {
TRACE(“main”)
for(...) {
foo();
}
}

void foo() {
TRACE(“foo”)
do some stuff
if(condition) {
TRACE(“inner block”)
do some stuff
}
}

例如,这对于分析代码很有用。

现在,C 中没有可用的构造函数和析构函数,我想知道是否仍然可以创建一个 TRACE 宏,它只需要一行,并且还可以跟踪作用域的退出?

最佳答案

你所要求的在标准C中是不可能的;但根据您的编译器,可能有一个属性。在 GCC 中,cleanup 属性可能可以做你想要的事情

#include <stdio.h>
void tracemsg(void* ctx){
printf("scope exit\n");
}
#define SCOPE_CHECK \
void* ctx __attribute__((cleanup (tracemsg)));

int main(){
{
SCOPE_CHECK;//gets printed last
printf("in scope\n");
printf("in scope\n");
printf("in scope\n");
printf("in scope\n");
}
}

关于在 C 中创建跟踪当前范围的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58353253/

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