Я работаю с большим проектом 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, дата не обновлялась, а в конце - файлы, которые еще не были созданы.
компилировать также со всеми предупреждениями и отладочной информации (например, 'gcc -Wall -Wextra -g', если вы используете [GCC] (http://gcc.gnu.org/)). Я предполагаю, что у вас будет предупреждение, и это должно быть полезно. –
Обеспечьте [mcve]. Невозможно воспроизвести. – Stargateur
Возможно ли, что компилятор не знает маршрут до двух.h? – ninjaRoche