让我们假设以下代码:char* c = __FILE__;
c是否存在于堆栈或堆中? (作为后续措施-我可以将c传递给另一个线程进行处理,还是需要在其他地方存储数据?)。
谢谢你。
最佳答案
c
是指针类型的变量,根据声明所在的范围,在声明它的任何位置(无论存储时间长短)存在。它使用字符串文字的地址进行初始化,该字符串具有静态的存储期限,不可修改,并且可能因相同的字符串而折叠。
如果将其更改为__PRETTY_FUNCTION__
,则它与您询问的其他程序不同,因为它不是预处理器可以扩展的宏。预处理器从根本上不了解函数边界(如果函数实际上是由宏逐段定义的,则预处理器正在扩展?),因此它是一个特殊的扩展,本质上是一个隐式声明的数组类型的静态局部变量,使用包含以下内容的字符串初始化漂亮的函数名称。
关于c - 在c中,宏__FILE __,__ LINE__和__PRETTY_FUNCTION__是否分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59437509/