我的軟件設計中存在兩個橫切問題。內存分配器跟蹤其結構(類)成員變量中的內存使用情況。我也有一個記錄器。現在我將記錄器和分配器傳遞給我的對象的構造函數。我可以保留對它們的引用,但是我必須在每個創建的結構(類)中都這樣做。這將是很好,如果他們是全球性的,但我不知道如何在C中做到這一點。我可以構造一個全局內存分配器,將正確跟蹤所使用的字節,而不傳遞給我的函數調用引用?C全局變量中的橫切關注
編輯: 我想在我的創建和銷燬函數中使用object_tracker作爲全局變量。當我編譯和測試下面的文件時,得到的結果是:我如何正確使用extern來獲取全局引用?
gcc -I ../include object_tracker.c test_file.c test_main.c -o test
./test
/tmp/ccuT8Z1A.o: In function `Test_Create':
test_file.c:(.text+0xb): undefined reference to `object_tracker'
/tmp/ccuT8Z1A.o: In function `Test_Destroy':
test_file.c:(.text+0x4b): undefined reference to `object_tracker'
collect2: error: ld returned 1 exit status
test_file.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "object_tracker.h"
#include "test_file.h"
struct Test* Test_Create() {
struct Test* test = (struct Test*)Object_Tracker_Obj_Alloc(object_tracker, 1, sizeof(struct Test));
test->foobar = 10;
return test;
}
void Test_Destroy(struct Test* test) {
if(test != NULL) {
Object_Tracker_Obj_Free(object_tracker, test);
}
}
test_file.h
#ifndef _TEST_FILE_H_
#define _TEST_FILE_H_
#include "object_tracker.h"
extern struct Object_Tracker* object_tracker;
struct Test {
int foobar;
};
struct Test* Test_Create();
void Test_Destroy(struct Test* test);
#endif
test_main.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "object_tracker.h"
#include "test_file.h"
int main(int argc, char* argv[]) {
struct Object_Tracker* object_tracker = Object_Tracker_Create();
struct Test* test = Test_Create();
Test_Destroy(test);
printf("heello\n");
}
是的,你可以將它分配給一個全局變量。 –
@oliver所以在我的主程序中,我可以分配全局結構。然後,我甚至可以在其他源文件中引用它? –
你爲什麼不試試看? – csmckelvey