Как связать две глобальные переменные с одним и тем же адресом, используя скрипт компоновщика, язык C? - PullRequest
1 голос
/ 14 марта 2020

В моем сценарии у меня есть два C файла. Первый файл - пользователь, а второй - поставщик.

Пример:

user.c
const int config_user;
void user(void) {
if (config_user == 1) {
    ... do something ...
    }
}

provider.c
cont int config_provider = 1;

В приведенном выше сценарии адрес config_provider должен совпадать с адресом config_user. Я сделал несколько попыток в сценарии компоновщика, но мне это не удалось. Я не могу использовать extern, я должен сделать это, используя ссылки памяти.

1 Ответ

0 голосов
/ 14 марта 2020

Это не дает прямого ответа на ваш вопрос, но я бы посоветовал определить функцию geter в provider.h:

const int *getConfigProvider(void);

и в поставщике. c

const int *getConfigProvider(void)
{
    static const int config_provider = 1;

    return &config_provider;
}

This каким-то образом инкапсулирует реализацию для потребителя и в конечном итоге достигает того, что вы ищете.

Примечание:

В случае int тип возврата getConfigProvider может быть просто int. В случае более сложного типа (структуры) лучше использовать const указатель на него.

...