С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 1
Регистрация: 12.08.2014
Сообщений: 65

Как улучшить свой код и его структуру?

24.10.2016, 18:17. Показов 1617. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Изучил основы С++, сейчас активно изучаю SFML, Qt и глядя на код других людей я замечаю что мой код заведомо отличается, (хотя по сути то он и не должен быть похож), какие общие рекомендации есть? есть статьи по этому поводу? а не книги, для книг очень мало времени.

Пример кода (вдруг интересно):
Кликните здесь для просмотра всего текста

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
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
#include "makeworldtemplate.h"
 
MakeWorldTemplate::MakeWorldTemplate(){
    m_mapWayHeight = 0;
    m_mapWayWidth = 0;
 
    m_TemplateWidth = 0;
    m_TemplateHeight = 0;
 
    m_GlobalMap = nullptr;
 
    m_dirTemplList = "NONE";
}
 
void MakeWorldTemplate::startMakeGameWorld(MWT_SI **mapWay, MWT_USI width, MWT_USI height){
    templsMap LR, UD, LUR, LDR; // Создание обьектов с шаблонами
 
    m_mapWayWidth = width;
    m_mapWayHeight = height;
 
    if (m_dirTemplList == "NONE")
        return;
 
    pugi::xml_document listTemplates;
 
    std::string file(m_dirTemplList.c_str());
 
    if (!listTemplates.load_file(file.c_str()))
        std::cout << "Error load file: " << file << std::endl;
 
    m_TemplateHeight = listTemplates.child("LoadTemplates").attribute("height").as_uint();
    m_TemplateWidth = listTemplates.child("LoadTemplates").attribute("width").as_uint();
 
    m_GlobalMapWidth = m_mapWayWidth * m_TemplateWidth;
    m_GlobalMapHeight = m_mapWayHeight * m_TemplateHeight;
 
    m_GlobalMap = new MWT_SI*[m_GlobalMapHeight];
    for (MWT_USI i = 0; i < m_GlobalMapHeight; i++)
        m_GlobalMap[i] = new MWT_SI[m_GlobalMapWidth];
 
    for (MWT_USI i = 0; i < m_GlobalMapHeight; i++)
        for (MWT_USI j = 0; j < m_GlobalMapWidth; j++)
            m_GlobalMap[i][j] = 1;
 
    pugi::xml_node LoadTemplates = listTemplates.child("LoadTemplates");
    pugi::xml_node Load = LoadTemplates.child("Load");
 
    while (Load){
        if (strcmp(Load.attribute("type").as_string(), "LR") == 0)
            LR.addTemplatesOfFile(Load.attribute("directory").as_string());
 
        if (strcmp(Load.attribute("type").as_string(), "UD") == 0)
            UD.addTemplatesOfFile(Load.attribute("directory").as_string());
 
        if (strcmp(Load.attribute("type").as_string(), "LUR") == 0)
            LUR.addTemplatesOfFile(Load.attribute("directory").as_string());
 
        if (strcmp(Load.attribute("type").as_string(), "LDR") == 0)
            LDR.addTemplatesOfFile(Load.attribute("directory").as_string());
 
        //std::cout << Load.attribute("type").as_string() << std::endl;
 
        Load = Load.next_sibling("Load");
    }
 
    if (LR.m_Data.empty()){
        std::cout << "LR EMPTY";
        return;
    }
    if (UD.m_Data.empty()){
        std::cout << "UD EMPTY";
        return;
    }
    if (LUR.m_Data.empty()){
        std::cout << "LUR EMPTY";
        return;
    }
    if (LDR.m_Data.empty()){
        std::cout << "LDR EMPTY";
        return;
    }
 
     //* LR - Left, Right
     //* UD Up, Down
     //* LUR Left, Up, Right
     //* LDR Left, Down, Right
 
    srand(time(0));
 
    MWT_USI cursorPosX = 0, cursorPosY = 0, posY = m_TemplateHeight, posX = 0;
 
    for (int i = 0; i < m_mapWayHeight; i++){
        for (int j = 0; j < m_mapWayWidth; j++){
            cursorPosX = posX;
            cursorPosY = posY;
 
            if (mapWay[i][j] == 1){ // LEFT RIGHT
                MWT_SI **tempTemplate = LR.getRandomTemplate();
                for (int ii = 0; ii < m_TemplateHeight; ii++){
                    for (int jj = 0; jj < m_TemplateWidth; jj++){
                        if (tempTemplate[ii][jj] == 2)
                            tempTemplate[ii][jj] = rand()%2;
 
                        m_GlobalMap[cursorPosY][cursorPosX] = tempTemplate[ii][jj];
 
                        ++cursorPosX;
                        if (cursorPosX >= posX+m_TemplateWidth){
                            cursorPosX = posX;
                            cursorPosY++;
                        }
                    }
                }
            }
 
            if (mapWay[i][j] == 2){ // UP DOWN
                MWT_SI **tempTemplate = UD.getRandomTemplate();
                for (int ii = 0; ii < m_TemplateHeight; ii++){
                    for (int jj = 0; jj < m_TemplateWidth; jj++){
                        if (tempTemplate[ii][jj] == 2)
                            tempTemplate[ii][jj] = rand()%2;
                        m_GlobalMap[cursorPosY][cursorPosX] = tempTemplate[ii][jj];
 
                        cursorPosX++;
                        if (cursorPosX >= posX+m_TemplateWidth){
                            cursorPosX = posX;
                            cursorPosY++;
                        }
                    }
                }
            }
 
            if (mapWay[i][j] == 3){ // LEFT UP RIGHT
                MWT_SI **tempTemplate = LUR.getRandomTemplate();
                for (int ii = 0; ii < m_TemplateHeight; ii++){
                    for (int jj = 0; jj < m_TemplateWidth; jj++){
                        if (tempTemplate[ii][jj] == 2)
                            tempTemplate[ii][jj] = rand()%2;
                        m_GlobalMap[cursorPosY][cursorPosX] = tempTemplate[ii][jj];
 
                        cursorPosX++;
                        if (cursorPosX >= posX+m_TemplateWidth){
                            cursorPosX = posX;
                            cursorPosY++;
                        }
                    }
                }
            }
 
            if (mapWay[i][j] == 4){ // LEFT DOWN RIGHT
                MWT_SI **tempTemplate = LDR.getRandomTemplate();
                for (int ii = 0; ii < m_TemplateHeight; ii++){
                    for (int jj = 0; jj < m_TemplateWidth; jj++){
                        if (tempTemplate[ii][jj] == 2)
                            tempTemplate[ii][jj] = rand()%2;
                        m_GlobalMap[cursorPosY][cursorPosX] = tempTemplate[ii][jj];
 
                        cursorPosX++;
                        if (cursorPosX >= posX+m_TemplateWidth){
                            cursorPosX = posX;
                            cursorPosY++;
                        }
                    }
                }
            }
 
            posX += m_TemplateWidth;
        }
 
        posX = 0;
        posY += m_TemplateHeight-1;
    }
}
 
void MakeWorldTemplate::setTemplateFileList(std::string size){
    std::ostringstream file;
    file << "data/world_templates/load_";
    file << size << "_templates.xml";
 
    m_dirTemplList = file.str();
}
 
void MakeWorldTemplate::saveMap(char *fileName){
    pugi::xml_document doc;
 
    if (!doc.load_file("data/savingSettings/save_map_Template.xml")){
        std::cout << "Error load file: " << "data/savingSettings/save_map_Template.xml\n";
        return;
    }
 
    pugi::xml_node map = doc.child("map");
    pugi::xml_node template_sizes = map.child("template_sizes");
    pugi::xml_node map_data = map.child("map_data");
 
    map.attribute("name").set_value("NO_NAME");
    map.attribute("width").set_value(m_GlobalMapWidth);
    map.attribute("height").set_value(m_GlobalMapHeight);
 
    template_sizes.attribute("width").set_value(m_TemplateWidth);
    template_sizes.attribute("height").set_value(m_TemplateHeight);
 
    std::ostringstream fileDirectory;
    fileDirectory << "data/world_templates/load_";
    fileDirectory << m_GlobalMapWidth << "x" << m_GlobalMapHeight;
    fileDirectory << "_templates.xml";
 
    template_sizes.attribute("directory").set_value(fileDirectory.str().c_str());
 
    std::ostringstream tempMap;
 
    for (int i = 0; i < m_GlobalMapHeight; i++){
        for (int j = 0; j < m_GlobalMapWidth; j++){
            tempMap << m_GlobalMap[i][j];
        }
        tempMap << "\n";
    }
 
    map_data.text().set(tempMap.str().c_str());
 
    std::string directory("data/save_data/maps/");
 
    if (fileName == nullptr){
        doc.save_file(GenFileName::getRandFileName(10, directory, "xml").c_str());
    } else {
        directory += fileName;
        directory += ".xml";
        map.attribute("name").set_value(fileName);
 
        doc.save_file(directory.c_str());
    }
 
}
 
