2016-12-20 4 views
-3

Я работаю с большим проектом MPI. В одном из файлов (назовем его как one.c) У меня есть функция, как этот:C игнорирует возвращаемое значение

#include two.h 

void foo(){ 
    printf("the value is %f", bar(1)); 
} 

Где в файле two.h у меня есть (кроме других функций DEF):

double bar(int); 

Наконец, в файле two.c у меня есть (кроме других вещей):

static double a[2] = {0.0,4.0}; 

double bar(int temp){ 
    return a[temp]; 
} 

из приведенного выше кода, который я должен получить 4.0, но я получаю всегда 0.0, даже если я просто положить:

return 3.0; 

Я не могу понять эту проблему, потому что даже если в two.c я:

double bar(int temp){ 
    printf("temp is %d", temp); 
    return a[temp]; 
} 

я получаю 1 для температуры и [1] возвращает также 4,0. Поэтому проблема заключается в том, что соединение между файлами не прекращается. Есть идеи?

ПРИМЕЧАНИЕ: Как я уже сказал, это проект BIG MPI. Я не буду публиковать здесь весь код, потому что это не разумно. Я просто добавляю то, что я, хотя это было необходимо. Конечно, все связано, иначе я бы не спросил об этом. Я спрашиваю об этом, потому что это очень странно, что я, хотя какая-то странная вещь, может измениться из моих знаний. В конце я понял, что если я вызову еще одну двойную функцию в two.c, то, если я снова вызову свою функцию foo, я получу хорошую ценность, но все же я не знаю, почему, потому что, как я уже сказал, темп был признан, а [temp] имеет правильное значение.

NOTE2: Я думаю, что моя проблема заключалась в том, чтобы сделать mpi. Возможно, при сохранении файлов или когда я делал make, дата не обновлялась, а в конце - файлы, которые еще не были созданы.

+1

компилировать также со всеми предупреждениями и отладочной информации (например, 'gcc -Wall -Wextra -g', если вы используете [GCC] (http://gcc.gnu.org/)). Я предполагаю, что у вас будет предупреждение, и это должно быть полезно. –

+3

Обеспечьте [mcve]. Невозможно воспроизвести. – Stargateur

+0

Возможно ли, что компилятор не знает маршрут до двух.h? – ninjaRoche

ответ

0

Если я файлы one.c two.c и two.h вашей спецификации, добавьте

main.c:

void foo(); 
imt main(){ foo(); } 

компилировать:

for c in *.c; do gcc $c -c; done 

ссылку их

gcc *.o 

и запустить Результат

./a.out 

я получаю:

the value is 4.000000 
Смежные вопросы