Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: классы памяти
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Zelepuk
Здравствуйте!
Мне необходимо, чтобы переменная объявленная в файле my.c была видна так же в файле main.c

я делаю так

в my.c пишу:

int x;

в main.c пишу:

extern int x;

Это верное понимание спецификатора extern ?

Очень нужно убедиться.
Палыч
Да, верно
777777
Цитата(Zelepuk @ Aug 27 2011, 16:02) *
в main.c пишу:

extern int x;

Это верное понимание спецификатора extern ?

В принципе да, но более универсальный подход - помещать extern в .h файл и включать во все файлы проекта.
Lexy_one
Цитата(777777 @ Aug 30 2011, 12:26) *
В принципе да, но более универсальный подход - помещать extern в .h файл и включать во все файлы проекта.


В принципе да так более универсально... Но не для всех случаев... Например включив переменную в .h файл можно случайно изменить ее где не нужно, а не включив ее - таких ошибок можно избежать.
А вобще, с моей точки зрения лучше проанализировать - нужен ли доступ к данной перемменной в других файлах проекта. Если нужно, то я обращаюсь к ней через спец процедуры (типа: Read(Х) или Write(Х)).
А переменные со спецификатором extern пытаюсь по возможности не использовать.
Zelepuk
Цитата(777777 @ Aug 30 2011, 13:26) *
В принципе да, но более универсальный подход - помещать extern в .h файл и включать во все файлы проекта.


если я вас правильно понял то нужно сделать так

в .h файле:

extern int x;

в других файлах :

extern int x;

Это правильно?
MrYuran
Цитата(Zelepuk @ Aug 30 2011, 18:24) *
в других файлах :

#include xxx.h

Естественно, в .h-файле не забыть обертку-предохранитель
#ifndef NAME_H
#define NAME_H

... нужный текст

#endif
777777
Цитата(Zelepuk @ Aug 30 2011, 18:24) *
если я вас правильно понял то нужно сделать так

в .h файле:

extern int x;

в других файлах :

extern int x;

Это правильно?


Нет. В .h файле:

extern int x;

в одном из c-файлов:

int x;



Цитата(MrYuran @ Aug 30 2011, 18:35) *
Естественно, в .h-файле не забыть обертку-предохранитель

Это еще зачем? Такое бывает нужно в переполненных библиотеках, превратившихся за годы в спагетти. В твоем собственном проекте я думаю ты сам сможешь включать .h файл ровно по одному разу в каждый .c-файл.
MrYuran
Цитата(777777 @ Aug 30 2011, 19:03) *
Это еще зачем? Такое бывает нужно в переполненных библиотеках, превратившихся за годы в спагетти. В твоем собственном проекте я думаю ты сам сможешь включать .h файл ровно по одному разу в каждый .c-файл.

Весь смысл как раз в том, чтобы включать хедер модуля во все файлы, где используются функции/переменные данного модуля.
И в общем случае он может включаться много раз.
Ваш вариант проходит только в одном случае - когда к "толстому" мэйну подцепляются жиденькие довески.
Но это не всегда удобно, обычно между модулями возникает множество кросс-связей.
777777
Цитата(MrYuran @ Aug 30 2011, 19:19) *
Весь смысл как раз в том, чтобы включать хедер модуля во все файлы, где используются функции/переменные данного модуля.
И в общем случае он может включаться много раз.

Если h-файл включается в c-файлы, то много раз он не может включиться при всем желании. Такое возможно только если h-файл включен в другой h-файл. Но при правильном построении проекта это не требуется.
Сергей Борщ
QUOTE (777777 @ Sep 1 2011, 14:08) *
Такое возможно только если h-файл включен в другой h-файл. Но при правильном построении проекта это не требуется.
При правильном - как раз сплошь и рядом. Особенно в плюсах.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.