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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2015, 16:16   #31
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

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

что Вы думаете по этому поводу ?

в файле sasa1.cpp есть такой код

Код:

#include <stdio.h>
 

namespace

{

int x=666;

}

void f1() {printf("\n************* x  = %d\n",x);}
ради интереса запихнул в namespace переменную x

в файле 66.cpp есть такой код

Код:
#include <conio.h>

#include <stdio.h>

int x=777;

 void f1();

int main()

{

	printf("\n************* x = %d\n",x);

    f1();

	getch();

	return 0;
}

как я понял переменная x файла sasa1.cpp в блоке namespace доступна лишь только в этом файле ?

так ли это ? или опять туплю ?

заранее спасибо !!!

Stilet не наю почему не открывает.

может не ту ссылку открываю.

Последний раз редактировалось RAFA91; 10.05.2015 в 16:19.
RAFA91 вне форума Ответить с цитированием
Старый 10.05.2015, 18:17   #32
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

RAFA91,
Цитата:
x файла sasa1.cpp в блоке namespace доступна лишь только в этом файле ?
Думаю, можно так сказать.
Пример применения: допустим у вас есть файл common.hpp, в котором есть объявлены глобаный объект и функция, также у вас есть несколько файлов .cpp, в которых вы хотите использовать этот самый глобальный объект или функцию; вы включаете в оба файла ваш common.hpp и используете то что нужно, но при сборке программы, вы получите ошибку: multiplе definition, т.к. вы включили один и тот же заголовок в разные файлы. Чтобы решить эту проблему вы можете предварить определение объекта и функции спецификатором static или заключить оба в nameless namespace.

Последний раз редактировалось halcyon; 10.05.2015 в 18:20.
halcyon вне форума Ответить с цитированием
Старый 11.05.2015, 12:05   #33
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

halcyon переменные и функции со static тоже видны в пределах одного файла ?
RAFA91 вне форума Ответить с цитированием
Старый 13.05.2015, 21:02   #34
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
halcyon переменные и функции со static тоже видны в пределах одного файла ?
Если под словом файл, вы имеете ввиду единицу трансляции - .cpp файл реализации, тогда да. Можно сказать, что:
Код:
static  int x = 10;
static void foo() {}
, и
Код:
 namespace {
int x = 10;
void foo() {}
}
равнозначны. Вы не сможете получить доступ к объекту из другой единицы трансляции.
Но если, static object определен в .h файле, то при включении в разные .cpp, в разных .cpp он будет иметь разные адреса.
halcyon вне форума Ответить с цитированием
Старый 14.05.2015, 12:26   #35
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от halcyon Посмотреть сообщение
Если под словом файл, вы имеете ввиду единицу
Но если, static object определен в .h файле, то при включении в разные .cpp, в разных .cpp он будет иметь разные адреса.
имеете ввиду подключение с помощью include ?
RAFA91 вне форума Ответить с цитированием
Старый 14.05.2015, 12:42   #36
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

а вы другие знаете?
p51x вне форума Ответить с цитированием
Старый 15.05.2015, 12:09   #37
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

а чем же тогда отличие статич. перем. от глобальных ?
RAFA91 вне форума Ответить с цитированием
Старый 15.05.2015, 12:23   #38
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

глобальные переменные доступны из любой единицы трансляции, а статичные только из той, где они определены.

Може пора уже учебник прочесть?
waleri вне форума Ответить с цитированием
Старый 15.05.2015, 12:56   #39
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

увы там все в краце.

RAFA91 вне форума Ответить с цитированием
Старый 16.05.2015, 17:52   #40
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

тему не читал.

безымянные пространства имен используют в cpp файлах,
с целью сделать недоступным их содержимое за пределами данного cpp.

если просто определить в cpp файле переменную или функцию,
то к ним можно будет получить доступ снаружи.

но если определить их в безымянном спейсе, то это станет невозможным.
_Bers вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка пространства имен Dimka-novitsek Общие вопросы C/C++ 1 06.02.2014 14:59
Пространства имен С++ Jumb0 Помощь студентам 1 10.03.2013 19:49
Не удалось найти имя типа или пространства имен "IBM" Stilet Общие вопросы .NET 6 20.05.2012 13:23
Объявление пространства имен T@Rak0t Общие вопросы C/C++ 5 21.09.2010 09:58
проблема с подключением пространства имен whiskaz Помощь студентам 2 24.03.2010 22:40