C Macro offsetof - sonkoni/Koni-Wiki GitHub Wiki

stddef.h

offsetof

νƒ€μž… λ©€λ²„μ˜ μ‹€μ œ λ©”λͺ¨λ¦¬μ˜ μ˜€ν”„μ…‹ λ°˜ν™˜ν•˜λŠ” 맀크둜 ν•¨μˆ˜

#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 이 심어진닀.

⚠️ **GitHub.com Fallback** ⚠️