void MakeWorldTemplate::loadMap(std::string fileName){
    pugi::xml_document doc;
 
    if (m_GlobalMap != nullptr){
        for (int i = 0; i < m_GlobalMapHeight; i++)
            delete [] m_GlobalMap[i];
        delete [] m_GlobalMap;
    }
 
    std::string file("data/save_data/maps/");
    file += fileName;
    file += ".xml";
 
    doc.load_file(file.c_str());
 
    pugi::xml_node map = doc.child("map");
    pugi::xml_node template_sizes = doc.child("template_sizes");
    pugi::xml_node map_data = map.child("map_data");
 
    m_GlobalMapWidth = map.attribute("width").as_uint();
    m_GlobalMapHeight = map.attribute("height").as_uint();
 
    m_TemplateWidth = template_sizes.attribute("width").as_uint();
    m_TemplateHeight = template_sizes.attribute("height").as_uint();
    m_dirTemplList = template_sizes.attribute("directory").as_string();
 
    std::string TempMapData;
    TempMapData = map_data.text().as_string();
 
    m_GlobalMap = new MWT_SI*[m_GlobalMapHeight];
    for (MWT_USI i = 0; i < m_GlobalMapHeight; i++)
        m_GlobalMap[i] = new MWT_SI[m_GlobalMapWidth];
 
    int inStrinng = 0;
    for (MWT_USI i = 0; i < m_GlobalMapHeight; i++){
        for (MWT_USI j = 0; j < m_GlobalMapWidth; j++){
            if (TempMapData[inStrinng] == '0'){
                m_GlobalMap[i][j] = 0;
                ++inStrinng;
            } else {
                m_GlobalMap[i][j] = 1;
                ++inStrinng;
            }
            if (TempMapData[inStrinng] == '\n'){
                inStrinng++;
            }
        }
    }
 
}
 
MakeWorldTemplate::MWT_SI** MakeWorldTemplate::getWorld(){
    return m_GlobalMap;
}
 
MakeWorldTemplate::MWT_USI MakeWorldTemplate::getWorldWidth() const{
    return m_GlobalMapWidth;
}
 
MakeWorldTemplate::MWT_USI MakeWorldTemplate::getWorldHeight() const{
    return m_GlobalMapHeight;
}
 
void MakeWorldTemplate::drawWorld() const{
    for (int i = 0; i < m_GlobalMapHeight; i++){
        for (int j = 0; j < m_GlobalMapWidth; j++){
            std::cout.width(3);
            std::cout << m_GlobalMap[i][j];
        }
        std::cout << std::endl;
    }
}
 
MakeWorldTemplate::~MakeWorldTemplate(){
    for (MWT_USI i = 0; i < m_GlobalMapHeight; i++)
        delete [] m_GlobalMap[i];
    delete [] m_GlobalMap;
}
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
#ifndef GENMAPWAY_H
#define GENMAPWAY_H
 
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <sstream>
 
#include "genfilename.h"
#include "pugixml.hpp"
 
class genMapWay{
public:
    using GMW_SI = short int;
    using GMW_USI = unsigned short int;
 
    // TODO: Написать сохранение в фаил
 
    /*
     * Класс представляет генерацию пути на созданной матрице
     */
 
    enum BuilderDirection{
        NONE,
        UP,
        DOWN,
        LEFT,
        RIGHT
    };
 
    genMapWay();
    ~genMapWay();
 
    void drawMap() const;
    //bool startGeneration(GMW_SI width, GMW_SI height, GMW_USI genCycles = 1);
    void startGenRules(GMW_SI width, GMW_SI height, GMW_USI genCycles = 1);
 
    GMW_USI getGenCycles() const;
    GMW_SI getMapHeight() const;
    GMW_SI getMapWidth() const;
    GMW_SI** getMap();
 
    void saveMapWay(char *fileName);
    void loadMapWay(std::string fileName);
 
private:
 
    GMW_SI **m_map; // Map
    GMW_SI m_mapWidth, m_mapHeight; // Map Size
 
    GMW_USI m_genCycles; // Количество проходов Default: 1
 
    BuilderDirection getRandomDirection() const;
 
    GMW_SI getDirectionToMap(GMW_USI valueRand, GMW_USI &cursorPosX, GMW_USI &cursorPosY);
 
    void testedRandRooms();
 
};
 
#endif // GENMAPWAY_H
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
#include <SFML/Graphics.hpp>
#include <string>
 
#include "genmapway.h"
#include "makeworldtemplate.h"
 
int main(){
    sf::RenderWindow window(sf::VideoMode(30*5*10, 12*5*10), "Test");
    window.setFramerateLimit(10);
 
    genMapWay mapp;
    mapp.startGenRules(60, 24, 8);
 
    //genMapWay::GMW_SI **mappX = mapp.getMap();
 
    //mapp.startGeneration(32, 16, 8);
    mapp.saveMapWay(nullptr);
    //mapp.loadMapWay("K9SWDYrvOB");
    mapp.drawMap();
 
    MakeWorldTemplate aaa;
    //aaa.loadMap("00PT3VsxIV");
    aaa.setTemplateFileList("5x5"); // 1 !!!!!
    aaa.startMakeGameWorld(mapp.getMap(), mapp.getMapWidth(), mapp.getMapHeight()); // 2 !!!!!
    aaa.saveMap(nullptr);
    MakeWorldTemplate::MWT_SI **aaaMap = aaa.getWorld();
    //aaa.drawWorld();
 
    //genMapWay::GMW_SI **map = mapp.getMap();
    /*genMapWay::GMW_USI mapWidth, mapHeight;
    mapWidth = mapp.getMapWidth();
    mapHeight = mapp.getMapHeight();*/
 
    sf::Color colors[16];
 
    for (int i = 0; i < 16; i++)
        colors[i] = sf::Color(rand()%255, rand()%255, rand()%255);
 
    colors[0] = sf::Color(35, 35, 35);
 
    sf::Texture texture;
    texture.loadFromFile("data/img/1.png");
    sf::Sprite spr;
    spr.setTexture(texture);
    spr.scale(0.5, 0.5);
 
 
    while (window.isOpen()){
 
 
        sf::Event event;
        while (window.pollEvent(event)){
            if (event.type == sf::Event::Closed)
                window.close();
 
            if (event.key.code == sf::Keyboard::Escape)
                window.close();
        }
 
        window.clear();
 
        /*for (int i = 0; i < mapp.getMapHeight(); i++){
            for (int j = 0; j < mapp.getMapWidth(); j++){
                spr.setPosition(j*5, i*5);
                spr.setColor(colors[ mappX[i][j] ]);
                window.draw(spr);
            }
        }*/
 
        for (int i = 0; i < aaa.getWorldHeight(); i++){
            for (int j = 0; j < aaa.getWorldWidth(); j++){
                spr.setPosition(j*5, i*5);
                spr.setColor(colors[ aaaMap[i][j] ]);
                window.draw(spr);
            }
        }
 
        window.display();
    }
 
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.10.2016, 18:17
Ответы с готовыми решениями:

Плохой калькулятор: как его сделать нормальным? (улучшить код)
Как его сделать нормальным ? :cry: #include &lt;functional&gt; #include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;string&gt; ...

Описать структуру с именем TIMETABLE (найти и исправить ошибки в коде, улучшить код)
Описать структуру с именем TIMETABLE, содержащий следующие поля: NAZV - название пункта назначения, NUMR - номер поезда, DATE - дата...

Избавить код от меток и улучшить его
Есть код: function TTOCSGF.repl(text:string):string; var i,i2,li:integer; c:integer; inst,log:string; label g,s; begin ...

17
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
24.10.2016, 19:13
Цитата Сообщение от Harterbreed Посмотреть сообщение
какие общие рекомендации есть? есть статьи по этому поводу? а не книги, для книг очень мало времени.
Мне кажется, желание несколько утопичное. Как можно научиться чему-то не читая книг?
0
1719 / 568 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
24.10.2016, 19:20
Mr.X, я понять не могу как он без книг такое наваял или хотя бы разобрался в этом.
0
1 / 1 / 1
Регистрация: 12.08.2014
Сообщений: 65
24.10.2016, 21:19  [ТС]
книги я читаю, но в данный момент время у меня ограничено а книгу лучше читать внимательно и проходиться по теме пару раз, поэтому прошу статьями, но если есть книги то покидайте названия.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
24.10.2016, 21:27
Цитата Сообщение от Harterbreed Посмотреть сообщение
aaa.
очень содержательное название
Цитата Сообщение от Harterbreed Посмотреть сообщение
C++
1
2
3
/*genMapWay::GMW_USI mapWidth, mapHeight;
  mapWidth = mapp.getMapWidth();
 mapHeight = mapp.getMapHeight();*/
выбрасывать код многострочным комментарием чревато
я пользуюсь конструкцией
C++
1
2
3
#if 0
.............
#endif
в случае чего его всегда можно вернуть в строй, заменой 0 на 1
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
24.10.2016, 21:28
Цитата Сообщение от Harterbreed Посмотреть сообщение
но если есть книги
Ну, оформление и форматирование кода - это, так сказать, самостоятельный раздел знаний, правда, один из самых холиварных, так как здесь многое определяется не только логикой, но и вкусом.
В данном разделе уже полно тем, в которых это обсуждалось, пошукайте по форуму.
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
25.10.2016, 10:24
Мне нравится: Practice Programming.
0
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
25.10.2016, 11:11
Ну, какой-то стиль у тебя есть - уже хорошо. Многие моменты лично мне, безусловно, не нравятся (`(){` -> `() {`, отсутствие {..} в однострочных if'ахи for'ах - да, так можно писать, но лично мне так читать все-равно не удобно и т.п.), но тут уж у кого какие предпочтения.

P.S.
Цитата Сообщение от Mr.X Посмотреть сообщение
это, так сказать, самостоятельный раздел знаний
Точно подмечено. Но чтобы этот раздел знаний пополнить быстрее, стоит почитать МакКоннела, "Совершенный код". И чем раньше, тем лучше.

P.P.S.
Вот так, в таком стиле, пишет гугл: http://google.github.io/styleguide/cppguide.html
Вполне себе интересно, на мой взгляд.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
25.10.2016, 11:23
Цитата Сообщение от Maxim Prishchepa Посмотреть сообщение
Мне нравится: Practice Programming.
Ну, по стилю и оформлению там маловато по сравнению с другими книгами.
Ну и эти скобки кернигановские "одна нога здесь, а другая там" - таки на любителя!
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
25.10.2016, 11:28
Цитата Сообщение от ValeryS Посмотреть сообщение
выбрасывать код многострочным комментарием чревато
Закомментированные куски кода без комментария о том, почему это было сделано - в топку!
Это мусор, который не несет никакой полезной нагрузки и только вводит в заблуждение.

Лично меня бесит такое:
C++
1
2
3
setNewConfiguration();
makeDataAvailable();
// updateParams();
Почему, ну почему кто-то закомментил updateParams() ???????!!!!!!!???????
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
25.10.2016, 11:28
Цитата Сообщение от Mr.X Посмотреть сообщение
оформление и форматирование кода
Цитата Сообщение от Mr.X Посмотреть сообщение
полно тем, в которых это обсуждалось, пошукайте по форуму
Цитата Сообщение от monolit Посмотреть сообщение
Ну, какой-то стиль у тебя есть - уже хорошо.
Обсуждение coding style (coding conventions) вот тут было.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
25.10.2016, 11:31
Цитата Сообщение от ValeryS Посмотреть сообщение
выбрасывать код многострочным комментарием чревато
Подскажите чем именно?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
25.10.2016, 11:37
Цитата Сообщение от Убежденный Посмотреть сообщение
Закомментированные куски кода без комментария о том, почему это было сделано - в топку!
в целом согласен
но когда пытаешься нащупать ошибку вставляешь временные переменные, лишние вызовы функции, подмена функций,игра с параметрами
в общем цельный зоопарк
Другое дело, что за собой прибирать надо

Добавлено через 4 минуты
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Подскажите чем именно?
одна из причин не поддерживает вложенности

вот такой код
C
1
2
3
int a;//код который нужно выбросить
/*комментарий*/
int b;//код который нужно выбросить
если закоментировать так
C
1
2
3
/*int a;//код который нужно выбросить
/*комментарий*/
int b;//код который нужно выбросить*/
компилятор не поймет
1
 Аватар для Sretenkov
9 / 5 / 1
Регистрация: 15.08.2016
Сообщений: 48
25.10.2016, 12:02
Harterbreed, венгерскую нотацию лучше не использовать, Майкрософт не рекомендует. Всякие приставки в названиях переменных вроде m_... плохо смотрятся в программах
Цитата Сообщение от Harterbreed Посмотреть сообщение
C++
1
2
3
4
5
6
m_mapWayHeight = 0;
* * m_mapWayWidth = 0;
m_TemplateWidth = 0;
* * m_TemplateHeight = 0;
m_GlobalMap = nullptr;
m_dirTemplList = "NONE";
0
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
25.10.2016, 12:18
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну и эти скобки кернигановские "одна нога здесь, а другая там" - таки на любителя!
так я и не говорю, что это истина в последней инстанции, просто констатирую факт, что мне по душе... мне еще и "йодастайл" нравится и я склонен считать, что так писать правильно, но это уже тема для холиваров ;-)
0
1 / 1 / 1
Регистрация: 12.08.2014
Сообщений: 65
25.10.2016, 18:49  [ТС]
Цитата Сообщение от Sretenkov Посмотреть сообщение
венгерскую нотацию лучше не использовать, Майкрософт не рекомендует. Всякие приставки в названиях переменных вроде m_... плохо смотрятся в программах
приставку делал для того чтобы знать что эта переменная классу принадлежит, хотя где-то читал и там было написано что есть постфиксная форма выражения того что это переменная принадлежит классу '_' например 'width_' но я счел ее не удобной, так как не нравится глазу а приставку 'm_' откопал в исходниках игрушки 'Teeworlds' правда привело в замешательство изначально что это значит, потом откопал и узнал что она означает что переменная принадлежит классу, да и удобно в IDE ввести только 'm_' и появится список всех переменных класса, удобство так сказать.

