Site Tools


extern

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

доступ к переменной другого файла

main.cpp

  #include "B.h"
  
  int i = 13;
  
  int main(int argc, char *argv[])
  {
      foo();
      qDebug() << i;
      return 1;//a.exec();
  }

B.h

  int foo();

B.cpp

  extern int i;
  // extern int i = 99; //является ошибкой. Совмещать extern с присвоением, запрещено.
  
  int foo(){
      qDebug() << i;
      i = 98;
      return 1;
  }

вывод:

13 
98 

Примечание: Даже без extern, глобальными переменными с одинаковым именем в разных файлах, воспользоваться не получится - не компилятор, а линковщик выдаст ошибку.

досутп к функции другого файла

main.cpp

  //include отсутствует, линковщик линкует с B.cpp
  
  void foo();
  //extern void foo(); // оба варианта объявляения являются корректными.
  
  int main(int argc, char *argv[])
  {
      foo();
      return 1;//a.exec();
  }

B.cpp

  void foo(){
      qDebug() << "foo from B.cpp";
  }

Пример получения ошибки

ошибка от линковщика в случае использования глобальное переменой с одним именем в разных файлах.

(.data+0x0):-1: error: multiple definition of `i'
(.data+0x0):-1: error: first defined here
:-1: error: collect2: error: ld returned 1 exit status
You could leave a comment if you were logged in.
extern.txt · Last modified: 2013/04/06 03:42 by konovalov

Page Tools