Bu yazıda sizlere C’de programlama yaparken kullanabileceğiniz bazı ipuçlarından ve hilelerden bahsetmek istiyorum. Burada anlatacaklarımdan bazıları genel kurallar içinde C programı yazmaya aykırı kod parçaları da olabilir ama adı üstünde, konumuz: "Hileler". Eğer bir değişkenin byte’larını ayrı ayrı değiştirmek istiyorsanız, bunu yapmanın kolay bir yolu var. Örneğin x değişkeninizi unsigned int olarak tanımladınız. Böylelikle x, 2byte’lık bir değişken olmuştur. x değişkeninin 2 byte’ını da ayrı ayrı değiştirmek için, char kullanılır. Char, her zaman bir byte olur. Her byte’ı ayrı ayrı ele alınıp değiştirmek için derleyiciye o byte’ların char olduğunu göstermemiz gerekir ve sonra da değişiklik yapmamız gerekir: İlk byte’ı 4 yapalım: *((unsigned char *)&i) = 4;
İkinci byte’ı 15 yapalım: *(((unsigned char *)&i) + 1) = 15;
Intel tabanlı bilgisayarlarda bu işlemler x’in değerini şöyle değiştirecektir: 15*256+4=3844
Bu hileyi kullanırken bir çok bilgisayar sisteminde değişken tiplerinin farklı kaydedildiklerine dikkat edin. Mesela bir başka sistemde sonuç: 4*256+15=1039 olabilir! Değişken tiplerinin uzunlukları da standard değildir. Bir tamsayı 2 byte iken başka sistemde 1 byte olabilir! C’deki çok yararlı işlemlerden biri de ?: dir. Örneğin; i = i == 4 ? 0 : i + 1; kod satırında I 4’ise I’yi sıfırlar, değilse o anki değerine 1 ekler. Eğer bir değişkenin adres değerini gerçek değerinden daha fazla kullanıyorsanız, her seferinde & işaretini kullanmak yerine 1 elemanlı bir dizi tanımlayabilirsiniz:
| int main(void) { void oku(int *toread), degistir(int *toread), islem(int *toread); int deger; oku(°er); degistir(°er); islem(°er); printf("%d", deger); } |
| int main(void) { void oku(int *toread), degistir(int *toread), islem(int *toread); int deger[1]; oku(deger); degistir(deger); islem(deger); printf("%d", *deger); } |
| int a = 3, i; for (i = 0; i < 10; i++) { a = 11 - a; printf("a = %d\n", a); } |



0 yorum: