Selasa, Juli 14, 2020

typedef vs #define pada bahasa C

typedef: digunakan untuk memberikan sebuah nama baru pada tipe data. Contoh,

Output:
c

#define pada bahasa c adalah sebuah direktif yang digunakan untuk memberikan nama alias.

Output:
Hyderabad

Perbedaan antara typedef dan #define:

satu, typedef dibatasi untuk memberikan nama simbolis untuk tipe data saja, dimana #define digunakan untuk mendefinisikan alias dari nilai, define dapat digunakan untuk mendefinisikan 1 sebagai ONE, atau 3,14 sebagai PI, dan lain sebagainya.

dua, interpretasi typedef ditunjukkan oleh kompilator dan statement #define ditampilkan oleh preprosesor.

tiga, #tidak bisa diakhiri dengan semocolon, tetapi typedef harus diakhiri dengan semicolon.

empat, #define hanya melakukan copy-paste nilai definisi pada titik yang digunakan, sementara typedef merupakan definisi aktual itu sendiri dari sebuah tipe yang baru.

lima, typedef mengikuti aturan scope yang artinya jika tipe baru didefinisikan dalam sebuah scope (dalam fungsi), maka tipe data baru hanya akan terlihat sampai batas scope itu sendiri. Pada #define, ketika preprosesor menemukan #define, maka semua tindakannya akan digantikan setelahnya (tidak mengikuti aturan scope).

Output:
sizeof a:8
sizeof b:8
sizeof c:8
sizeof x:8
sizeof y:1
sizeof z:1

Dari output tersebut "a" merupakan pointer 8. 

typedef char* ptr;
ptr a, b, c;

Statement secara efektif menjadi

char *a, *b, *c;

a, b, c, dideklarasikan sebagai char*.

Kenyatannya, #define beroperasi sebagai berikut:

#define PTR char*
PTR x, y, z;

statement secara efektif menjadi

char *x, y, z;

Hal ini membuat x, y, dan z menjadi berbeda, dimana x adalah pointer ke char, sementara y dan z adalah variabel char. Ketika dideklarasikan makro dengan pointer jika yang dideklarasikan lebih dari satu identifier maka definisi aktual yang diberikan untuk identifier pertama. dan sisanya dalah definisi non pointer yang diberikan. Pada kasus sebelumnya x akan dideklarasikan sebagai char*, sehingga ukurannya adalah seukuran pointer, dimana y dan z akan dideklarasikan sebagai char, maka ukurannya pun akan seukuran 1 byte data.





2 komentar:

Respon komentar 7 x 24 jam, so please be patient :D

Footer Adsense