C ++ - статическая переменная - PullRequest
1 голос
/ 12 декабря 2011

в моем приложении c ++ dll я хочу определить переменный байт, значение которого будет инициировано в dll init со случайным значением, а затем оно будет содержать то же значение в течение жизни dll.

  1. каково определение для этой переменной?
  2. где я должен инициировать его в коде (где находится инициализация библиотеки)

спасибо.

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011
  1. это то же самое, что и определение нормальной глобальной переменной.

  2. в dllmain: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx

Кстати, я предлагаю вам использовать функцию, возвращающую статическую переменную вместо глобальной переменной.

0 голосов
/ 12 декабря 2011
  1. Либо статический член класса (доступный из любого места), либо статический элемент области имен файлов или анонимный элемент пространства имен (доступный только из этого модуля компиляции).

    1. Статический классчлен:

      в .h:

      class Foo {
          //...
          static char random_byte;
          //...
      };
      

      в .cpp:

      char Foo::random_byte = init_random_byte();
      
    2. Статическая область действия файла:

      static char random_byte = init_random_byte();
      
    3. Анонимный член пространства имен:

      namespace {
          //...
          char random_byte = init_random_byte();
          //...
      }
      
  2. В C ++ инициализатор может быть произвольным выражением, и среда выполнения обязательно выполнитзапустить до функции main();в случае разделяемой библиотеки, когда она загружена.Просто помните, что эти выражения инициализации вызываются в порядке появления в модуле компиляции (один .cpp), но инициализация из разных модулей компиляции будет выполняться в случайном порядке, поэтому убедитесь, что они не зависят друг от друга.Они могут зависеть от переменных, инициализированных для уже инициализированных констант.

...