在 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/