C Macro offsetof - sonkoni/Koni-Wiki GitHub Wiki
νμ λ©€λ²μ μ€μ λ©λͺ¨λ¦¬μ μ€νμ λ°ννλ λ§€ν¬λ‘ ν¨μ
#define offsetof(type, member)
// type : λ³΄ν΅ κ΅¬μ‘°μ²΄κ°μ νμ
// member: λ©€λ²μ΄λ¦
// νμ
λ©€λ²μ μ€μ λ©λͺ¨λ¦¬μ μ€νμ
μ size_t νμΌλ‘ λ°νμ½λλ₯Ό 보λΌ. C μ»΄νμΌλ¬μ μν΄ κ΅¬μ‘°μ²΄ μ λ ¬μ΄ μλλ°μνμ¬, μ€μ λ©λͺ¨λ¦¬μ ꡬ쑰체 λ©€λ²μ μ€νμ μ΄ μ½λμ λ¬λΌμ Έ μλ€.
#include <stdio.h>
#include <stddef.h>
struct Packet {
char flag; // 1λ°μ΄νΈ
int seq; // 4λ°μ΄νΈ
};
int main(int argc, char *argv[]) {
// seq μ€νμ
μ΄ 1μ΄ μλλΌ 4μ μλ€.
printf("=> %zu\n", offsetof(struct Packet, flag)); // 0
printf("=> %lu\n", offsetof(struct Packet, seq)); // 4
// μ½λμμ 보μ΄λ κ²μ 5λ°μ΄νΈμΈλ°, μ€μ μ¬μ΄μ¦λ 8λ°μ΄νΈμ΄λ€.
printf("~~~> %zu\n", sizeof(struct Packet)); // 8
return 0;
} flag seq
ββββββΌβββββ¬βββββ¬βββββ¬βββββ€
βcharβ int β μ½λμμ 보μ΄λ ν¬κΈ°: 5λ°μ΄νΈ
ββββββΌβββββ΄βββββ΄βββββ΄βββββ€
0 1 5
flag seq
ββββββΌβββββ¬βββββ¬βββββΌβββββ¬βββββ¬βββββ¬βββββ€
βcharββββββββββββββββ int β μ€μ λ©λͺ¨λ¦¬μ μ¬λΌκ°λ ν¬κΈ°: 8λ°μ΄νΈ
ββββββΌβββββ΄βββββ΄βββββΌβββββ΄βββββ΄βββββ΄βββββ€
0 1 padding 4 8
β ββββββββββββββββββββ¬ββββββββββββββββββββ£
κ°μ₯ ν° μλ£νμ κ°μ§ λ©€λ²μ size λ¨μλ‘ μ λ ¬λλ©° padding μ΄ μ¬μ΄μ§λ€.