假設我有一個帶有兩個引數的函式,其中第一個引數是動態的,但第二個引數在編譯時總是已知的:
uint8_t convert_bcd(uint8_t num, uint8_t mask) {
uint8_t result = mask & 0x0F & num;
if constexpr ((mask & 0xF0) != 0) // mask is known at compile time, can be optimized
result = 10 * ((mask & 0xF0 & num) >> 4);
return result;
}
示例用法
uint8_t result1 = convert_bcd(data[0], 0x7F);
uint8_t result2 = convert_bcd(data[1], 0x3F);
我想行內這個函式(如果可能)并告訴編譯器 if 條件,它只涉及第二個始終不變的引數,可以在編譯時決議。
我糊涂了與inline/ const/constexpr以及如何運用他們在我的情況下,優化功能,盡可能。
在 C 中正確的慣用方法是什么?
uj5u.com熱心網友回復:
寫一個模板。
template<uint8_t mask>
uint8_t convert_bcd(uint8_t num) {
uint8_t result = mask & 0x0F & num;
if constexpr ((mask & 0xF0) != 0)
result = 10 * ((mask & 0xF0 & num) >> 4);
return result;
}
uint8_t result1 = convert_bcd<0x7F>(data[0]);
uint8_t result2 = convert_bcd<0x3F>(data[1]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372501.html
標籤:C if-constexpr
