599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
|
||||||
1 | ||||||
Про синтаксис using15.10.2015, 23:59. Показов 2163. Ответов 18
Метки нет (Все метки)
Доброе время суток
Часто встречаю такую конструкцию:
0
|
15.10.2015, 23:59 | |
Ответы с готовыми решениями:
18
подскажите про синтаксис NOLOCK Задача про сокращенный синтаксис Вопрос про обновляемый запрос и итоговые данные, синтаксис DLookup... Где можно прочитать про использование и синтаксис баз данных DBISAM в Delphi? |
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
16.10.2015, 00:22 | 2 |
Сообщение было отмечено Mesteriis как решение
Решение
Нет. Если под "сборкой" вы понимаете Линковщик, то ему глубоко плевать до исходного текста. А #include - штука простая, деревенская. Это просто включение текста в код. И никакой другой мистики.
По поводу using - не отвечу точно. Это штука левая, Борланд сначала сделал Дельфу, там она что-то обозначала, компенсировала врожденные убожества Паскаля. Ну а потом ничего умнее не придумал, как всю эту заморочку в Борладд-Си++ перенести. Там многие глупости есть, объясняемые спешкой и небрежностью, ей сопутствующей.
1
|
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
|
|
16.10.2015, 00:33 [ТС] | 3 |
Байт, Примного благодарен, а тогда еще вопросик маленький, допустим из всей библиотеки я использую только одну функцию, есть ли возможность из всего "зверинца выбрать только зебру" то есть не переносить весь код библиотеки, или тут из сери хочешь кататься люби и саночки возить?
Добавлено через 4 минуты И вообще какой нибудь хороший ресурс не посоветуешь где можно прочитать про предпроцесор с++? А то интернет большой шлака очень много!
0
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
||||||
16.10.2015, 00:45 | 4 | |||||
В инклюдах и в самом тексте исходника вы можете объявлять хоть черта в ступе. Типа
И я вам советую подумать. коли вы задаете такие вопросы. Что у "компиляции" есть три стадии (это упрощенно, чтоб не ругались знатоки). Прекомпиляция (макроподстановка) - Собственно компиляция (перевод в машинные коды объектных модулей) - Линковщик (связывание ссылок на вызываемые функции с из кодами реализации)
2
|
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
|
|
16.10.2015, 00:49 [ТС] | 5 |
Байт, Чувство юмора у вас отменное сэр!))))
В любом случае спасибо за ответ!
0
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
16.10.2015, 00:50 | 6 |
Главный ресурс - собственная башка! Господи! Это так все просто, и столько всякой ерунды об этом можно написать! Но совсем не обязательно все это читать. Лично я прочел под стук колес на верхней полке плацкарта K&R, и ничего мне больше не надо.
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
16.10.2015, 08:41 | 8 |
Это абсолютно легальная и стандартная для С++ штука.
Внесение указанного имени в текущее пространство имен.
0
|
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
|
|
16.10.2015, 11:31 [ТС] | 9 |
Ilot, DrOffset, хорошо а чем тогда разница от using namespace std;
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
16.10.2015, 11:36 | 10 |
Сообщение было отмечено Mesteriis как решение
Решение
using namespace namespace_name; - вносит все имена из пространства имен namespace_name в текущее.
using namespace_name::some_name; - вносит только имя some_name из пространства имен namespace_name в текущее.
1
|
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
|
|
16.10.2015, 14:21 [ТС] | 11 |
DrOffset, OK, теперь все понял, спасибо за ответ
Добавлено через 2 часа 43 минуты DrOffset, Не не понял, точнее не въезщяю для какой цели так писать, коль мы знаем что функцией include я по сути переношу весь код из указанного файла/библиотеки в майн (ну или где он написан), то какой смысл писать усеченную конструкцию using, вместо using namespace. я не про то что они делаю, это я понял, я про то какие цели преследует программист когда использует using? Там ошибок в последствие меньше или еще что. Просто хочу понять логику. Или же это вообще не принципиально, и наследство разных стандартов? Там скажем когда то было только using а потом для упрощения ввели using namespace. Извените за тупой вопрос но просто хочу полностью разобраться!
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|||||||||||
16.10.2015, 14:59 | 12 | ||||||||||
Сообщение было отмечено Mesteriis как решение
Решение
Mesteriis, ответ напрямую зависит от того, осознаешь ли ты зачем вообще нужны namespace.
namespace - это инструмент уменьшения сложности программы (который, конечно же, можно применить неправильно и эту самую сложность увеличить ). Т.е. с помощью него можно произвести декомпозицию сущностей в соответсвии с их логическим назначением. Например, классы и функции для работы с сетью можно поместить в namespace network, классы для работы с файловой системой в namespace filesystem и т.д. При грамотном проектировании указание namespace должно не только защищать программиста от потенциальных конфликтов имен, но и подсказывать о принадлежности класса или функции то или иной логической составляющей программы. Точно так же и с std. Увидев std:: перед именем, можно сразу понять, что данное имя из стандартной библиотеки - соответственно понять где искать справку или вспомнить что эта функция делает. Теперь об отрицательных стронах. Декомпозиция - это хорошо, но иногда она мешает. Например, namespace может иметь вложенные namespac`ы, или слишком длинное имя. Поэтому повторять это каждый раз неудобно. Для решения этой проблемы служат различные using`и. Можно рассмотреть несколько ситуаций, например когда имена из неймспейса активно использутся в некой части программы, пространство имен имеет длинное имя, да еще и вложено в другое пространство имен. Для решения проблемы можно поступить двумя способами. Один я условно назову "хорошим" (потому что мой практический опыт говорит об этом), другой - "плохим" (по этой же причине). Хороший способ - сделать так:
Теперь по твоим предположениям: include включает текст, пофигу какой. include - это препроцессор, препроцессор - это вспомогательный язык, dsl. сущности С++ ему неведомы. namespace же - это языковое (С++) средство декомпозиции, которое в свою очередь ничего не знает про препроцессор. Конечно, человеку со стороны, незнакомому с историей развития С и С++, покажется странным, что вроде бы похожие механизмы работают совсем по-разному и даже слабо связаны друг с другом. Но лучше и не притрагиваться к С++, если не готов принять его историю В любом случае - эта проблема планируется к решению с помощью введения модулей. Всегда лучше использовать наиболее безопасный вариант при прочих равных. Знакомо выражение "из пушки по воробьям"? Если тебе не требуется использовать десятки имен из namespace в одном месте, то using namespace будет являться той самой пушкой. Думать надо в первую очередь о том, что если внесено разделение на разные неймспейсы, то, вероятно, не просто так. Нарушать правила можно, но только если есть на то основания. Поэтому если оснований нет, то лучше пользоваться более простыми средствами.
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
16.10.2015, 15:03 | 13 |
1. include - не функция, а директива препроцессору включить содержимое файла в текущий.
2. надо различать включение содержимого (через include) (по сути, просто текста, не зависимо от namespace) файла и сущностей (имен) из одного пространства (namespace) в текущее. Мне кажется у тебя просто нет понимания что такое пространство имен (namespace), отсюда и вопросы.
1
|
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
|
|
16.10.2015, 15:05 [ТС] | 14 |
Tulosba, Ну, скажем да, ты прав. по сути в с++ варюсь только 2й месяц.
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
16.10.2015, 15:10 | 15 |
А ещё можно применить плохой способ внутри заголовочного файла и сделать способ вовсе ужасным.
Тогда читай повествование от DrOffset внимательно. Но вообще, это всё в учебниках по языку есть.
0
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
16.10.2015, 15:13 | 16 |
Это точно
Особено если этот файл включается в паре сотен мест по всему проекту.
0
|
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
|
|
16.10.2015, 15:14 [ТС] | 17 |
Tulosba,
Не по теме: Не с учебниками у меня вообще плохо все, проще разбираться на конкретных примерах) Да и честно читать книги времени не особо(((( работа дети все такое
0
|
Tulosba
|
16.10.2015, 15:27
#18
|
0
|
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
|
|
16.10.2015, 15:34 [ТС] | 19 |
Tulosba,
Не по теме: да как бы мне 28, есть жена потомство хлопоты, да и работаю я вообще не по профилю программиста, я финансист, это так для души, да и себе мелкие программки пишу для облегчения жизни. До с++ как то обходился башскриптами, а сейчас понял что этого мало для моих хотелок. Вот и сижу по тихоньку ковыряюсь.
0
|
16.10.2015, 15:34 | |
16.10.2015, 15:34 | |
Помогаю со студенческими работами здесь
19
Как перевести синтаксис макроса VBA (Excel) в синтаксис Visual FoxPro Как перевести синтаксис Intel в синтаксис AT&T? (ассемблерная вставка в СИ) Синтаксис запросов vs. синтаксис методов И снова про PopupMenu (было про длину, теперь про ширину) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |