Gcc __文件和_函数提供的指针值是否不变?

Gcc __文件和_函数提供的指针值是否不变?,gcc,Gcc,从下面的简单演示中,输出显示字符串指针文件和函数在调用之间保持不变。(即字符串的地址保持不变)这总是真的吗?(为linux g++编译,为windows与mingw交叉编译) 我想知道我是否可以在我的程序生命周期中将这些指针安全地存储在我自己的结构中,并确保它们始终有效 #include <stdio.h> int second_function(int y) { printf("%p %p %s:%d:%s\n", __FILE__, __PRETTY

从下面的简单演示中,输出显示字符串指针文件函数在调用之间保持不变。(即字符串的地址保持不变)这总是真的吗?(为linux g++编译,为windows与mingw交叉编译)

我想知道我是否可以在我的程序生命周期中将这些指针安全地存储在我自己的结构中,并确保它们始终有效

#include <stdio.h>

int second_function(int y)
{
    printf("%p %p %s:%d:%s\n", __FILE__, __PRETTY_FUNCTION__, __FILE__, __LINE__, __PRETTY_FUNCTION__);
    return 0;
}

int first_thing(int x)
{
    printf("%p %p %s:%d:%s\n", __FILE__, __PRETTY_FUNCTION__, __FILE__, __LINE__, __PRETTY_FUNCTION__);
    second_function(1);
    second_function(2);
    return 0;
}

int main(int argc, char *argv[])
{
    printf("%p %p %s:%d:%s\n", __FILE__, __PRETTY_FUNCTION__, __FILE__, __LINE__, __PRETTY_FUNCTION__);
    first_thing(3);
    first_thing(4);
    second_function(5);
    return 0;
}
#包括
int第二个函数(int y)
{
printf(“%p%p%s:%d:%s\n”、“文件”、“函数”、“文件”、“行”、“函数”);
返回0;
}
int第一件事(int x)
{
printf(“%p%p%s:%d:%s\n”、“文件”、“函数”、“文件”、“行”、“函数”);
第二功能(1);
第二函数(2);
返回0;
}
int main(int argc,char*argv[])
{
printf(“%p%p%s:%d:%s\n”、“文件”、“函数”、“文件”、“行”、“函数”);
第一件事(3);
第一件事(4);
第二功能(5);
返回0;
}
这总是真的吗

如果我能在我的程序生命周期中将这些指针安全地存储在我自己的结构中,并确保它们始终有效

#include <stdio.h>

int second_function(int y)
{
    printf("%p %p %s:%d:%s\n", __FILE__, __PRETTY_FUNCTION__, __FILE__, __LINE__, __PRETTY_FUNCTION__);
    return 0;
}

int first_thing(int x)
{
    printf("%p %p %s:%d:%s\n", __FILE__, __PRETTY_FUNCTION__, __FILE__, __LINE__, __PRETTY_FUNCTION__);
    second_function(1);
    second_function(2);
    return 0;
}

int main(int argc, char *argv[])
{
    printf("%p %p %s:%d:%s\n", __FILE__, __PRETTY_FUNCTION__, __FILE__, __LINE__, __PRETTY_FUNCTION__);
    first_thing(3);
    first_thing(4);
    second_function(5);
    return 0;
}


\uuuu PRETTY\u FUNCTION\uuuu
是一个gcc扩展。使用
\uuu func\uuu
可移植。

调用之间的调用
什么是“调用”?您好,我试图避免使用“调用”一词,因为它可能是函数或宏,谢谢您的确认