[英]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 A
和struct 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 */
}
你想了解一些关于a
在funcB
,有做它没有正确的方法。 您可能想做的是通过使用指针算术或负数组索引来猜测 a
在堆栈中的位置,这甚至可能与给定平台上的给定编译器一起使用。 如果您以这种方式工作,请不要忘记将解决方案发布到The Daily WTF 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.