我是C和NDK的新手,在我的应用中,我想保存并在不同文件之间共享一些数据。所以我制作了包含静态字段的.c文件。
当我在一个文件中使用它时效果很好,但是当我尝试在其他文件中使用它时,它没有我之前写过的数据。它看起来每个文件都在自己内部创建我的静态字段的新实例
修改
添加了.h文件。
代码test.h:
#ifndef IJKPLAYER_TEST_H
#define IJKPLAYER_TEST_H
void saveStartLoadingData();
int64_t getStartLoading();
void addToLoadingByte(int64_t bytesCount);
void endOfLoading();
void calculateAndSaveCurrentBitrate();
int64_t getDiff();
int64_t getLoadedBites();
int64_t getEndLoading();
int64_t getCurrentBitrate();
#endif //IJKPLAYER_TEST_H
test.c的:
#include "test.h"
#include <time.h>
static const int64_t ONE_SECOND= 1000000000LL;
extern int64_t start_loading;
extern int64_t end_loading ;
extern int64_t loaded_bytes;
extern int64_t currentBitrate;
extern int64_t diff;
int64_t now_ms() {
struct timespec now;
clock_gettime(CLOCK_MONOTONIC, &now);
return (int64_t) now.tv_sec*1000000000LL + now.tv_nsec;
}
void saveStartLoadingData(){
loaded_bytes = 0LL;
start_loading = now_ms();
}
int64_t getStartLoading(){
return start_loading;
}
void addToLoadingByte(int64_t bytesCount){
loaded_bytes += bytesCount;
}
void endOfLoading(){
end_loading = now_ms();
diff = end_loading - start_loading;
}
void calculateAndSaveCurrentBitrate(){
currentBitrate = loaded_bytes * ONE_SECOND/ diff;
loaded_bytes = 0;
}
int64_t getDiff(){
return diff;
}
int64_t getLoadedBites(){
return loaded_bytes;
}
int64_t getEndLoading(){
return end_loading;
}
int64_t getCurrentBitrate(){
return currentBitrate;
}
现在我以这种方式将其包含在其他文件中:
#include "test.h"
编辑2
新错误
libavformat/avio.c:430: error: undefined reference to 'getStartLoading'
libavformat/avio.c:431: error: undefined reference to 'getEndLoading'
libavformat/avio.c:432: error: undefined reference to 'getLoadedBites'
答案 0 :(得分:1)
您只能被允许一次包含.c文件。
如果您需要在另一个.c或.cpp文件中使用该.c文件中的变量或函数,则必须创建.h文件并将其包含在需要变量的文件中。您可以根据需要在.c或.cpp文件中包含.h文件。
在.h文件中写:
extern int64_t start_loading;
void saveStartLoadingData();
从.c文件中删除所有static
。