2016-03-26 38 views
1

Cst kodumda -std = gnuc99 ile derlenmiş bazı uyarıları gidermeye çalışıyorum.Farklı bir boyut uyarısının işaretçisine bu döküm nasıl çözülür?

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

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

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

uyarı

Benim burada happning olduğunu varsaydığımız localtime bir işaretçi değildir ve bu int aynı boyutta değil
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
hour = (int) (struct tm *)localtime(&current_time)->tm_hour; 
      ^

?

+1

Operatör Önceliğini. '((cast) işaretçisi) -> alan '' (cast) (pointer-> alan) 'ile aynı değildir. Ayrıştırıcının kodunuzu nasıl gördüğünü anlamak için parantez ekleyin. – amon

+0

int, 32 bittir. işaretçi bağlı olarak 32 veya 64 bittir. –

+0

Bu Tip Budama mı? (Int) ((struct tm *) localtime (& current_time)) ile denedim ve hiçbir uyarı almadım -> tm_hour; – Fastidious

cevap

3

localtime(&current_time)->tm_hour, int tipindedir. Daha sonra uyarıyı üreten struct tm *'a gönderirsiniz. Genel olarak, işaretçilerle int arasındaki dönüşüm anlamlı değildir ve tanımlanmamış davranışa neden olabilir.

Bu hatayı önlemek atmalarını kaldırmak için:

hour = localtime(&current_time)->tm_hour;