如何在C中获取有关函数调用者的信息?

时间:2010-01-20 21:38:53

标签: c

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

4 个答案:

答案 0 :(得分:3)

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

但是,你也说过funct是由'struct A'的一些实例调用的。这没有任何意义,因为在C结构中没有成员函数,因而无法进行调用。要么你的意思是在结构A的某些实例上的操作是调用funct(在这种情况下,我的第一个答案适用),或者你真的在使用C ++,并且你在结构A中有成员函数。

如果funct是struct A的成员函数,那么funct可以完全访问调用它的A实例的所有成员,因此可以直接检查'name'。否则,我们回到第一个答案。

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

答案 1 :(得分:0)

听起来你正在尝试编写一个需要处理name值的函数,该函数存在于2个不同的结构中:struct Astruct A。如果是这种情况,那么为什么不直接在功能中使用char*并让呼叫者通过相应的name字段?

funct(char * name) { 
  ..
}

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

答案 2 :(得分:0)

我担心C不允许您访问调用函数数据。最简单的方法就是传入一个指向“struct A”的指针,至少那时你总是可以访问A.

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

}

答案 3 :(得分:0)

假设你有这样的程序:

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 */
}

并且您希望在a中找到有关funcB的内容,但没有正确的方法可以做到这一点。您可能试图做的是通过使用指针算法或负数组索引来猜测堆栈上a的位置,这甚至可以用于给定平台上的给定编译器。如果您按照这种方式开展工作,请不要忘记将解决方案发布到The Daily WTF