2016-07-25 11 views
0

私はウィットタイムを試しています。私は結果について驚いたclock()のデータ型は何ですか?

char cChar0[30]; 
char cChar1[30]; 
char cChar2[30]; 
char cChar3[30]; 
char cChar4[30]; 

clock_t t1; 
clock_t t2; 
clock_t t3; 

uint16_t t4; 
uint32_t t5; 

uint16_t i; 
uint16_t uInitDone; 

void dateTime (void){ 

    if(!uInitDone){ 
     uInitDone = 1; 

     t1 = clock(); 
     for (i = 0; i < 1000; i++){ 
      sprintf(cChar0,"do something..."); 
     } 
     t2 = clock(); 
     t3 = t2 - t1; 
     t4 = (uint16_t)t2 - (uint16_t)t1; 
     t5 = (uint32_t)t2 - (uint32_t)t1; 

     sprintf(cChar1, "t1: %u; t2: %u;",t1,t2); 
     sprintf(cChar2, "t1: %u; t2: %u;",(uint16_t)t1,(uint16_t)t2); 
     sprintf(cChar3, "t1: %u; t:2 %u;",(uint32_t)t1,(uint32_t)t2); 
     sprintf(cChar4, "t3: %u; t4: %u; t5: %u;",t3,t4,t5); 
    } 
} 

int main(void) { 
    while(1) 
     dateTime(); 

    return 0; 
} 

:私は、次の(役に立たない)コードをcreatet

cChar0 = "do something..." 
cChar1 = "t1: 0;t2: 0;..." 
cChar2 = "t1: 0;t2: 10498;..." 
cChar3 = "t1: 0;t2: 0;..." 
cChar4 = "t3: 1;t4: 10498; t5: 10498;..." 

私はTIME.Hで確認し、宣言を見つけました:

typedef long time_t; 

ことができます誰も私になぜcChar1のt2とcChar3 = 0を教えてください? 0と0(cChar1)の違いがあるように見えますが、なぜt3はcChar4 = 1ですか? 0と0(cChar3)の違いもあるように見えますが、なぜtCh5はcChar4 = 10498ですか?

+0

'typedef long time_t'は基本的に' time_t'が 'long'と同じことを意味します。これは 'typedef'の要点です – Alex

+0

なぜtCh2でcChar1 = cChar3 = 0ですか?これはclock()の戻り値でもあり、long型を意味します。 – nobody

答えて

1

数字の正確なタイプがわからない場合は、適切なフォーマットのsprintf()を呼び出す前に、数字を固定タイプに明示的に変換する必要があります。

コードのバグはには不適切な%uの形式を使用しています。

は、このようsprintf()行を修正:

sprintf(cChar1, "t1: %lu; t2: %lu;", (unsigned long)t1, (unsigned long)t2); 
    sprintf(cChar2, "t1: %u; t2: %u;", (unsigned int)t1, (unsigned int)t2); 
    sprintf(cChar3, "t1: %hu; t2: %hu;", (unsigned short)t1, (unsigned short)t2); 
    sprintf(cChar4, "t3: %lu; t4: %lu; t5: %lu;", 
     (unsigned long)t3, (unsigned long)t4, (unsigned long)t5); 

出力は今より一貫している必要があります。

+0

それだけです。ありがとう – nobody

関連する問題