Russian Qt Forum
Ноябрь 23, 2024, 21:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Подстановка строк.  (Прочитано 5514 раз)
cya-st
Гость
« : Сентябрь 17, 2009, 11:49 »

Всем привет! Подскажите пожалуйста как или где в програме можно хранить и использовать строку большого размера. Например: #define MY_STR "kjsfdk...", но проблема в том что в дефайне я немогу переносить строку. Надеюсь я правильно выразился.
Записан
Barmaglodd
Гость
« Ответ #1 : Сентябрь 17, 2009, 11:57 »

Зачем define?

1. const char* (глобальная переменная)
2. сохранить в ресурс
3. сохранить в файл и читать из него
Записан
BRE
Гость
« Ответ #2 : Сентябрь 17, 2009, 12:08 »

Всем привет! Подскажите пожалуйста как или где в програме можно хранить и использовать строку большого размера. Например: #define MY_STR "kjsfdk...", но проблема в том что в дефайне я немогу переносить строку. Надеюсь я правильно выразился.

Так делать конечно не стоит.

На счет переноса строк в дефайнах:
Код
C++ (Qt)
#define DEF ...... \
                ...... \
                ......
Записан
cya-st
Гость
« Ответ #3 : Сентябрь 17, 2009, 12:13 »

Мне больше define нравится, почему его нежелательно использовать?
Цитировать
Так делать конечно не стоит.
Записан
spectre71
Гость
« Ответ #4 : Сентябрь 17, 2009, 12:37 »

Всем привет! Подскажите пожалуйста как или где в програме можно хранить и использовать строку большого размера. Например: #define MY_STR "kjsfdk...", но проблема в том что в дефайне я немогу переносить строку. Надеюсь я правильно выразился.
1) Насколько большого размера?
2) в дефайне можно переносить строку

Код:
#define MY_STR "1234567890" \
  "abcde" \
  "ABCDE"

3) Можно еще так

Код:
const char* MY_STR = "1234567890" 
  "abcde"     
  "ABCDE";
Записан
cya-st
Гость
« Ответ #5 : Сентябрь 17, 2009, 12:52 »

Цитировать
1) Насколько большого размера?
Размер гдето до 30кБ.
Записан
BRE
Гость
« Ответ #6 : Сентябрь 17, 2009, 13:04 »

Мне больше define нравится, почему его нежелательно использовать?
define исторически остался от C. Сейчас рекомендуется вместо него использовать enum и const.

#define это макрос, т.е. все что идет за ним просто подставляется в текст программы место его имени.
С этим могут быть проблемы:
Код
C++ (Qt)
#defien NUM 10 + 10
int val = NUM * 2;
 
эта конструкция развернеться в:
Код
C++ (Qt)
int val = 10 + 10 * 2;
 
Соответственно результат будет не 40, как хотелось бы, а 30.
С константой такое произойти не может.

#define A 10.123

Константа расположена в одном месте, макрос же будет подставлять это число там где будет прописано имя макроса. Для чисел с плавающей точкой это меннее эффективно.
Также для строк. Если макрос будет использован в нескольких файлах, копия этой строки будет в каждой объектной единице (хотя компилятор сможет это оптимизировать, но это будет заслуга компилятора).

Нет проверки типов на этапе компиляции. У константы задается тип, который компилятор сможет проверить, у макроса его нет.

Макрос не принадлежит пространствам имен.

Сейчас не вспомню все проблемы, но они есть.
« Последнее редактирование: Сентябрь 17, 2009, 13:05 от BRE » Записан
spectre71
Гость
« Ответ #7 : Сентябрь 17, 2009, 13:09 »

Цитировать
1) Насколько большого размера?
Размер гдето до 30кБ.
Ничего страшного.
Если подстановка в одном файле(в одном obj), можешь использовать define, если в несколько, то лучше const char*
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Сентябрь 17, 2009, 13:25 »

Цитировать
1) Насколько большого размера?
Размер гдето до 30кБ.
Однозначно, ресурсы - лучший вариант. Можно также использовать их как утилиту:

- добавляем файл 30Kb в qrc и обновляем проект - создан qrc_MyPrj.cpp файл

- из созданного файла забираем уже оформленные данные, нет никаких проблем с переводами строк и т.п.

Хотя и просто загрузить из ресурса - одно удовольствие
Записан
cya-st
Гость
« Ответ #9 : Сентябрь 17, 2009, 13:25 »

Всем спасибо за помощь. Буду использовать const char*.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.161 секунд. Запросов: 23.