免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5484 | 回复: 12
打印 上一主题 下一主题

[C++] 请教一下,如何打印某个函数的源代码? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-25 09:18 |只看该作者 |倒序浏览
我记得以前看到过,在c/c++下面,一个程序在运行期貌似可以把自己的源代码打印出来的?找了半天没有找到。
我现在需要实现一个功能,就是把一个函数的源代码打印出来。可以么?

不会只能用 Print("hard code源代码内容");吧?

谢谢。

e.g. 例如函数如下,
void Myfunction1()
{
   int i = 0;
   int j = 0;

   int k = i + j;
}

程序运行后,在console上面能够打印出
   int i = 0;
   int j = 0;

   int k = i + j;

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2010-11-25 09:22 |只看该作者
那是特殊设计的程序,一般的不行的。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
3 [报告]
发表于 2010-11-25 09:27 |只看该作者
Ken Thompson 的经典 C 程序 ,供参考.
  1. char s[]={
  2. '\t',
  3. '0',
  4. '\n',
  5. '}',
  6. ';',
  7. '\n',
  8. '\n',
  9. 'm',
  10. 'a',
  11. 'i',
  12. 'n',
  13. '(',
  14. ')',
  15. '\n',
  16. '{',
  17. '\n',
  18. '\t',
  19. 'i',
  20. 'n',
  21. 't',
  22. ' ',
  23. 'i',
  24. ';',
  25. '\n',
  26. '\n',
  27. '\t',
  28. 'p',
  29. 'r',
  30. 'i',
  31. 'n',
  32. 't',
  33. 'f',
  34. '(',
  35. '"',
  36. 'c',
  37. 'h',
  38. 'a',
  39. 'r',
  40. ' ',
  41. 's',
  42. '[',
  43. ']',
  44. '=',
  45. '{',
  46. '\\',
  47. 'n',
  48. '"',
  49. ')',
  50. ';',
  51. '\n',
  52. '\t',
  53. 'f',
  54. 'o',
  55. 'r',
  56. '(',
  57. 'i',
  58. '=',
  59. '0',
  60. ';',
  61. ' ',
  62. 's',
  63. '[',
  64. 'i',
  65. ']',
  66. ';',
  67. ' ',
  68. 'i',
  69. '+',
  70. '+',
  71. ')',
  72. '\n',
  73. '\t',
  74. '\t',
  75. 'p',
  76. 'r',
  77. 'i',
  78. 'n',
  79. 't',
  80. 'f',
  81. '(',
  82. '"',
  83. '\\',
  84. 't',
  85. '%',
  86. 'd',
  87. ',',
  88. '\\',
  89. 'n',
  90. '"',
  91. ',',
  92. 's',
  93. '[',
  94. 'i',
  95. ']',
  96. ')',
  97. ';',
  98. '\n',
  99. '\t',
  100. 'p',
  101. 'r',
  102. 'i',
  103. 'n',
  104. 't',
  105. 'f',
  106. '(',
  107. '"',
  108. '%',
  109. 's',
  110. '"',
  111. ',',
  112. 's',
  113. ')',
  114. ';',
  115. '\n',
  116. '}',
  117. '\n',
  118. 0
  119. };

  120. main()
  121. {
  122. int i;

  123. printf("char s[]={\n");
  124. for(i=0; s[i]; i++)
  125. printf("\t%d,\n",s[i]);
  126. printf("%s",s);
  127. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-11-25 14:27 |只看该作者
加 -g 编译的程序,目标代码中是包含源文件的,可以分析它,然后打印出来。

论坛徽章:
0
5 [报告]
发表于 2010-11-25 15:06 |只看该作者
一般不可以吧?

论坛徽章:
0
6 [报告]
发表于 2010-12-27 09:29 |只看该作者
研究了一下,发现是不能自动打印的。
就算想在程序运行时输出自己的源代码,也必须是事先在程序内部有字符串 - 他已经把所有的源代码都写好了。

这样的话,真是郁闷啊。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
7 [报告]
发表于 2010-12-27 09:31 |只看该作者
那是一道经典的题目吧,程序自己打印自己。

论坛徽章:
0
8 [报告]
发表于 2010-12-27 09:34 |只看该作者
楼主的问题的确是个问题啊,

论坛徽章:
0
9 [报告]
发表于 2010-12-27 09:52 |只看该作者
写个母程序A,用来生成可打印自身函数的程序B。
目程序A步骤如下:
步骤1、读入B源码,把读入的数据直接写入到程序B的源程序中,并给一个变量名如filestr之类的。
步骤2、给B的源码中加入打印某个函数的功能,至于这个功能如何实现,要看需求,一般用两种方案,一种是用函数名字符串作为参数,一种是函数指针作为参数。第一种功能容易实现,但是调用不方便;第二种需要根据stab信息去查询行号,需要在编译的时候加入-gstabs 调试信息等,优缺点和上面整好相反。
步骤3、编译B源程序,生成可执行程序。

论坛徽章:
0
10 [报告]
发表于 2010-12-27 10:05 |只看该作者
Ken Thompson 的经典 C 程序 ,供参考.
ecjtubaowp 发表于 2010-11-25 09:27



    {:3_186:}  没看明白...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP