Во-первых, не включайте файл .c
, просто создайте файл .h
с прототипом функции:
#include "CPML_profile.h"
.h содержит:
#pragma once
void CPML_profile(<... function parameters ...>);
Теперь n1
и n2
не являются глобальными переменными. Это локальные переменные из процедуры main
(которая ничем не отличается от другой процедуры, кроме того факта, что это точка входа вашей программы), вы не можете получить к ним доступ из другой процедуры или файла.
Переместить объявление n1
и n2
в глобальную область (но я бы не рекомендовал это решение)
int n1,n2;
int main(int argc, char* argv[])
{
в вашем случае, почему бы не передавать их в качестве параметров, поскольку вы уже передаете массив с плавающей точкой:
p1=calloc(n1,sizeof(float));
p2=calloc(n2,sizeof(float)); # BTW: another issue: you're not allocating p2 but p1 twice: ouch!!
CPML_profile(p1,p2,n1,n2);
сейчас:
void CPML_profile(float *p1, float *p2, int n1, int n2)
{
Это решение намного чище и позволяет использовать функцию в многопоточной среде / без необходимости использования глобальных символов для n1
и n2
Разные советы: компиляция с предупреждениями, вероятно, показала бы, что вы используете p2
неинициализированным.