Цитата Сообщение от monolit Посмотреть сообщение
Многие моменты лично мне, безусловно, не нравятся (`(){` -> `() {`, отсутствие {..} в однострочных if'ахи for'ах - да, так можно писать, но лично мне так читать все-равно не удобно и т.п.)
Было одно время когда я выложил код для помощи, так там раскритиковали то что я писал для однострочных if'ов фигурные скобки, мол лучше не писать, видимо дело вкуса и привычки.
0
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
25.10.2016, 23:48
Цитата Сообщение от Harterbreed Посмотреть сообщение
приставку делал для того чтобы знать что эта переменная классу принадлежит
Решение правильное, полезное.
C++
1
int mFirstVar; // где-то так пишут
Так меньше из общего стиля выбивается. А то в вашем случае и CamelCase, и `_`)
Я и сам раньше так писать предпочитал (как указал выше), но со временем мне гораздо больше стал нравиться гугловской стиль с суффиксовым подчеркиванием.

Цитата Сообщение от Harterbreed Посмотреть сообщение
так там раскритиковали то что я писал для однострочных if'ов фигурные скобки, мол лучше не писать
Было бы интересно услышать аргументы. Вот мне в случае без скобок приходится прилагать немного больше усилий, чтобы разобраться в коде. Совсем немного, но тем не менее. Дискомфорт у меня это вызывает. А когда еще и пустой строки после таких конструкций нет, но это вообще раздражает. То ли так и было задумано, то ли просто скобки кто забыл поставить - кто его знает. И уже нотки сомнения в корректности кода появляются и соответствующие мысли, что отвлекает, порой, от основных задач)

