.NET – VS : Önişlemci Komutları

Hayırlı çalışmalar,
Bugün Önişlemci nedir, nerede, neden kullanılır onu anlatmaya çalışacağım inş.

Önişlemci Nedir ?

Önişlemci komutları programın derleme zamanında derleyiciyi yönlendirmemize yarayan komutlardır.  İstemediğimiz satırların derleme modülü tarafından derlenmemesini sağlayabiliriz. Sadece bu değil, programda hata ayıklamak için ve kodun okunurluğunu arttırmak için de önişlemci komutları kullanılabilir. Komut çeşitleri;

#define #undef
#if #endif – #else #elif
#line
#warning #error
#region #endregion

Önemli not : C#’da aslında önişlemci diye bir birim yoktur, bu birim derleyicinin bir bölümü olarak görülmekte.

#define #undef

Bu komutlarla sembol ataması yapıyoruz, tek başına hiçbir görevi yoktur aslında ancak diğer önişlemci komutlarıyla özellikle #if komutuyla beraber kullanıldığında esas görevini görmekteyiz, #if ile kullanıldığında koşullu derleme yani istediğimiz bölümün derlenip istemediğimiz bölümün derlenmemesini sağlayabiliyoruz.

Kullanım şekli, kodun en üst kısmına yazılır şöyle ;

#define YENI
using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Nurullah");
        }
    }
}

YENI sembolü tüm kaynak kodda geçerlidir çünkü #undef komutu ile kapatılmadı. Onu da şöyle yapıyoruz ;
#undef YENI

Birden çok sembolde kullanabiliriz.

define komutunu tam olarak anlamamış olabilirsiniz ancak şimdi if yapısını gördüğünüzde daha iyi anlayacaksınız.

#if #endif – #else #elif

define komutu ile atadığımız sembolü kontrol ettirip, komutu uyguladığımız kod parçacığının derlenip derlenmemesini sağlıyoruz. Aşağıdaki kod parçacığını incelediğimiz de görebilirsiniz;

#define ESKI
using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
#if YENI
            Console.WriteLine("Nurullah");
#endif
            Console.WriteLine("Demir");
            Console.ReadLine();
        }
    }
}

Burada ekrana

Nurullah
Demir

yazacaktır, çünkü YENI sembolü bulunmamaktadır. Şimdi de aşağıdaki kodu inceleyelim;

#define ESKI
using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
#if YENI
            Console.WriteLine("Nurullah");
#elif ESKI
            Console.WriteLine("Demir");
            Console.WriteLine("Eski Sembolü");
#else
            Console.WriteLine("Bu kod derlenmeyecektir, çünkü ESKI sembolü çalıştırılmıştır, if-else if-else yapısı ile çalışma mantığı aynıdır.");
#endif
            Console.WriteLine("Burası ortak koddur, herhangi bir kontrol gerçekleştirmediğimizden derlenecektir.");
            Console.ReadLine();
        }
    }
}

Ekrana sadece

Demir
Eski Sembolü
Burası ortak koddur, herhangi bir kontrol gerçekleştirmediğimizden derlenecektir.

yazacaktır.
Bu yapılarda mantıksal operatorleride kullanabiliriz
#if YENI && ESKI
#if YENI ||ESKI
#if YENI && (!ESKI)
#if YENI || (ESKI==FALSE)

son ikisi (!ESKI, ESKI==FALSE) ESKI sembolü tanımlanmamışsa anlamına gelir.

#line

Line komutu genelde hata ayıklamada kullanılır. Line komutunun iki kullanım çeşidi vardır
1. #line 1
Yukarıdaki kodu yazdığımız yerin bi altını 1. satır olarak kabul eder ve aşağıdaki satırlarıda ona göre düzenler.
Örneğin aşağıda line komutunun alt satırını 4 olarak kabul edip, hata verdiğinde ona göre o satırı gösterir.

using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
#line 4
            Console.WriteLine(hataliKodKullanimi);
            Console.ReadLine();
        }
    }
}

Yukarıda hata yapılan satır 8.satır iken, derleyici bize 4. satırda hata yapılmış gibi gösterir.
Şöyle ;
Error 1 The name ‘hataliKodKullanimi’ does not exist in the current context D:\Nurullah\Projeler\Visual Studio\Taslak\DenemeTahtasi\Console\Program.cs 3

#line komutunun diğer bir kullanımı ise ;
#line 3 “Dosyamiz.cs”

Yine bir alt satırı 3. satır olarak kabul eder, hata verdiğinde #line komutunun altındaki tüm kodları “Dosyamiz.cs” dosyası içerisindeymiş gibi gösterir.

Şöyle ;
The name ‘hataliKodKullanimi’ does not exist in the current context d:\Nurullah\Projeler\Visual Studio\Taslak\DenemeTahtasi\Console\Dosyamiz.cs 3

Dosyamiz.cs diye bir dosya yok aslında ama biz öyle yaptık icon razz .NET   VS : Önişlemci Komutları dot net c sharp

#error #warning

İşte bu komutu çok seviyorum icon smile .NET   VS : Önişlemci Komutları dot net c sharp Ben genelde hatırlatma için kullanıyorum bunu.
#error komutu ; derleme esnasında derleyicinin verdiği hatayı verdirmeye yarar.
#warning komutu ; kodu derler ancak aşağıda uyarı verir.
Bu komutlar yine if yapısıyla kullanıldığında güzel işler görmekte.
Örnek kod ;

#define ESKI
#define YENI
using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
#if ESKI && YENI
    #error ESKI ve YENI sembolü aynı anda tanımlanamaz.
#endif
            Console.WriteLine(":)");
            Console.ReadLine();
        }
    }
}

Program derlenmeyecektir ve
Error 1 #error: ‘ESKI ve YENI sembolü aynı anda tanımlanamaz.’

şeklinde hata verecektir.
Aşağıdaki kodu da inceleyiniz,

#define ESKI
#define YENI
using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
#if ESKI && YENI
    #warning ESKI ve YENI sembolü aynı anda tanımlanamaz.
#endif
            Console.WriteLine(":)");
            Console.ReadLine();
        }
    }
}

İşte bunu çok seviyorum icon smile .NET   VS : Önişlemci Komutları dot net c sharp Ben bunu hatırlatma amaçlı kullanıyorum genelde.
Yukarıdaki program derlenecektir ancak
#warning: ‘ESKI ve YENI sembolü aynı anda tanımlanamaz.’
şeklinde uyarı verecektir.

#region #endregion

#region ve #endregion komutları arasına aldığımız satırları bir arada toplu olarak tutar.

Kullanımı ;

using System;
namespace Demir
{
    class Program
    {
        static void Main(string[] args)
        {
            #region KODUMUZ
            Console.WriteLine("Nurullah DEMİR");
            Console.WriteLine("ndemir.com");
            Console.ReadLine();
            #endregion
        }
    }
}

region endregion1 .NET   VS : Önişlemci Komutları dot net c sharp

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
Yorum yaz

XHTML: Kullanabileceğiniz taglar : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>