Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1

Научиться искусству оптимизации кода

07.02.2013, 00:21. Показов 2391. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго вечера. Такой вопрос, может есть у кого свободная минутка и может научить правилу формирования кода, делать код более компактным и для других программистов более читаемым.
Мой код практически одинаковый для 3 кнопок,не знаю что можно заключить в процедуру. Код работает, но хочется научиться грамотно всё делать

C++
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
void __fastcall TForm1::btn1Click(TObject *Sender)
{
    Memo2->Clear();              //очистка
    Memo2->Lines->Add("");      //добавление строки
    if (i==1) {                //если i=1
        for( int i=0; i<mmo1->Lines->Count; i++ )
        {
            if (!mmo1->Lines->Strings[i].IsEmpty())   //исключаю пустые строчки
                if (!mmo1->Lines->Strings[i].Pos("#by lida"))
                {
                    stroka=mmo1->Lines->Strings[i];
                    int r=stroka.Pos("#");
                    AnsiString nach=stroka.SubString(r+1, stroka.Length()-r+1);
                    AnsiString kon=stroka.SubString(0, r-1);
                    Memo2->Lines->Add("[reader]");
                    Memo2->Lines->Add(" label = " + nach);
                    Memo2->Lines->Add(" enable = 1");
                    list->Delimiter=':';
                    list->DelimitedText=kon;
                    list2->Delimiter='/';
                    list2->DelimitedText=list->Strings[3].SubString(0, stroka.Pos("0")-1);
                    list2->Strings[2]= StringReplace(list2->Strings[2],"f","0",TReplaceFlags()<<rfReplaceAll);
                    list2->Delete(0);
                    String finde=list2->Strings[0].Trim();
                    String ident;
                    String a=" NTV";
                    if (nach.LowerCase().Trim()!= a.LowerCase().Trim())
                    {
                        for(int i=0; i<list3->Count; i++)
                        {
                            if(list3->Strings[i].Pos(finde))
                            {
                                ident=list3->Strings[i].Trim();
                                ident.Delete(1,5);
                            }
                        }
                    }
                    else
                    {
                        ident="040600,050100,050B00,050900,040610,040620";
                    }
                    list2->Strings[1]= (" CAID= "+ list2->Strings[0]);
                    list2->Delete(0);
                    list->Delete(3);
                    list->Strings[0]=" protocol = "+ list->Strings[0];
                    list->Strings[1]=" device = "+ list->Strings[1] + "," + list->Strings[2] ;
                    list->Strings[3]=" user = " + list->Strings[3];
                    list->Strings[4]=" password = "+ list->Strings[4];
                    list->Strings[5]=" key = " + list->Strings[5];
                    list->Delete(2);
                    Memo2->Lines->AddStrings(list);
                    Memo2->Lines->AddStrings(list2);
                    Memo2->Lines->Add(" IDENT="+ ident);
                    Memo2->Lines->Add( " inactivitytimeout = 20");
                    Memo2->Lines->Add( " reconnecttimeout = 10");
                    Memo2->Lines->Add(" fallback = 0");
                    Memo2->Lines->Add(" group = 1");
                    Memo2->Lines->Add("");
                    stat1->Panels->Items[3]->Text= ( "OSCAM - Готово!");
                }
        }
    }
    else
    {
        ShowMessage("Нажмите кнопку обновить!");
        stat1->Panels->Items[3]->Text= ( "OSCAM - Не готово!");
    }
    btn5Click(0);
    PlaySoundW( L"alert.wav", 0, SND_ASYNC );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    mmo3->Clear();
    mmo3->Lines->Add("");
    if (i==1) {
        for( int i=0; i<mmo1->Lines->Count; i++ )
        {
            if (!mmo1->Lines->Strings[i].IsEmpty())   //исключаю пустые строчки
                if (!mmo1->Lines->Strings[i].Pos("#by lida"))
                {
                    stroka=mmo1->Lines->Strings[i];
                    int r=stroka.Pos("#");
                    AnsiString nach=stroka.SubString(r+1, stroka.Length()-r+1);
                    AnsiString kon=stroka.SubString(0, r-1);
                    mmo3->Lines->Add("[reader]");
                    mmo3->Lines->Add(" label = " + nach);
                    list->Delimiter=':';
                    list->DelimitedText=kon;
                    list2->Delimiter='/';
                    list2->DelimitedText=list->Strings[3].SubString(0, stroka.Pos("0")-1);
                    list2->Strings[2]= StringReplace(list2->Strings[2],"f","0",TReplaceFlags()<<rfReplaceAll);
                    list2->Delete(0);
                    String finde=list2->Strings[0];
                    String ident;
                    String a=" NTV";
                    if (nach.LowerCase().Trim()!= a.LowerCase().Trim())
                    {
                        for(int i=0; i<list3->Count; i++)
                        {
                            if(list3->Strings[i].Pos(finde))
                            {
                                ident=list3->Strings[i];
                                ident.Delete(1,5);
                            }
                        }
                    }
                    else
                    {
                        ident="040600,050100,050B00,050900,040610,040620";
                    }
                    list2->Strings[1]= (" CAID= "+ list2->Strings[0]);
                    list2->Delete(0);
                    list->Delete(3);
                    list->Strings[0]=" protocol = "+ list->Strings[0];
                    list->Strings[1]=" device = "+ list->Strings[1] + "," + list->Strings[2] ;
                    list->Strings[3]=" Account = "+ list->Strings[3] + "," + list->Strings[4];;
                    list->Strings[5]=" key = "+ list->Strings[5];
                    list->Delete(2);
                    list->Delete(3);
                    mmo3->Lines->AddStrings(list);
                    mmo3->Lines->AddStrings(list2);
                    mmo3->Lines->Add(" IDENT="+ ident);
                    mmo3->Lines->Add(" ReconnectTimeout = 20");
                    mmo3->Lines->Add(" InactivityTimeOut = 15");
                    mmo3->Lines->Add(" fallback = 0");
                    mmo3->Lines->Add(" group = 1");
                    mmo3->Lines->Add("");
                    stat1->Panels->Items[2]->Text= ( "MPCS - Готово!");
                }
        }
    }
    else
    {
        ShowMessage("Нажмите кнопку обновить!");
        stat1->Panels->Items[2]->Text= ( "MPCS - НЕ готово!");
    }
    PlaySoundW( L"alert.wav", 0, SND_ASYNC );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button12Click(TObject *Sender)
{
    mmo4->Clear();
    if (i==1) {
        for( int i=0; i<mmo1->Lines->Count; i++ )
        {
            if (!mmo1->Lines->Strings[i].IsEmpty())   //исключаю пустые строчки
                if (!mmo1->Lines->Strings[i].Pos("#by lida"))
                {
                    stroka=mmo1->Lines->Strings[i];
                    int r=stroka.Pos("#");
                    AnsiString nach=stroka.SubString(r+1, stroka.Length()-r+1);
                    AnsiString kon=stroka.SubString(0, r-1);
                    list->Delimiter=':';
                    list->DelimitedText=kon;
                    list->Delete(3);
                    list->Strings[0]=list->Strings[0] + "525://" + list->Strings[3] + ":" + list->Strings[4] + "@" + list->Strings[1]  + ":" + list->Strings[2] +  ":" + list->Strings[5] ;
                    list->Delete(2);
                    list->Delete(3);
                    mmo4->Lines->Add(list->Strings[0]);
                    stat1->Panels->Items[4]->Text= ( "SNS - Готово!");
                }
        }
    }
    else
    {
        ShowMessage("Нажмите кнопку обновить!");
    }
    PlaySoundW( L"alert.wav", 0, SND_ASYNC );
}
//---------------------------------------------------------------------------
Что код делает:
Из такого вида строки
newcamd:127.0.0.1:5000:0/4AE1/ffff:tuner:tuner:01020304050607080910111 21314# oskam
Конвертирует её в формат 3 других программ для SatTV
1
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[reader]
 label =  oskam
 enable = 1
 protocol = newcamd
 device = 127.0.0.1,5000
 user = tuner
 password = tuner
 key = 0102030405060708091011121314
 CAID= 4AE1
 IDENT=
 inactivitytimeout = 20
 reconnecttimeout = 10
 fallback = 0
 group = 1
2

Code
1
2
3
4
5
6
7
8
9
10
11
12
[reader]
 label =  oskam
 protocol = newcamd
 device = 127.0.0.1,5000
 Account = tuner,tuner
 key = 0102030405060708091011121314
 CAID= 4AE1
 IDENT=
 ReconnectTimeout = 20
 InactivityTimeOut = 15
 fallback = 0
 group = 1
3
Code
1
newcamd525://tuner:tuner@127.0.0.1:5000:0102030405060708091011121314
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.02.2013, 00:21
Ответы с готовыми решениями:

Нужен совет в оптимизации кода
Нужно оптимизировать метод Deallocate, который переводит нужный указатель из allotted в exempted, и, если указателя нет, бросает ошибку. Я...

гигиеничность кода c# - научиться разделять код на файлы
Подскажите пожалуйста! Тут я не имею ввиду качественную: комментируемость\именование переменных\объектов\классов. Мне нужно как то...

Оптимизации кода
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;algorithm&gt; using namespace std; int main() { int n; cin &gt;&gt;...

30
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
07.02.2013, 00:48
Цитата Сообщение от Ddv122 Посмотреть сообщение
научить правилу формирования кода
Могу посоветовать писать таким образом чтоб в первую очередь тебе было легко в нем ориентироваться, и оптимизировать так чтоб при этом не утратилась читаемость. Влюбом случае главней синтаксис и логика. имхо
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
07.02.2013, 00:57  [ТС]
Свой код я понимаю, но и понимаю что 70% кода повторяется на 3 кнопках...
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
07.02.2013, 01:03
Положено типа класс-функцию создать и вызывать его когда нужно.
А мое мнение таково что раньше были проблемы с нехваткой памяти, поэтому все сводилось к минимуму, нынче память позволяет разгулятся, темнеменее многие программисты скажем так старой закалки, по привычке продолжают экономить.
1
 Аватар для Pirat-SR
67 / 67 / 10
Регистрация: 20.02.2012
Сообщений: 234
07.02.2013, 03:38
Цитата Сообщение от Ddv122 Посмотреть сообщение
Свой код я понимаю, но и понимаю что 70% кода повторяется на 3 кнопках...

А что Вам мешает прописать код который повторяется на 3 кнопках например в Label и сделать этому Labelу Enabled=false и Visible=false, а на сами кнопки прописать такой код LabelClick(Form1);
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
07.02.2013, 11:13  [ТС]
Pirat-SR, а смысл?Я же код хочу не скрыть а сделать более читаемым....и возможно более компактным...
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
07.02.2013, 11:16
Цитата Сообщение от Pirat-SR Посмотреть сообщение
А что Вам мешает прописать код который повторяется на 3 кнопках например в Label и сделать этому Labelу Enabled=false и Visible=false, а на сами кнопки прописать такой код LabelClick(Form1);
Чота ржу
И правильно, нафига просто функции использовать, когда всё можно пихнуть в label? А что ж не в Мемо? Или еще что поинтересней. Ну так, чтоб никто не догадался
1
 Аватар для Pirat-SR
67 / 67 / 10
Регистрация: 20.02.2012
Сообщений: 234
07.02.2013, 13:56
Ddv122, mimicria, А как тогда по вашему лучше оптимизировать код? У меня программа была примерно на тысячу строк. С лабелами я её оптимизировал на 400 строк. Так что Вам не нравиться что используются лабелы?

Добавлено через 24 минуты
С лабелом мне удалось обмануть компилятор. На одной кнопке было записано много строк с кодом. Я хотел добавить к этой кнопки код добавление фотографии в базу данных. Но выдавало ошибку где бы код который я хотел добавить ненаходился, а когда я записал этот код в лабел и записал направление к этому коду который в лабел в эту кнопку то всё заработало.
0
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
07.02.2013, 15:08  [ТС]
Pirat-SR, походу вы что то путаете, т.к я понимаю если SQL запрос будет в label куда не шло, а толку если вы часть исходника то в label вставите????
0
 Аватар для Pirat-SR
67 / 67 / 10
Регистрация: 20.02.2012
Сообщений: 234
07.02.2013, 15:18
Ddv122, А кто сказал что я использую SQL. Я локальную базу данных имею ввиду.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.02.2013, 15:27
Разделение задач на подзадачи оформление их в пространства имен, модули, классы, функции- это если про читаемость.

Собственно все как в учебниках по С++, блин забываю что читать не все умеют
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.02.2013, 15:48
Ddv122, вариантов много. К примеру для Button12 я бы так написал (для переформатирования строк)__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm1::Button12Click(TObject *Sender)
{
#define SS list->Strings
   mmo4->Clear(); list = new TStringList;
//  newcamd:127.0.0.1:5000:0/4AE1/ffff:tuner:tuner:0102030405060708091011121314# oskam
   if (i!=1) ShowMessage("Íàæìèòå êíîïêó îáíîâèòü!");
   else  for(int j=0; j<mmo1->Lines->Count; j++)
     if (mmo1->Lines->Strings[j].Pos("#by lida")==0) {
       ExtractStrings(TSysCharSet()<<':'<<'#'<<'\r'<<'\0',TSysCharSet(),
           mmo1->Lines->Strings[j].c_str(),list);
       mmo4->Lines->Add(String().sprintf(
         "%s525://%s:%s@%s:%s:%s ",SS[0],SS[4],SS[5],SS[1],SS[2],SS[6] ));
//  newcamd525://tuner:tuner@127.0.0.1:5000:0102030405060708091011121314
       stat1->Panels->Items[4]->Text= "SNS - Ãîòîâî!" ;
     }
//    PlaySoundW( L"alert.wav", 0, SND_ASYNC );
#undef SS
}
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.02.2013, 15:51
Когда это макросы считались читабельными в C++ ?

Ddv122, оформте код ввиде ф-ции... и не используйте в них непосредственно компоненты.
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.02.2013, 16:14
В данном конкретном случае никакого выигрыша от "универсализации" кнопки я не вижу. Форматы трех групп разные; по объему - небольшие, так что три обработчика для кнопок - приемлемо. Расслоение исходной фразы на список параметров при помощи ExtractString занимает одну строчку, так что не беда, если она повторится в каждом обработчике.
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
07.02.2013, 16:24  [ТС]
В принципе у меня тогда всё ок? и можно не заморачиваться?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.02.2013, 16:32
Ну лично я в исходном варианте сразу не разберу что является входным параметром что выходным...
И что если мне это потребуется перенести в консольное приложение, или dll или использовать для работы с файлом напрямую.

Добавлено через 7 минут
Код был бы куда яснее и удобнее для использования если оформить его в ф-цию к примру

C++
1
bool Functon( TStrings* In, TStrings* Out);
Естественно реализация ф-ции была была бы в отдельном модуле и возможно помещена в отдельном пространстве имен.

А вызов

C++
1
2
3
4
void __fastcall TForm1::btn1Click(TObject *Sender)
{
if( ! Functon (Memo1->Lines, Memo2->Lines) ) ShowMessage("Error");
}
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.02.2013, 16:36
Цитата Сообщение от Avazart Посмотреть сообщение
Ну лично я в исходном варианте сразу не разберу что является входным параметром что выходным...
И что если мне это потребуется перенести в консольное приложение, или dll или использовать для работы с файлом напрямую.
Когда злоупотребляют сослагательным наклонением, у меня уши в трубочку сворачиваются... .
А насчет "читабельности" моих макросов... Я просто подменил 13 символов аббревиатурой (СС - строка списка) и продолжаю считать, что куда как удобнее в одной строчке лицезреть шаблон выходной строки, оканчивающийся перечнем параметров (проиндексированных). Может предложите что-нибудь более изящное?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.02.2013, 16:43
Я про макросы вообще... он меняют что-то на что-то что само собой усложняет код
Если я вижу
C++
1
list->Strings[0]
Я без вопросов понимаю о каком объекте речь...
А если я вижу
C++
1
SS[0]
Я должен возвращаться каждый раз к макросу...

Пример не настолько грамостк что бы прибегать к макросам...
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.02.2013, 17:31
Цитата Сообщение от Ddv122 Посмотреть сообщение
В принципе у меня тогда всё ок? и можно не заморачиваться?
Ну, если очень захочется одним обработчиком, то примерно так можно сделать (у кнопок назначить Tag = 1, 2, 3):__
C++
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
void __fastcall TForm1::Button22Click(TObject *Sender)
{
#define SS list->Strings
    int varnt = ((TButton *)Sender)->Tag;
    list = new TStringList;
    nList = new TStringList;
    mmo4->Clear();
    if (i!=1) ShowMessage("Нажмите кнопку обновить!");
    else  for(int j=0; j<mmo1->Lines->Count; j++)
      if (mmo1->Lines->Strings[j].Pos("#by lida")==0) {
        ExtractStrings(TSysCharSet()<<':'<<'#'<<'\r'<<'\0',TSysCharSet(),
           mmo1->Lines->Strings[j].c_str(),list);
        if (varnt==3) mmo4->Lines->Add(String().sprintf(
          "%s525://%s:%s@%s:%s:%s ",SS[0],SS[4],SS[5],SS[1],SS[2],SS[6] ));
        else  {
          nList->Add("[reader]");
          nList->Add(" label = "+SS[7]);
          if(varnt==1) nList->Add("enable = 1");
          nList->Add(" protocol = "+SS[0]);
          nList->Add(" device = "+SS[1]+","+SS[2]);
          if(varnt==2) nList->Add(" Account = "+SS[4]+","+SS[5]);
          else  nList->Add(" user = "+SS[4]+"\r password = "+SS[5]);
          nList->Add(" key = "+SS[6]);
             . . .    и т.д.
        }
    }
#undef SS
}
1
Почемучка)
 Аватар для Ddv122
1244 / 304 / 30
Регистрация: 23.12.2010
Сообщений: 2,001
Записей в блоге: 1
07.02.2013, 18:07  [ТС]
Цитата Сообщение от Pirat-SR Посмотреть сообщение
С лабелами я её оптимизировал на 400 строк. Так что Вам не нравиться что используются лабелы?
Можно пример этой утилиты(исходника)??Уж очень мне интересно, как скомпилируется текст с label
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2013, 18:07
Помогаю со студенческими работами здесь

Методы оптимизации кода
Написал статью по оптимизации кода на С++. Ее можно почитать тут: А вы какие еще способы оптимизации кода знаете? (я не говорю про...

Советы по оптимизации кода
Написал парсер данных. Подскажите как можно было сделать проще? Стрелка должна быть в отдельной переменной. &lt;?php $a =...

Указания по оптимизации кода
Что скажете? Не будет сильно грузить? 24 экземпляра этого скрипта находятся в сцене. Критика поддерживается! P.S. Скрипт отвечает за...

Совет по оптимизации кода PHP
Здравтвуйте, уважаемые пользователя форума, прошу вашего совета, по более коректному наисанию нижеследующего кода: &lt;? require...

Нужен совет по оптимизации кода
Ребят, вот столкнулся с задачей написать небольшой код по нахождению наибольшего числа-палиндрома из определенного диапазона произведения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru