今天在看 Nordic nRF52 的範例程式時看到這個用 union
來達成取資料結構最大值的做法,覺得滿有趣的,就記錄一下。
union data_size { uint8_t _data_a[32]; uint16_t _data_b[4]; struct data_c _data_c;};
#define DATA_SIZE_MAX sizeof(union data_size)
這是利用 union
的成員會共享同一個記憶體空間,而實際大小會是成員裡最大的那個,因此可以用它來取多個不同資料結構的最大值,藉此來宣告一個共同 buffer。當然實際使用根據編譯器和平臺的不同可能要考慮對齊。