2016-03-26 22 views
1

-std = gnuc99でコンパイルしたCコードの警告のトラブルシューティングを試みています。このキャストを異なるサイズの警告のポインタに解決するにはどうすればよいですか?

void function.. (char *argument) 
{ 
    int hour; 

    hour = (int) (struct tm *)localtime(&current_time)->tm_hour; 

    if(hour < 12) 
    { 
     do...something... 
    } 
} 

ここhappningされる私が仮定警告

warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
hour = (int) (struct tm *)localtime(&current_time)->tm_hour; 
      ^

はlocaltimeのがポインタではありません、それはint型と同じサイズではないということですか?

+1

演算子の優先順位。 '((cast)pointer) - > field'は'(cast)(pointer-> field) 'と同じではありません。パーサーがコードをどのように見ているか把握するために、括弧を追加します。 – amon

+0

intは32ビットです。ポインタは、32ビットまたは64ビットである。 –

+0

これはタイププルーニングですか?私は(int)((struct tm *)localtime(&current_time)) - > tm_hour; – Fastidious

答えて

3

localtime(&current_time)->tm_hourは、タイプintです。これをstruct tm *にキャストし、警告を出します。一般に、ポインタとintの間の変換は意味を持たず、未定義の動作を引き起こす可能性があります。

、このエラーを回避キャストを削除するには:

hour = localtime(&current_time)->tm_hour; 
関連する問題