Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

bi soru daha benden..

Konu, 'C / C++' kısmında Fobus tarafından paylaşıldı.

  1. Fobus

    Fobus .

    Kayıt:
    7 Şubat 2003
    Mesajlar:
    1,094
    Beğenilen Mesajlar:
    0
    progra blogu asagıda

    ---------------
    main()
    {
    basla();
    }
    basla(){
    }
    -------------
    bu program blogu tc.exe ile aynı dizinde ise çalışmıyor dosyanın yerini değiştirirsem derleyebiliyorum sorun nedir(Prototype hatası veriyor);aynı kod niye yeri değiştirilince çalışır ki? kod da bi değişiklik yapmıyorum.saygılarımla.
     
  2. acehreli

    acehreli Ali Çehreli

    Kayıt:
    19 Ekim 2002
    Mesajlar:
    4,973
    Beğenilen Mesajlar:
    2
    [C ile derlediğinizi varsayacağım.]

    Programlar kod baştan sona doğru okunarak derlenirler. Benim bildiğim üç temel C türü bu durumda bazı değişiklikler gösterirler:

    - 1989'daki ilk C standardından önceki C (eski C)
    - standart C (C89)
    - 1999'daki yeni standarttan sonraki C (C99)

    Eğer eski C kurallarını uygulayan bir derleyici kullanıyorsanız, programınızda bir yanlışlık yok: Derleyici, 'basla'yı gördüğü anda ne olduğunu bilmediği zaman onun 'int' döndüren ve herhangi türde herhangi sayıda parametre alan bir işlev olduğunu varsayar.

    C89 kullanıyorsanız, 'main'in dönüş türünün 'int' olduğunu belirtmeniz gerekiyor. (Bu durumda main'in sonuna bir return satırı koymanızın gerekip gerekmediği konusundan emin değilim. gcc istediği için öyle yapacagım.) Ayrıca, 'basla'nın ne olduğunun ilk kullanıldığı yerden önce bildirilmesi gerekir.

    Yani ya böyle:

    Kod:
    
    /* Bildirim ve tanım */
    void basla()
    {}
    
    int main()
    {
        basla();
        return 0;
    }
    
    ya da böyle:

    Kod:
    /* bildirim */
    void basla();
    
    int main()
    {
        basla();
        return 0;
    }
    
    /* tanım */
    void basla()
    {}
    
    Eğer C99 derleyicisi kullanıyorsanız, bu durumda görebildiğim bir fark var: 'return 0' satırını yazmak zorunda değilsiniz. Örneğin:

    Kod:
    void basla()
    {}
    
    int main()
    {
        basla();
    }
    
    Bu durumda kütüğünüzün değişik yerlerde değişik kurallarla derlendiğini anlıyorum. Belki tc.exe'nin bulunduğu yerdeki onunla ilgili bir kütük derleme kurallarını etkiliyordur; veya başka yerde olduğunuzda tc'nin bilgisayarınızda bulunan eski bir sürümü devreye giriyordur.

    Her iki yerde de tc'yi kendi sürümünü bildirecek şekilde çalıştırmayı deneyin. Hiç tc bilmiyorum ama belki 'tc -v' işe yarar. Veya 'tc -version'?

    Ali