У меня есть странная проблема, когда иногда эта функция не всегда работает, а работает, только если она объявлена в тех же заголовках, где она вызывается ... Это действительно странная вещь, потому что компилятор кажется дажеигнорирует, включены ли файлы, содержащие функцию, или нет ...
double mapRange(double value, double r1, double r2, double n1, double n2)
{
double res = n1+(value-r1)*((n2-n1)/(r2-r1));
printf("dividingby: %f", res);putchar('\n');
return res;
}
, как вы можете видеть, когда он печатает правильное значение, однако, когда я печатаю возвращенное значение из другой функции, такой как main, я получаю мусорцифры ... Хуже всего то, что я протестировал его на файле сам по себе, и он работал безупречно, я знаю, что это похоже на ошибку с моей стороны, но я действительно не могу найти объяснение этому ... Кто-то сталкивался с чем-то подобным?Мой компилятор сломан?Есть ли какие-то ограничения в C, о которых я не знаю?Я также знаю, что у меня не так много кода, чтобы предложить, чем этот, что делает его трудным для диагностики, но это из довольно небольшого проекта для унив ...
РЕДАКТИРОВАТЬ 1:Хорошо, так что
// main.c
#ifndef UTIL_H
#define UTIL_H
#include "util.h"
#endif /*UTIL_H*/
int main(int argc, char *argv[]) {
Matrix* volcan = readVolcano("test.txt");
double t;
mapRange(7.0, 1.0, 9.0, 0.0, 1.0,&t);
printf("%f\n..\n", t);
mat_printinfo(volcan);
mat_printmat(volcan, NULL);
weighted_volcano(volcan, NULL, NULL, NULL);
mat_free(volcan);
return 0;
}
// util.c
#include "util.h"
/*
Retorna una transformacion de value que esta entre r1 y r2 a un valor que esta
entre n1 y n2, con tal que tenga la misma relacion con el rango [n1, n2] como
value tenga con el rango [r1, r2]
*/
double mapRange(double value, double r1, double r2, double n1, double n2, double* result)
{
double res = n1+(value-r1)*((n2-n1)/(r2-r1));
printf("dividingby: %f", res);putchar('\n');
if(result!=NULL)
*result = res;
return res;
}
Я абсолютно уверен, что в определении нет дубликата, яМы также много раз перестраивали проект ...
D:\Code\C\volcan\cc1.exe [Warning] command line option '-std=c++11' is valid for C++/ObjC++ but not for C
D:\Code\C\volcan\main.c In function 'main':
52 19 D:\Code\C\volcan\main.c [Warning] initialization makes pointer from integer without a cast
D:\Code\C\volcan\main.c In function 'open_volcano':
91 7 D:\Code\C\volcan\main.c [Warning] assignment makes pointer from integer without a cast
D:\Code\C\volcan\main.c In function 'test_volcano':
119 13 D:\Code\C\volcan\main.c [Warning] assignment makes pointer from integer without a cast
D:\Code\C\volcan\cc1.exe [Warning] command line option '-std=c++11' is valid for C++/ObjC++ but not for C
D:\Code\C\volcan\volcantobmp.c In function 'weighted_volcano':
38 6 D:\Code\C\volcan\volcantobmp.c [Warning] assignment makes pointer from integer without a cast
40 6 D:\Code\C\volcan\volcantobmp.c [Warning] assignment makes pointer from integer without a cast
D:\Code\C\volcan\cc1.exe [Warning] command line option '-std=c++11' is valid for C++/ObjC++ but not for C
выходные данные IDE
РЕДАКТИРОВАТЬ 2: Так что, похоже, проблема была здесь
// util.ч
#include "headers.h"
было пусто ...