2015-08-15 3 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; 
} 
Смежные вопросы