2015-08-15 60 views
0

我想知道是否可以創建使用自定義「移位」(或在編譯時創建它的其他方式)創建值的宏。我的意思是,連接兩個數字或東西...宏觀中的雙重科學記數法

類似的東西(當然它不工作):

#define CUSTOM_DOUBLE(shift) 1.05E shift 

我知道我可以做:

#define CUSTOM_DOUBLE(shift) 1.05 * pow(10.0, shift) 

但我意識到它不是在編譯時計算的。

回答

2

只要shift參數傳遞作爲整數常量(十進制形式)這可以通過操作者##實現,該串接預處理標記。例如,它可以實現爲:

#include <stdio.h> 

#define CUSTOM_DOUBLE(shift) (1.05E ## shift) 

int main(void) 
{ 
    double d = CUSTOM_DOUBLE(3); 

    printf("%E\n", d); 
    return 0; 
}