Как типизировать глобальную переменную на языке C - PullRequest
0 голосов
/ 19 марта 2019

У меня есть глобальная переменная в заголовочном файле mem.h как:

extern int m_error;

Я объявляю это в моем файле mem.c как:

#include "mem.h"
int m_error;
void *init_mem(int size){
    void *ptr = mmap(/*arguments*/); //returns address and stores it in ptr
    //here I want m_error to store address stored in ptr
}

void free_mem(){
    printf("free memory: "); //I want it to print address returned by mmap() in init_mem function through m_error variable.
}

Я могу использовать только ОДНУ глобальную переменную m_error. Поэтому мой подход заключается в приведении типа m_error к чему-то, что может позволить ему хранить адрес, сохраненный в ptr.

1 Ответ

0 голосов
/ 19 марта 2019

int m_error может использоваться для хранения адреса с помощью:

m_error = (int)ptr;

Но, как предлагали другие комментарии, вы, как дизайнер, должны понимать, что это значит и почему это может иногда работать, а может и не работать в другое время. Все зависит от того, в каком диапазоне адресов работает ваша платформа.

Если вы не уверены, каков диапазон адресов, возвращаемый mmap () , вам нужно будет обеспечить защиту в вашей программе, чтобы предпринять соответствующие действия, если адрес находится вне диапазона int .

Если бы у меня был другой вариант, я бы передал значение указателя в функцию free_mem () , чтобы напечатать значение адреса.

...