2009-12-15 12 views
8

Türetilmiş türde bir işaretçinin önceden tanımlanmış olup olmadığını kontrol etmek istiyorum. Aynı kod Windows üzerinde derlenmiş oysaTüretilmiş tipte ilgili işaretçiler mi? gFortran vs. Intel

T F 

: Sana sorunu göstermek için aşağıdaki basit kod yazdı:

program test 
implicit none 

type y 
    real(8), pointer :: x(:) 
end type y 
type(y), pointer :: w(:) 

allocate(w(2)) 
allocate(w(1)%x(2)) 

write(*,*) associated(w(1)%x), associated(w(2)%x) 

end program test 

gfortran 4.4.1 ile bu kodu derleniyor ve Ubuntu sitede yayınlayarak sonucunu verir Intel Fortran derleyicisi 11.0 ile Vista sağlamaktadır:

T T 

ilk sonuç (gfortran) aslında bekliyorum şeydir. Ancak, Intel derleyicisinin farklı bir sonuç sağladığı gerçeği, kodumun yanlış olabileceğinden korkmamı sağlıyor. Bu örnekte işaretçilerle çok yanlış bir şey yapıyorum? Herhangi bir fikir veya açıklama?

Yardımlarınız için şimdiden çok teşekkürler!

cevap

11

İşaretçilerdeki işaretçinin açıkça nullify kullanmadan ilişkilendirildiğini görmek için test ediyorsunuz. (Kaldırıldı kod örneği ile) common Fortran mistakes sözleri üzerine büyük bir sayfa:

Birçok kişi ilişkili olmamıştı ibrenin durumu .not olduğunu düşünüyorum. ilişkili. Bu yanlış. (...) Bir işaretçi bildirildiğinde, durumu undefined ve associated içsel olarak güvenli bir şekilde sorgulanamaz.

gfortran derleyici açıkça ilanı konusunda işaretçileri geçersiz kılmak ayarlanmış olabilir gibi görünüyor - muhtemelen otomatik sıfıra Açıklanan değişkenler ayarı derleyicisi gibi bu düşün ve bu davranışı üzerinde saymak gerekir. Emin olmak istiyorsan, onu kendinden mahvedeceksin.

Düzenleme:

Ben Intel derleyici rehberi aracılığıyla okuyorum ve işaretçi doğru geçersiz olduğundan emin olmak için nasıl belirler - Eğer

type y 
    real(8), pointer :: x(:) => null() 
end type y 
olarak türetilmiş tür ayarlayabilirsiniz

Bununla birlikte, bunun, bağlantılı makalede belirtildiği gibi, Fortran 95 ile sınırlı gibi gözüktüğünü unutmayın.

+0

Çok teşekkür ederim! Bu gerçekten sorun oldu. Önerdiğiniz çözüm, hem Intel derleyici hem de gFortran ile çok iyi çalışıyor. – remek