Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2014, 14:05   #1
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию Как из блока кода объявить глобальную переменную?

Добрый день.
Есть такой код:
Код:
#include <iostream>
#include <ctime>

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    std::cout << "Локаль системы : " << setlocale(LC_ALL,0) << std::endl;

    if (argv[1] == "force") {
        register long long int clock_ms = 0;
        register short int last_ms = 0;
    } else {
        long long int clock_ms = 0;
        short int last_ms = 0;
    }

    for(;;) {
        if ((clock() % CLOCKS_PER_SEC) != last_ms) {
            last_ms = (clock() % CLOCKS_PER_SEC), clock_ms += 1;
            if ((clock_ms % 300) == 0) {
                std::cout << "300 passed" << std::endl;
            }
        }
    }

}
Его цель - сделать таймер на заданное количество миллисекунд.
Но, есть проблема.
Я захотел сделать выбор, и если программа запускается с ключом force, то главные переменные объявляются с модификатором хранения register.

Проблема в том, что вне блока код if эти переменные не видны.
Вопрос:
Как объявить переменные в блоке кода как глобальные?

P.s. Использую среду Mingw32 под Windows 7.
DakotaZ вне форума Ответить с цитированием
Старый 16.10.2014, 14:22   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Объявить переменные *перед* телом цикла (а не внутри).
waleri вне форума Ответить с цитированием
Старый 16.10.2014, 14:32   #3
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Объявить переменные *перед* телом цикла (а не внутри).
Посмотри на код еще раз, в обоих блоках разные типы объявления, первые с register, вторые без.
Объявить перед не вариант, ибо с одним именем они должны объявляться по разному в зависимости от ключа запуска.
DakotaZ вне форума Ответить с цитированием
Старый 16.10.2014, 20:58   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от DakotaZ Посмотреть сообщение
Вопрос:
Как объявить переменные в блоке кода как глобальные?
никак. класс хранения register не умеет глобальные переменные.
_Bers вне форума Ответить с цитированием
Старый 16.10.2014, 21:00   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от DakotaZ Посмотреть сообщение
Посмотри на код еще раз
Посмотри на свой вопрос еще раз. Вопрос "как сделать глобальные переменные" а не "как сделать одну и ту же переменную разного типа".


Нельзя сделать одну переменную разного типа runtime - все определяется во время компиляции.

Либо вставляйте два цикла в каждую ветку if, либо пишите шаблонную функцию, где будет выполнятся цикл а вызов будет из if с нужными параметрами.

В данном случае register вам особо не поможет а с данным алгоритмом будет 100% нагрузка на проц.
Гляньте на http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Последний раз редактировалось waleri; 16.10.2014 в 21:04.
waleri вне форума Ответить с цитированием
Старый 17.10.2014, 14:53   #6
DakotaZ
Пользователь
 
Регистрация: 31.07.2014
Сообщений: 48
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
В данном случае register вам особо не поможет а с данным алгоритмом будет 100% нагрузка на проц.
В чем будет нагрузка?
Приведенная Вами ссылка ведет на функции WinAPI, а это не кроссплатформенно вообще-то.
DakotaZ вне форума Ответить с цитированием
Старый 17.10.2014, 15:57   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от DakotaZ Посмотреть сообщение
В чем будет нагрузка?
Приведенная Вами ссылка ведет на функции WinAPI, а это не кроссплатформенно вообще-то.
В бесконечном цикле.
Изначально упоминалась Windows 7, поэтому.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как в DEBUG объявить переменную? nati_94 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 30.03.2013 20:56
Можно ли задать глобальную переменную из функции или как-то напрямую использовать память для хранения переменных из функции? Suny-o Общие вопросы Delphi 2 14.06.2012 11:45
организовать связь двух модулей через глобальную переменную m_kostik C++ Builder 1 06.12.2011 23:33
записать введенный текст в глобальную переменную при событии NotInList R Dmitry Microsoft Office Access 0 12.07.2010 00:20
почему-то в подключаемом модуле не видно глобальную переменную bat Общие вопросы C/C++ 4 23.08.2007 14:25