Как использовать глобальные переменные в проектах в решении? - PullRequest
1 голос
/ 20 апреля 2011

У меня есть решение C ++, в котором есть глобальная переменная, которую я хочу, чтобы она была доступна для всех проектов в файле решения.Я знаю, что это не рекомендуется, но как лучше всего это сделать?

Ответы [ 3 ]

2 голосов
/ 20 апреля 2011

Все проекты в решении - то есть вы строите несколько dll, сгруппированных в решение togetehr?

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

Альтернативный подход прост: создайте dll jsut для хранения общих переменных и оберните их в прагму. например, с эта ссылка :

#pragma data_seg (".myseg")
   int i = 0; 
   char a[32]n = "hello world";
#pragma data_seg()

тогда каждый из ваших различных dll может связываться с 'dll данных', dll данных будет содержать один экземпляр переменных независимо от того, сколько раз он загружен или в каком процессе. Счетчики производительности используют этот метод для быстрой передачи счетчиков данных между процессом, который генерирует данные, и perfmon.exe, который считывает и отображает их.

1 голос
/ 20 апреля 2011

Существует разница между модулем перевода и проектом (особенно в Visual Studio).

В C и C ++ вы можете сделать глобальную переменную доступной только из файла, в котором она объявлена, используя ключевое слово static перед объявлением. Глобальные переменные, которые не используют ключевое слово static, доступны из любого файла C или C ++, скомпилированного в программу.

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

В языке C не используется термин global, хотя в небольшой программе, содержащейся в одном файле, можно получить тот же эффект, объявив переменную вне всех функций (см. Ниже). Однако такую ​​переменную следует называть внешней, а не глобальной, поскольку ее область действия ограничена одним файлом.

Но вы можете перейти по этим ссылкам, чтобы узнать, сможете ли вы решить вашу конкретную проблему:

Глобальные переменные / функции в разных проектах

Общая глобальная переменная в статической библиотеке C ++

Как реализовать глобальную переменную процесса в C ++

1 голос
/ 20 апреля 2011

Определите переменную один раз в файле, который изначально имеет глобальную переменную, и объявите переменную extern в каждом файле, который ее использует.

Файл 1:

int GlobalVariable;

int main(int argc, char *argv[]) {
    // blablabla
}

Файл 2:

extern int GlobalVariable;

int somefunc(void) {
    // blablabla
}

Файл 3:

extern int GlobalVariable;

// blablabla
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...