Передача по переменной через внешнюю библиотеку - PullRequest
0 голосов
/ 24 мая 2011

Как выполнить передачу по переменной в интерфейсной функции, предоставляемой библиотекой C?

Например, у меня есть следующая интерфейсная функция:
void f( double *d ) { *d = 7.5; }

В моемприложение, я связываюсь через эту библиотеку и вызываю функцию:
double p = 0;<br> f( &p );

Однако я заметил, что p по-прежнему равно 0, а не 7,5.

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Есть ли в вашем приложении прототип для f в области применения?

Если у вас его нет, компилятор преобразует адрес p в int;и если они не одинакового размера или используют одни и те же соглашения о передаче или что-то еще, у вас есть проблемы.

Вам следует #include "the_proper_header.h", или вы можете напрямую добавить прототип в свое приложение, прямо перед вызовом функции.

double p = 0;
void f(double *);
f( &p );
0 голосов
/ 24 мая 2011

Ваш пример сработал, см. http://codepad.org/JJL7eab5.

Единственное изменение, которое я сделал, было то, что я объявил f() перед его определением:

void f(double *);

Это также будет работать, если определение функции объявлено как статическое. В C функции должны быть либо объявлены до их определения, либо объявлены как статические.

...