Цитата Сообщение от Sretenkov Посмотреть сообщение
венгерскую нотацию лучше не использовать
Пример с m_ далеко не самый страшный в венгерской нотации))
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
26.10.2016, 00:23
Цитата Сообщение от monolit Посмотреть сообщение
отсутствие {..} в однострочных if'ахи for'ах - да, так можно писать, но лично мне так читать все-равно не удобно и т.п.), но тут уж у кого какие предпочтения.
Не, специалисты однозначно советуют ставить скобки в этих случаях, так как более читаемо и предотвращает ошибки.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2016, 00:23
Помогаю со студенческими работами здесь

Как в Outlook определить что его вызывают и запустить свой код
Здравствуйте, специалисты и не очень. После того как я перешел с Bat на Outlook мне всегда хотелось его (Outlook) заставить сортировать...

Проверти код, чем его можно улучшить?
Всем привет, кому не лень, проверьте, пожалуйся код, нужна здоровая критика. Я начинающий, поэтому нужны мнения специалистов. ...

Как улучшить код?
код новичка, подскажите как улучшить исправив ошибки &lt;?php session_start(); $_SESSION = &quot;Ваша запись успешна&quot;; ...

Как улучшить код?!
Написал код к заданию: Дан целочисленный массив размера N. Если он является перестановкой, то есть содержит все числа от 1 до N, то вывести...

Как улучшить код
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru