2015-06-01 5 views
0

У меня есть кодC: Как объединить глобальную переменную?

#include <stdio.h> 
#include <math.h> 

double x = round(3.2/2.0); 

int main() 
{ 
    printf("%f", x); 
} 

Когда я пытаюсь скомпилировать, я получаю инициализатор элемент ошибки не время компиляции постоянной. Без round, он компилируется без сучка и задоринки.

Я хочу округлить x, имея его как глобальную переменную. Это возможно?

+0

Если вы знаете точное значение, (round (3.2/2.0) = 2.0), зачем вы хотите сделать такой расчет в коде? И не просто 'double x = 2.0 // Получил это значение из раунда (3.2/2.0)'? – Timo

+0

Интересно, что GCC только выдает предупреждение вместо ошибки и когда используется '__builtin_round', он даже этого не делает. Но я предполагаю (и несколько надеюсь) не переносимый код GCC - это не-go. – cremno

ответ

3

В объектах C язык со статической продолжительностью хранения могут быть инициализированы только с интегральных констант. Вы не можете вызывать любые функции в интегральных постоянных выражениях.

Вам нужно будет найти способ генерации вашего значения через интегральное постоянное выражение. Что-то вроде этого могло бы работать

double x = (int) (3.2/2.0 + 0.5); 
+3

Примечание: этот подход обычно работает, за исключением 1) только в диапазоне 'int' или' long long' или любого другого целочисленного литья, 2) Только в положительном диапазоне, так как код должен быть '- 0.5', когда значение округленного значения отрицательное 3) «+0.5 и литье» всегда округляет положительные связи (на полпути) вверх, тогда как «round (some_FP)» может округлять некоторые связи. – chux

2

Вы не можете вызвать функцию в глобальном масштабе, попробуйте

#include <math.h> 

double x; 
int main(void) 
{ 
    x = round(3.2/2.0); 
    return 0; 
} 
+2

Почему '1.5' вместо' 3.2/2.0'? – Lundin

+0

Я просто использовал случайное значение, чтобы проиллюстрировать. –

Смежные вопросы