Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

Открыть новую тему     Написать ответ в эту тему

Crazy_Shrike



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вопросы по программированию на C/С++

 
  • Справочники, книги
  • Выбор IDE (среды программирования)
     
    Постарайтесь дать как можно больше информации о возникшей проблеме - это в конце концов в ваших же интересах чтобы вам помогли.

    Решения конкретных задач собираются и обсуждаются в теме Задачи по C/С++ .

    Прежде чем просить помощи в задании...
    Если позарез надо и вы даже готовы заплатить

    Как правильно задавать вопросы, если вы хотите получить ответ.

    Полезные ссылки:
    C++(eng)

  • Всего записей: 241 | Зарегистр. 25-03-2004 | Отправлено: 13:37 06-05-2004 | Исправлено: AZJIO, 19:45 12-05-2014
    mothes

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго всем утра!
    Хочу выразить огромную благодарность всем форумцам за оперативную и своевременную помощь. Вы лучшие!
    Спасибо так же администраторам и модераторам этого форума за это творение!
     
    -=ОТДЕЛЬНАЯ БЛАГОДАРНОСТЬ ФОРУМЦУ ПОД НИКОМ The Champion, ОГРОМНОЕ ВАМ СПАСИБО!!!=-
     
    C уважением mothes!

    Всего записей: 12 | Зарегистр. 20-10-2007 | Отправлено: 12:37 03-11-2007
    FMeat

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    День добрый.
     
    Небольшая предистория - я создал массив (неважно какой) задал ему значения при создании, скомпилировал программу ковырнул дизасамблером, и там ничег нет кроме выхода из маин (ну кроме стартапа есно).
     
    Небольшой вопрос - если переменная (массив в данном случае я понимаю как ряд переменных, расположенных в памяти друг за другом) не использовалась, то компилятор не будет её вставлять в ассемблерный листинг для дальнейшего использования в целях оптимизации?

    Всего записей: 30 | Зарегистр. 25-12-2006 | Отправлено: 15:15 05-11-2007
    WiseAlex



    Софтовых дел М...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FMeat
    код в студию
    если масссив создается так: int array[]={1,2,3,4}, то  инициализация происходит до main в стартапе
    если инициализация в main то компилятор может соптимизировать если эта переменная не используется.
    попробуй volatile - тогда компилятор, возможно, перестанет оптмизировать

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 15:41 05-11-2007
    FMeat

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    #include "iostream"
     
    using namespace std; //VS 2005 M$
     
    void main ()
    {
        int Array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    }

    Всего записей: 30 | Зарегистр. 25-12-2006 | Отправлено: 15:49 05-11-2007
    WiseAlex



    Софтовых дел М...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FMeat
    ты в debug смотрел или релизе ? если релиз то понятно если соптимизировано

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 16:09 05-11-2007
    FMeat

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Релиз.
     
    Как я понял вы ответили "да" на мой вопос? (Массив не был добавлен так как не использовался?)

    Всего записей: 30 | Зарегистр. 25-12-2006 | Отправлено: 17:31 05-11-2007
    Mr Nobody



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    FMeat
    Мой совет, во избежание в дальнейшем, не распологайте массив в стеке.

    Код:
     
    #include "iostream"  
     
    using namespace std; //VS 2005 M$  
     
    int Array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};  
     
    int main ()  
    {  
    /* ....*/
         return 0;
     }
     

     
    Тут вы увидете в деббагере свой массив.

    Всего записей: 350 | Зарегистр. 19-09-2007 | Отправлено: 17:52 05-11-2007
    WiseAlex



    Софтовых дел М...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mr Nobody

    Цитата:
    Мой совет, во избежание в дальнейшем, не распологайте массив в стеке.

    1) вопрос был про стэковый массив
    2) многие компиляторы достаточно сообразительны чтобы убрать и глобальный массив при оптимизации (правдаздесь скорее при оптимизации линковщика)
    3) кстати во избежании чего - придется писать везде static или безимянный namespace иначе тот код который приведен может вообще не собраться из-за повтора имен глобальных переменных. Кроме того чато ситуация такая, что нужно инициализация внутри функции.

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 18:01 05-11-2007
    FMeat

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Эм... Я чувствую себя ещё болие запутанным...
     
    1. Любой массив не объявленный как глобальная переменная являеться стековым?
    2. Он ведь "медленние" обычного?
    3. Как это регулируеться метками static и const?
    4. 2 Mr Nobody Дебагер?

    Всего записей: 30 | Зарегистр. 25-12-2006 | Отправлено: 18:53 05-11-2007
    Mr Nobody



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    WiseAlex

    Цитата:
    ) вопрос был про стэковый массив  

    Не оченьхорошая идея - массив в стэке. В общем, лет 10 назад, я писал программу, в которой массив портов АЦП отображался на массив двухбайтных целых.Вся идея была в том, что при прохождении элементов массива в памяти, адрес увеличивался, но ведь в стэковом массиве адрес уменшается с увелиением индекса.
     
    FMeat

    Цитата:
    1. Любой массив не объявленный как глобальная переменная являеться стековым?  

    Любой массив, объявленный в функции, является стэковвым.

    Цитата:
    2. Он ведь "медленние" обычного?  

    Почему?  

    Цитата:
    3. Как это регулируеться метками static и const?  

    Если использовать static, то массив определенный в функции не будет стэковым.  
     
     

    Всего записей: 350 | Зарегистр. 19-09-2007 | Отправлено: 19:14 05-11-2007
    WiseAlex



    Софтовых дел М...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mr Nobody

    Цитата:
    но ведь в стэковом массиве адрес уменшается с увелиением индекса.  

    неправда - посмотрите что происходит в отладчике. Если бы такое было, то эт нарушило бы все устои С. думаю Вы столкнулись с ошибкой компилятора
     

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 19:36 05-11-2007
    Mr Nobody



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    WiseAlex
    Вы правы.Вот я написал программку на Борланде

    Код:
     
    #include <stdio.h>
     
    int array_s[12] = {71, 2, 34, 84, 15, 6, 73, 18, 39, 10, 11, 23};
     
    int main()
    {
        int array_a[12] = {71, 2, 34, 84, 15, 6, 73, 18, 39, 10, 11, 23};
        int ii;
     
        for(ii = 0; ii < 12; ii++)
            printf("address: %p\n", &array_s[ii]);
     
        return 0;
    }
     

    которая показывает результат, согластно с вашим утверждением. Как я вспоминаю, там был микрокомпьютер на процессоре типа Z-80, конечно по мошней. А язык назывался Dynamic C. Короче потом у меня появилась стойкая прывычка распологать массив не в стэке, а в сегменте.

    Цитата:
    Если бы такое было, то эт нарушило бы все устои С.

    А что в С это нарушило бы?
     
     

    Всего записей: 350 | Зарегистр. 19-09-2007 | Отправлено: 21:29 05-11-2007
    FMeat

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем спасибо. Моя проблема решана благодоря вам.

    Всего записей: 30 | Зарегистр. 25-12-2006 | Отправлено: 22:18 05-11-2007
    WiseAlex



    Софтовых дел М...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mr Nobody

    Цитата:
    А что в С это нарушило бы?  

    итерация по массиву с помощью указателя и операции ++ да и вообще вся адресная арифметика с таким массивом пошла бы гулять

    Всего записей: 1001 | Зарегистр. 02-03-2003 | Отправлено: 12:38 06-11-2007
    Mr Nobody



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    WiseAlex

    Цитата:
    итерация по массиву с помощью указателя и операции ++ да и вообще вся адресная арифметика с таким массивом пошла бы гулять

    Точно, вспомнил, Это у меня и нарушалось.

    Всего записей: 350 | Зарегистр. 19-09-2007 | Отправлено: 18:46 06-11-2007
    BattleMage

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, товарищи. Доброго времени суток!
    У меня возникла такая проблема: как вообще пользоваться графикой в Си под ДОСом (Borland C++ 3.1)
    библиотеку graphics.h включать умею :)
     
    Скопировал прогу из хелпа стандартного, но она не пашет.
    Ошибки такие:
    undefined symbol _closegraph() in module ...\BAR.cpp
    undefined symbol _bar() in module ...\BAR.cpp
    undefined symbol _grapherrormsg() in module ...\BAR.cpp
    и так далее...
     
    Текст проги такой:

    Код:
     
    #include <graphics.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
     
    void main()
    {
     /* request auto detection */
     int gdriver = DETECT, gmode, errorcode;
     int midx, midy, i;
     
     /* initialize graphics and local variables */
     initgraph(&gdriver, &gmode, "");
     
     /* read result of initialization */
     errorcode = graphresult();
     /* an error occurred */
     if (errorcode != grOk)
      {
       printf("Graphics error: %s\n", grapherrormsg(errorcode));
       printf("Press any key to halt:");
       getch();
       return;
       /* terminate with an error code */
      }
     
     midx=320;
     midy=240;
    // midx = getmaxx() / 2;
    // midy = getmaxy() / 2;
     
     /* loop through the fill patterns */
     for (i=SOLID_FILL; i<USER_FILL; i++)
      {
       /* set the fill style */
    //   setfillstyle(i, getmaxcolor());
       /* draw the bar */
       bar(midx-50, midy-50, midx+50, midy+50);
       getch();
      }
     
     /* clean up */
     closegraph();
     return;
    }
     

     
    Содержимое папки BGI скопировал в папку с прогой (bar.cpp)

    Всего записей: 26 | Зарегистр. 16-11-2006 | Отправлено: 22:08 07-11-2007
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BattleMage

    Цитата:
    библиотеку graphics.h включать умею

    Не похоже.
    Options -> Linker -> Libraries -> Graphics library (поставить галку).

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 22:20 07-11-2007
    BattleMage

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пасиба большое!!!
     
    Добавлено:
    А как рисовать прямоугольники разными цветами?
     

    Код:
     
    #include <graphics.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
     
    void main()
    {
     int gdriver = DETECT, gmode, errorcode;
     initgraph(&gdriver, &gmode, "d:\\BC\\BGI");
     errorcode = graphresult();
     if (errorcode != grOk)
      {
       printf("Graphics error: %s\nPress any key to halt:", grapherrormsg(errorcode));
       getch();
       return;
      }
     bar(0,0,160,480);
     bar(320,0,480,480);
     getch();
     return;
    }
     

    Всего записей: 26 | Зарегистр. 16-11-2006 | Отправлено: 23:34 07-11-2007
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BattleMage

    Цитата:
    А как рисовать прямоугольники разными цветами?

    Использовать setfillstyle, задав нужный цвет и шаблон заполнения перед вызовом bar.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6077 | Зарегистр. 22-10-2005 | Отправлено: 20:35 08-11-2007
    sergeyt

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня непроходит компиляция что делать
     
    {
      if (_CrtReportBlockType(ptr) == P_CLIENT_BLOCK) {
        const PObject * obj = (PObject *)ptr;
        _RPT1(_CRT_WARN, "Class %s\n", obj->GetClass());
        hadCrtDumpLeak = true;
      }
     
      if (pfnOldCrtDumpClient != NULL)
        pfnOldCrtDumpClient(ptr, size);
    }
     
    Далее ошибка
     
    Compiling...
    object.cxx
    C:\ptlib\src\ptlib\common\object.cxx(1093) : error C2065: '_CrtReportBlockType' : undeclared identifier
    C:\ptlib\src\ptlib\common\object.cxx(1095) : warning C4127: conditional expression is constant

    Всего записей: 12 | Зарегистр. 20-12-2005 | Отправлено: 15:50 11-11-2007
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на C/С++


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru