2012-03-10 96 views
0

這裏是我的C代碼..優化C代碼

void Read(int t,char* string1) 
{ 
    int j,i,p,row,count=0; 
    for(i=0;i<t;++i,string1=strchr(string1,')')+2) 
    { 
     sscanf(string1,"(%d,%d)",&p,&row); 
     CallFunction(p,row); 
    } 
} 

這裏是我必須調用這個函數:

Read(2,"(3,5),(7,8)") 

這是對付這種類型的輸入參數的好方法?這是否耗時?

是否有任何其他好方法(優化方式)讀取相同的輸入參數?

+2

爲什麼你認爲你必須優化它? – 2012-03-10 12:23:39

+0

只是想知道2如果這是閱讀這種輸入或其他更好的方式的唯一方法 – Jay 2012-03-10 12:25:48

+0

不成熟的優化是所有邪惡的根源。順便說一句,您可能會讓代碼更具可讀性,而不會損失性能,例如,通過將'string1 = strchr(string1,')')+ 2'移出for循環。 – 2012-03-10 12:43:40

回答

0

該代碼速度相當快。但是它需要多快才能取決於你不知道的約束。

我希望你的輸入數據已經被檢查,因爲string1=strchr(string1,')')+2(以及後面的內容)是不安全的。

讀你的代碼讓我覺得,如果你真的需要裸機到金屬速度,你應該拋棄函數調用並手動完成工作(自己解析字符串)。

但是考慮到你已經發布的'API',速度的問題可能會在高於和低於這段代碼片段中被擊敗。

達到最佳代碼鏈則取決於......所有鏈:整體不會比鏈中最慢的功能運行得更快。

對不起,不是更具體,但這是一個更全球性的問題比你提供的信息讓我解決它(我沒有全部圖片)。

1

您可以使用sscanf()的%n格式說明符,它允許您省略strchr()函數。速度的提高可能是微乎其微的。

順便說一下:不要調用函數「讀取」,即使您可以假設區分大小寫的編譯器和鏈接器。

#include <stdio.h> 

#define CallFunction(a,b) fprintf(stderr, "p=%d row=%d\n", a, b) 

void do_read(int cnt,char *input) 
{ 
    int i,err,p,row,res; 

    for(i=0; i<cnt ; i++,input += res) 
    { 
     err = sscanf(input,"(%d,%d)%n",&p,&row, &res); 
     if (err < 2) { 
       fprintf(stderr, "%s:%d: input='%s', err=%d\n" 
         , __FILE__ , __LINE__, input, err); 
       break; 
       } 
     CallFunction(p,row); 
     if (input[res] == ',') res++; 
    } 
} 

int main(void) 
{ 
do_read(2,"(3,5),(7,8)"); /* this should succeed */ 
do_read(2,"(3,5)#(7,8)"); /* this must fail ... */ 

return 0; 
}