Bir arkadaşımın bana gönderdiği bazı kodlara bakıyordum ve dedi ki: "Derler, ama işe yaramıyor".Parantez olmadan işlevleri kullandığımda C++ derleyicisi neden şikayet etmiyor?
void foo(){
cout<< "Hello world\n";
}
int main(){
foo; //function without parentheses
return 0;
}
ilk ben "kullanım parantez, etmelisin" olduğunu söyledi: Ben o parantez olmadan böyle bir şey fonksiyonları kullandığını gördük. Ve sonra bu kodu test ettim - derleme yapar, ancak çalıştırıldığında çalışmaz (hayır "Merhaba dünya" gösterilir).
Peki, neden derler (derleyici GCC 4.7'dan hiç uyarı almaz), ancak çalışmıyor?
Aslında işe yarıyor. foo, olduğu gibi bir işlev işaretçisi olarak ele alınır. 'Foo;' satırı, etkili olmayan bir çizgidir. Uyarılarınızı maksimum değere çevirirseniz, geçerli olmayan bir bildirimle ilgili bir uyarı almanız gerekir. – RedX
Görüyorum * "uyarı: ifade," foo "işlevini çağırmak için değil, bir referanstır * ve *" uyarı: ifadesinin bir etkisi yoktur "*. Muhtemelen -Wall-Wextra – Flexo
ile derlemek istiyorsunuz. (#include 've örneklemizi tamamlayabilmeniz için herhangi bir ad alanı içeriğine koymaya değer) –
Flexo