2010-01-29 17 views
20

Programımdaki bazı değişken türlerini yazdırmak (veya başka bir şekilde saptamak) istiyorum. Bunu yapmanın iyi bir yolu var mı? İyi, demek istediğim, kasıtlı olarak derleyici hataları atmak anlamına gelse bile işe yarayan bir yoldur. ÖrneğinC'deki bir değişken/işaretçi türünü yazdırmanın bir yolu var mı?

:

client.c:55: error: incompatible types in assignment 

şu anda alıyorum hatadır. Öyle gibi kullanabilirsiniz

client.c:55: error: attempting to assign type struct a to type struct b 

veya bir fonksiyonu: Ne İSTİYORUM bana böyle bir şey söylemektir

printf(gettype(x)); 

çıkışı hangi:

struct b 
+0

Eğer derleme yapmazsa nasıl çalışır? – KeatsPeeks

+0

"Derleyici hataları atarsa" nasıl çalışır? –

+0

"İş" ile ne demek istediğimi, bana bu tür bir hata veriyor, böylece programımda hatayı düzeltebiliyorum. Düzenle'ye bakın. –

cevap

3

GDB kullanarak hata ayıklama deneyin Bu, türü de dahil olmak üzere değişkenle ilişkili tüm özellikleri yazdıracaktır. Ancak, programınız GDB'yi kullanmadan önce derlemelidir.

+0

Oluşturulamıyorsa, bunu yapamazsınız – kursancew

1

Eğer gcc veya gcc-uyumlu bir derleyici kullanıyorsanız, sizeof gibi çok çalışan (kesinlikle standart olmayan ve taşınabilir) typeof anahtar sözcüğünü kullanabilirsiniz.

+7

Maalesef 'typeof''den bir dize alamıyorsunuz. (G ++ olmasına rağmen 'typeid (typeof (x)) 'i kullanabilirsiniz. Name()'.) – kennytm

1

C'de bir değişken bildirdiğinizde bir tür sağlarsınız. Bu, derleyicinin ödev hakkında şikayette bulunduğu tek bilgidir (yani, nesnenin çalışma zamanı türünü değil, sahip olduğunuz statik türü kullanmaz).

Kodu gidin, 55 numaralı satırı bulun, hangi değişkenlerin olduğunu kontrol edin ve koddaki türleri bulun. C'de bile aşırı yüklenme olmaz, türler herhangi bir dilde olduğu gibi statik ve basittir.

43

Bunu nasıl yapacağımı yeni keşfettim.

printf("%d", variable); 

değişken sonra gcc -Wall türleri eşleşmiyor şikayet edecek bir int değilse - ve aradığınız tam olarak ne olduğu, değişkenin türünü yazdırır.

+0

Öğeleri nerede arayacağınızı bilmediğiniz bir ortamda olduğunuzda (örneğin, benim durumumda, yacc ile programlama). – Darthfett

+1

Bu, "printf" öğesine aktarılırken işaretçi çürüten dizi türlerini kullanırken yanıltıcıdır. – Zulan

İlgili konular