gpt4 book ai didi

c - 在 C 中查找函数调用者

转载 作者:太空宇宙 更新时间:2023-11-04 00:14:49 25 4
gpt4 key购买 nike

大家好,我只是想知道是否可以获取在函数中运行的程序的名称?

这是一个例子:

假设我调用了:./runProgram

main() {

A();

}

function A() {

// Possible to retrieve "runProgram" if I cannot use main's argc(argv) constants??
}

最佳答案

依赖于编译器,所以:

$ cc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646)

制作程序

$ more x.c
int main(int argc, char *argv[]) {
printf("program: %s\n", argv[0]);
foo();
}


int foo() {
}

$ make x
cc x.c -o x
x.c: In function ‘main’:
x.c:2: warning: incompatible implicit declaration of built-in function ‘printf’
$ ./x
program: ./x

获取 argc/v 变量的全局名称

$ nm ./x
0000000100000efe s stub helpers
0000000100001048 D _NXArgc
0000000100001050 D _NXArgv
0000000100001060 D ___progname
0000000100000000 A __mh_execute_header
0000000100001058 D _environ
U _exit
0000000100000eeb T _foo
0000000100000eb8 T _main
U _printf
0000000100001020 s _pvars
U dyld_stub_binder
0000000100000e7c T start

添加全局名称,声明为 extern,并考虑 mangling。

$ more x2.c
int main(int argc, char *argv[]) {
printf("program: %s\n", argv[0]);
foo();
}


int foo() {
extern char **NXArgv;
printf("in foo: %s\n", NXArgv[0]);

}

运行恐怖

$ make x2
cc x2.c -o x2
x2.c: In function ‘main’:
x2.c:2: warning: incompatible implicit declaration of built-in function ‘printf’
x2.c: In function ‘foo’:
x2.c:9: warning: incompatible implicit declaration of built-in function ‘printf’
$ ./x2
program: ./x2
in foo: ./x2

请不要告诉我妈妈。

关于c - 在 C 中查找函数调用者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1586498/

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