Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2010, 19:41   #1
gignet
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 19
По умолчанию доступ к переменной во всех файлах.

Ох уж эти строки... Как правильно объявить строку, чтобы она была доступна в других файлах. Подключается некоторый файле some_file.c к main.c. В файле some_file.c производятся необходимые действия над строкой str, нужно потом получить доступ к этой строке из main.c. Думал, что объявление выглядит следующим образом:
PHP код:
extern char str[50]; 
Но это не работает. Что писать?
gignet вне форума Ответить с цитированием
Старый 13.06.2010, 20:00   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Не знаю как с этим в Си, а в С++ это делается так:
1) Создаётся хедер, ну или берется какой готовый:
Код:
// MyHeader.h
#ifndef _MY_HEADER_H
#define _MY_HEADER_H

extern char str[50]; // Сообщаем компилятору, что такая переменная где-то есть. Это только описание, не сама переменная

#endif
во всех нужных файлах потом прописывается:
Код:
#include "MyHeader.h"
Ну и в одном файле пишется уже "реализация" переменной:
Код:
// MySource.cpp
#include "MyHeader.h"

char str[50]; // Это уже реализация переменной и именно на её адрес будут заменены все обращения к str из хедера MyHeader.h
pu4koff вне форума Ответить с цитированием
Старый 13.06.2010, 20:22   #3
gignet
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 19
По умолчанию

Подумал, что так и делается, но решил все же запостить, дабы точно убедиться, что сделал верно =). Спасибо! Только директивы препроцессора не нужны.
gignet вне форума Ответить с цитированием
Старый 13.06.2010, 20:57   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2gignet
нужны
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.06.2010, 20:57   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2gignet
нужны
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.06.2010, 21:13   #6
gignet
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 19
По умолчанию

И зачем же они? Может они нужны в каком-нибудь Билдере или ВижелСтудио?
Я вот об этом:
#ifndef _MY_HEADER_H
#define _MY_HEADER_H
gignet вне форума Ответить с цитированием
Старый 13.06.2010, 21:24   #7
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от gignet Посмотреть сообщение
И зачем же они? Может они нужны в каком-нибудь Билдере или ВижелСтудио?
Я вот об этом:
#ifndef _MY_HEADER_H
#define _MY_HEADER_H
Они нужны в любой программе на сях. Это защита от повторного включения кода хедера.
Другой вопрос, что в той же студии для этого есть специальная директива #pragma once
может и в вашем компиляторе такая есть, иначе он будет ругаться на повторное объявление переменной.
Проблема всплывет, когда в один *.с файл будет подключен один хедер дважды.
Код:
// MySource.c
#include "MyHeader.h"
#include "MyHeader.h" // Тут будет крик про дубликат переменных

...
Естественно в реальной жизни именно такого случая не будет, но один и тот же хедер может подключиться повторно через кучу посредников. Поэтому все хедеры нужно от этого защищать.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи на BAT-файлах Arigato Операционные системы общие вопросы 349 27.02.2024 15:21
Имя переменной как переменная. Как получить доступ к такой переменной? Denni Microsoft Office Access 8 02.04.2009 10:06
Как посчитать сумму строк во всех текстовых файлах? qwestor PHP 8 30.12.2007 16:02
Закрыть доступ для всех процессов к файлу Sanek_ntsk Общие вопросы Delphi 6 04.12.2007 16:26
Работа с файлами (создание, удаление, открытие, связываение с переменной, очищение памяти переменной) Arkuz Общие вопросы Delphi 12 25.09.2007 20:47