linux内核源码里面的打印语句经常有__func__,这个__func__是什么意思?跟字符串什么关系?

linux内核源码里面的打印语句经常有__func__,这个__func__是什么意思?跟字符串什么关系?,第1张

编译的时候,会替换为这条语句所在的函数的函数名

例如

int main(void)

{

printf("%s\n", __func__)

return 0

}

在编译并运行时,会打出

main

(test1.c)

#include <stdio.h>

void func1(int *arr, int n, int *max_num, int *min_num) {

      if (n == 0) return

      *min_num = *max_num = arr[0]

      if (n == 1) return

      for (int i = 0i <ni++) {

              if (arr[i] >*max_num) *max_num = arr[i]

              if (arr[i] <*min_num) *min_num = arr[i]

      }

}

int main() {

      int arr[] = {1,2,3,4,5}

      int min_num, max_num

      func1(arr, 5, &max_num, &min_num)

      printf("min=%d, max=%d\n", min_num, max_num)

      return 0

}

(Makefile)

test1.out: test1.c

      gcc test1.c -o test1.out

挺古老的的一个蛋疼小程序了【以前我觉着机器好,就手贱地运行了,于是不出意外地死机了】原理就是定义一个函数,并不断递归,不停地制造后台任务。如你所见那个函数名就是个冒号,其实这完全就是在扰乱你的视线。【话说回来好像bash里好像也有一个啥事都不干的冒号命令】写的易懂点:func () {#函数定义,这里把函数名改成了funcfunc | func &#管道符连接的命令貌似会同时开始【也有可能是倒序开始来IO阻塞,我对bash研究不深】,所以当下一个func被调用时,一个后台的func已经建立}func #那么开始滚雪球,准备好随时power键


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/5930063.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-08
下一篇 2023-03-08

发表评论

登录后才能评论

评论列表(0条)

保存