繁体   English   中英

如何获得有关C语言中函数调用者的信息?

[英]How can I get information about a caller of a function in C?

我有一个函数, void funct (struct *B) struct A某些实例将调用它。 它只需要指向Strut B的指针并修改该B结构实例。 如果struct A具有char *name 我的问题是,我可以访问A_instance->name吗? funct 如果是,怎么办? 谢谢

您说这是C,它省略了成员函数(C没有成员函数,类等)。 这意味着funct只是一个函数(不是某个东西的成员),因此,您仅拥有传入的信息和全局变量。 由于这些东西都不包含您想要的东西,因此您无法获得它。

但是,您也说funct由“结构A的某些实例”调用。 这没有任何意义,因为在C结构中没有成员函数,因此无法进行调用。 您的意思是对struct A某些实例的操作正在调用funct(在这种情况下,我的第一个答案适用),或者您确实在使用C ++,并且在struct A中具有成员函数。

如果funct是struct A的成员函数,则funct具有对调用它的A实例的所有成员的完全访问权限,因此可以直接检查“名称”。 否则,我们将回到我的第一个答案。

为了解决这个问题,您要么需要funct成为struct A的成员函数(从而转到C ++),要么需要将相关信息传递给funct。

听起来您正在尝试编写一个函数,该函数需要处理存在于2个不同结构中的name值: struct Astruct A 如果是这样,那为什么不直接在函数中使用char*并让调用者传递适当的name字段呢?

funct(char * name) { 
  ..
}

funct(aInstance->name);
funct(bInstance->name);

恐怕C不允许您访问调用函数数据。 最简单的方法就是传递一个指向“结构A”的指针,至少这样您就始终可以访问A。

void func(struct B* b_ptr, struct A* a_ptr) 
{
    /* ... */
    /* do whatever you like with a_ptr->name */

}

假设您有一个像这样的程序:

struct B {
  int dummy;
}

struct A {
  char *name;
  struct B* b;
}

void funcA ( struct A* a ) {
   funcB ( a->b );
}

void funcB ( struct B* b ) {
   /* do something */
}

你想了解一些关于afuncB ,有做它没有正确的方法。 可能想做的是通过使用指针算术或负数组索引来猜测 a在堆栈中的位置,这甚至可能与给定平台上的给定编译器一起使用。 如果您以这种方式工作,请不要忘记将解决方案发布到The Daily WTF

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM