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

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

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

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

Ответ
 
Опции темы
Старый 28.09.2013, 12:25   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 526
По умолчанию вопрос о 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 в 12:39.
Артэс вне форума   Ответить с цитированием
Старый 28.09.2013, 21:14   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


08:34.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.