是否可知道到某個 function 之前,己經,經過幾個function 呢?? |
答題得分者是:暗黑破壞神
|
jchuangjchuang
一般會員 發表:4 回覆:10 積分:2 註冊:2007-01-10 發送簡訊給我 |
Dear all,
想請問一下 ex: f<textarea class="cpp" rows="10" cols="60" name="code">void funA(void); void funB(void); void funC(void); void funA() { funB(); } void funB() { funC(); } void funC() { //當程式執行到此時,是否有辨法知道 //曾經run 過 main--->funA--->funB--->funC 呢?? } void main(void) { funA(); } 謝謝各位高手的解答。 </textarea> 編輯記錄
jchuangjchuang 重新編輯於 2007-06-20 16:45:42, 註解 無‧
|
wei7278
一般會員 發表:16 回覆:19 積分:12 註冊:2004-09-25 發送簡訊給我 |
|
jchuangjchuang
一般會員 發表:4 回覆:10 積分:2 註冊:2007-01-10 發送簡訊給我 |
|
wei7278
一般會員 發表:16 回覆:19 積分:12 註冊:2004-09-25 發送簡訊給我 |
那就在function裡面加上印出的程式就好,看你要怎麼印
這樣每跑過一個function就會印一次 ===================引 用 jchuangjchuang 文 章=================== 我是想讓程式run 完後,自動印出所 run 過的function? ,主要是為了畫流程圖用的。 也謝謝您的建議。 |
jchuangjchuang
一般會員 發表:4 回覆:10 積分:2 註冊:2007-01-10 發送簡訊給我 |
Dear wei7278:
您這個方法是可以用,但是,因為是要畫流程圖用的,所以我是想寫個程式,讓程式run 完後,就把流圖畫好了,而不用自已再用手動的方 式對程式,再重新畫一篇。 我本來是想要要在function 的頭尾都加一個 printf 後,再想辨法prsing 出重覆的字串, ex: <textarea class="cpp" rows="10" cols="60" name="code">funA() { printf("funA") .... printf("funA") } funB() { printf("funB") ....... printf("funB") } funC() { printf("funC") ....... printf("funC") }</textarea> 但是總覺得有點麻煩,想請教是否有更好的方法? ===================引 用 wei7278 文 章=================== 那就在function裡面加上印出的程式就好,看你要怎麼印 這樣每跑過一個function就會印一次 ===================引 用 jchuangjchuang 文 章=================== 我是想讓程式run 完後,自動印出所 run 過的function? ,主要是為了畫流程圖用的。 也謝謝您的建議。 |
wei7278
一般會員 發表:16 回覆:19 積分:12 註冊:2004-09-25 發送簡訊給我 |
|
jchuangjchuang
一般會員 發表:4 回覆:10 積分:2 註冊:2007-01-10 發送簡訊給我 |
<textarea class="cpp" rows="10" cols="60" name="code"> void funA(void);
void funB(void);
void funC(void);
void funD(void);
void funE(void);
void funF(void); void funA()
{
printf("funA"); funB();
printf("funA"); }
void funB()
{
printf("funB"); funC();
printf("funB"); }
void funC()
{
printf("funC"); //當程式執行到此時,是否有辨法知道
//曾經run 過 main--->funA--->funB--->funC 呢??
printf("funC"); }
void funD()
{
printf("funD"); printf("funD"); }
void funE()
{
printf("funE"); funcF();
printf("funE"); }
void funF()
{
printf("funF"); printf("funF");
} void main(void)
{
printf("main");
funA();
funD();
funE();
printf("main"); }
</textarea> 我本來是想用這個方法:
其結果為main==>
funA==>
funB==>
funC==>
funC==>
funB==>
funA==>
funD==>
funD==>
funE==>
funF==>
funF==>
funE==>
main==> 再想辨法把它變成
main==>
funA==>
funB==>
funC==>
funD==>
funE==>
funF==> 如此一來,我就知道這段程式是由main開始,在main下有 funA,funB and funC,而在funA 裡面有funB,funB裡面有funC 之後就到了main下了
..... 想請問一下,是否有特定的function 可用,或者有其它更好的方法與建議呢?
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
wei7278
一般會員 發表:16 回覆:19 積分:12 註冊:2004-09-25 發送簡訊給我 |
很可惜我也不知道有什麼寫好的class可以用
我提供一個笨方法 <textarea class="cpp" rows="10" cols="60" name="code"> void funA(void); void funB(void); void funC(void); void funD(void); void funE(void); void funF(void); void funA() { printf("funA"); funB(); } void funB() { printf("funB"); funC(); } void funC() { printf("funC"); } void funD() { printf("funD"); } void funE() { printf("funE"); funF(); } void funF() { printf("funF"); } void main(void) { printf("main----->"); funA(); printf("----->"); funD(); printf("----->"); funE(); } </textarea> 每個function只要在頭印一次,不過在main裡每call一次function後印個分隔線之類的 這樣每個區塊就會有本身function及function裡call的function了 例如main -----> funA,funB,funC -----> funD -----> funE,funF |
harpist
資深會員 發表:3 回覆:251 積分:430 註冊:2002-10-03 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
用一個 int space = 0;
#ifdef __PRINTFUNCTION__ infunc(char *functionname) { for (int i = 0; i < space; i ) printf(" "); printf('in %s\n", functionname); space = 2; } outfunc(char *functionname) { for (int i = 0; i < space; i ) printf(" "); printf('out %s\n", functionname); space -= 2; } #endif functiona() { #ifdef __PRINTFUNCTION__ infunc("functiona"); #endif ...... #ifdef __PRINTFUNCTION__ outfunc("functiona"); #endif } 用這樣處理掉不行嗎? 如果你不要印出,直接把 #define __PRINTFUNCTION__ 拿掉。交付時就不會有動作了。 |
jchuangjchuang
一般會員 發表:4 回覆:10 積分:2 註冊:2007-01-10 發送簡訊給我 |
|
qhbo
一般會員 發表:0 回覆:2 積分:0 註冊:2007-06-22 發送簡訊給我 |
#include <stdio.h>
#define TRACE_FUNC 1 #if (TRACE_FUNC) #define FUNC_IN printf("[ %s ] in.\n", __FUNC__) #define FUNC_OUT printf("[ %s ] out.\n", __FUNC__) #else #define FUNC_IN #define FUNC_OUT #endif int foo_b() { FUNC_IN; // do something. printf("b\n"); FUNC_OUT; } int foo_a() { FUNC_IN; // do something. foo_b(); FUNC_OUT; } int main(int argc, char* argv[]) { foo_a(); return 0; } --- 试试这个吧.
------
common world. |
jchuangjchuang
一般會員 發表:4 回覆:10 積分:2 註冊:2007-01-10 發送簡訊給我 |
謝謝 qhbo
我知道在linux 上是用__FUNCTION__ 可印出function的名子, 沒想到C 也可以,謝謝您了。 ===================引 用 qhbo 文 章=================== #include #define TRACE_FUNC 1 #if (TRACE_FUNC) ??? #define FUNC_IN printf("[ %s ] in.\n", __FUNC__) ??? #define FUNC_OUT printf("[ %s ] out.\n", __FUNC__) #else ??? #define FUNC_IN ??? #define FUNC_OUT #endif int foo_b() { ??? FUNC_IN; ??? // do something. ??? printf("b\n"); ??? FUNC_OUT; } int foo_a() { ??? FUNC_IN; ??? // do something. ??? foo_b(); ??? FUNC_OUT; } int main(int argc, char* argv[]) { ??? foo_a(); ??? return 0; } --- 试试这个吧. |
qhbo
一般會員 發表:0 回覆:2 積分:0 註冊:2007-06-22 發送簡訊給我 |
不客气.
===================引 用 jchuangjchuang 文 章=================== 謝謝 qhbo 我知道在linux 上是用__FUNCTION__ 可印出function的名子, 沒想到C 也可以,謝謝您了。
------
common world. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |