Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 28.09.2013, 11:25   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 527
По умолчанию вопрос о extern до создания переменной

Здравствуйте.

Интересует вопрос, можно ли использовать extern в самом заголовочном файле, где описана структура, для которой extern и используется? В основном файле, создается сам массив структуры, которая описана в заголовочном файле... а есть второй .с файл, в нем тоже надо обращаться к массиву структуры, для этого мы подключаем заголовочный файл, где описана структура, и ниже юзаем extern чтобы наш массив был доступен... но что если этот extern прописать сразу в заголовочном файле структуры, чтобы нам лишний раз вручную не прописывать extern, а просто подключать заголовочный файл через include? Вопрос в следующем: главный файл main.c имеет подключение того же самого заголовочного файла, где описана структура, кроме того, там уже вперед идет extern, еще до создания самого массива, на который extern и ссылается... компилятор не ругается... можно ли так делать? Вот ниже пример:

заголовочный файл test.h

Код:
#include <stdio.h>

#define MAX 10

typedef struct
{
char name[32];
float p[3];
} test_s;

extern test_s test[MAX];

файл main.c

Код:
#include <stdio.h>
#include "test.h"

test_s test[MAX];

int main()
{
memset(test,0,MAX*sizeof(test[0]));
...
...
}

иными словами, получается такое:

Код:
extern test_s test[MAX];
test_s test[MAX];
Прошу опытных программистов подсказать, можно ли так делать?

Последний раз редактировалось Артэс; 28.09.2013 в 11:39.
Артэс вне форума Ответить с цитированием
Старый 28.09.2013, 20:14   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Работает?
extern говорит о том, что идентификатор видим не только там, где он объявлен... т.е внешняя (extern) линковка.
также, extern указывает компилятору, что выделение памяти для размещения значения, присущему некоторому объявленному идентификатору, следует отложить до непосредственного определения переменной.
extern int a; //укажем компилятору, что переменная будет описана далее
int a; // объявление + определение
Igor95 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по переменной egorzenit Общие вопросы Delphi 7 18.03.2012 20:21
Вопрос по работе с переменной egorzenit Общие вопросы Delphi 4 08.03.2012 11:36
проблема с внешней переменной(extern) djetx Общие вопросы C/C++ 3 16.12.2011 21:54
Адрес переменной: Вопрос Black-Sparkle Общие вопросы C/C++ 11 11.08.2009 13:59
Вопрос о типе переменной s1d0r Общие вопросы Delphi 4 17.06.2009 16:27


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS