# [−][src]Macro memoffset::offset_of

    macro_rules! offset_of {
        ($father:ty, $($field:tt)+) => { ... };
    }

Calculates the offset of the specified field from the start of the struct. This macro supports arbitrary amount of subscripts and recursive member-accesses.

Note: This macro may not make much sense when used on structs that are not `#[repr(C, packed)]`

## Examples - Simple

    #[macro_use]
    extern crate memoffset;

    #[repr(C, packed)]
    struct Foo {
        a: u32,
        b: u64,
        c: [u8; 5]
    }

    fn main() {
        assert_eq!(offset_of!(Foo, a), 0);
        assert_eq!(offset_of!(Foo, b), 4);
        assert_eq!(offset_of!(Foo, c[2]), 14);
    }

## Examples - Advanced

    #[macro_use]
    extern crate memoffset;

    #[repr(C, packed)]
    struct UnnecessarilyComplicatedStruct {
        member: [UnnecessarilyComplexStruct; 12]
    }

    #[repr(C, packed)]
    struct UnnecessarilyComplexStruct {
        a: u32,
        b: u64,
        c: [u8; 5]
    }

    fn main() {
        assert_eq!(offset_of!(UnnecessarilyComplicatedStruct, member[3].c[3]), 66);
    }

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g., `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g., `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g., `str,u8` or `String,struct:Vec,test`)