1. C++ / Говнокод #18361

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    void AttachToParser(Parser* pParser)
    {
    	parser=pParser;
    		
    	static const char* const typeNames[]={"ShaderInterface", "ShaderModule", "ShaderModuleType", "ShaderModulePattern", "ShaderTemplate"};
    	typedef void (ShaderGeneratorParser::* StructureProcessor)();
    	static StructureProcessor processors[]={&ShaderGeneratorParser::ProcessShaderInterface, &ShaderGeneratorParser::ProcessShaderModule,
    		&ShaderGeneratorParser::ProcessShaderModuleType, &ShaderGeneratorParser::ProcessShaderModulePattern, &ShaderGeneratorParser::ProcessShaderTemplate};
    
    	for(uint i=0; i<numof(processors); i++)
    	{
    		auto processor=processors[i];
    		ShaderGeneratorParser mycopy=*this;
    		parser->DeclarationBlockParsers.Append(typeNames[i], [mycopy, processor]() mutable {(mycopy.*processor)();});
    	}
    }

    Делаю парсер конфигов для своего игрового движка. Он готов наверное всего на 10% и представлял собой один класс, который уже разросся. Стало неудобно по нему передвигаться. Решил разбить парсер на модули. Это код того, как один из модулей цепляется к основному классу парсера.
    Этот модуль умеет парсить 5 разных блоков, объединённых общим назначением - сборка шейдеров из модулей. За каждый тип блоков отвечает своя функция. Об этом функция и сообщает основному классу.

    Цель такая, чтобы модуль работал даже после удаления самого экземпляра. Для этого пришлось пропихнуть копию экземпляра внутрь std::function. Более нормального способа, чем через лямбду с замканием, я не нашёл.

    gammaker, 18 Июня 2015

    Комментарии (0)
  2. C++ / Говнокод #18338

    +145

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    // Отправная точка новых изысканий
    uint16_t Mask = 0x0000;
    uint8_t i = 0;
    for(i=0; i<255; i++)
    	Mask |= (1 << i);
    
    ResponseBuf = (VirtualMemory & (Mask << RequestedAddr)) >> RequestedAddr;

    Из кода firmware одного девайса.

    Sushev, 14 Июня 2015

    Комментарии (14)
  3. C++ / Говнокод #18335

    +142

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    void _cls(){
        static const int LINE_COUNT = 200;
        for (int i = 0; i < LINE_COUNT; i++)
            cout << "\n";
    }

    С форума - "Допустим я запустил консольную программку, там что-то она делает, и в результате экран заполняется текстом и т.д. Как программно можно очистить экран консоли?"
    Ответ:
    очистка экзана за счет пустых строк <код>

    ennnax, 12 Июня 2015

    Комментарии (110)
  4. C++ / Говнокод #18318

    +143

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    int i = 132,
        *ii = &i,
        **iii = &ii,
        ***iiii = &iii,
        ****iiiii = &iiii,
        *****iiiiii = &iiiii,
        ******iiiiiii = &iiiiii;
    
        printf("%d", ******iiiiiii);

    Забавно

    warzes, 11 Июня 2015

    Комментарии (6)
  5. C++ / Говнокод #18282

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    int a = 0;
    bool is09 = false;
    for(int i=0;i<=9;i++){ //Проверяем каждую от 0 до 9
      if(a == i) { is09 = true; break; } //Если таковым является то true
    }
    
    //И само условие :)
    if(is09){
      //Если 0 - 9
    } else {
      //Если нет
    }

    Зацените такой индуссо-китайский код (да я знаю как правильно), но для прикола

    acterhd, 04 Июня 2015

    Комментарии (2)
  6. C++ / Говнокод #18274

    +143

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    if(file.open(QIODevice::ReadOnly))
    {
        QTextStream in(&file);
    
        while(!in.atEnd())
        {
            textString = in.readLine();
            linesText += textString;
            linesText += "\n";
        }
    
        linesText.chop(1);
    }
    else
        try
        {
            throw 20;
        }
        catch (int e)
        {
            cout « "Файл записей не был открыт!" « e « endl;
        }

    В проекте одногруппника

    belozorov63, 03 Июня 2015

    Комментарии (0)
  7. C++ / Говнокод #18273

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    #include <iostream>
    #include <set> 
    #include <queue>
    #include <iterator>
    #include <algorithm>
    
    using namespace std;
    
    class Complex
    { 
    public: 
    	char a;
    	char b;
    
    public:
    
    	Complex(){}
    
    	Complex(char i, char j)
    	{
    		this->a = i;
    		this->b = j;
    	}
    	
    	
    	friend bool operator < (const Complex& complex1, const Complex& complex2)
    	{
    		return ((complex1.a < complex2.a && complex1.b < complex2.b) || (complex1.a < complex2.a && complex1.b == complex2.b) || (complex1.a == complex2.a && complex1.b < complex2.b));
    	}
    
    	friend bool operator >(const Complex& complex1, const Complex& complex2)
    	{
    		return ((complex1.a > complex2.a && complex1.b > complex2.b) || (complex1.a > complex2.a && complex1.b == complex2.b) || (complex1.a == complex2.a && complex1.b > complex2.b));
    	}
    
    	friend ostream& operator << (ostream& out, Complex const& complex)
    	{
    		out << "First: " << complex.a << " Second: " << complex.b;
    		return out;
    	}
    
    	friend bool operator == (const Complex& complex1, const Complex& complex2)
    	{
    		return ( complex1.a == complex2.a && complex1.b == complex2.b);
    	}
    
    	~Complex()
    	{
    	}
    };

    "Не говнокод, потому что работает" © Автор говнокода

    Giraffe, 02 Июня 2015

    Комментарии (3)
  8. C++ / Говнокод #18266

    +142

    1. 1
    2. 2
    3. 3
    4. 4
    if (currentValueP > 1 || currentValueP < 1)
    valueIsCorrect = false;
    else if (currentValueP == 1)
    valueIsCorrect = true;

    бесплатно valueIsCorrect = currentValueP == 1;

    belozorov63, 01 Июня 2015

    Комментарии (0)
  9. C++ / Говнокод #18257

    +145

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    #include <cstdio>
    
    class A
    {
    public:
    	void sayHello()
    	{
    		printf("Hello!");
    	}
    };
    
    int main(int argc, char **argv)
    {
    	A *a = 0;
    	a->sayHello();
    	return 0;
    }

    Что выведет этот код?

    hdkeeper, 29 Мая 2015

    Комментарии (65)
  10. C++ / Говнокод #18227

    +141

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    LoggerSngl::instance()->Trace("Заходим под семафор.");
    				QPRFQueueSemaphoreSngl::instance()->Lock(); //Гыгы.
    				{
    					LoggerSngl::instance()->Trace("Зашли под семафор.");
    					CSingleLock lock(QPREFQueueMutexSngl::instance().get(), TRUE);
    					LoggerSngl::instance()->Trace("Получение задачи из очереди...");
    					qprfTask = std::dynamic_pointer_cast<QPRFTask>(_tasks.front());
    					_tasks.pop();
    					LoggerSngl::instance()->TraceFmt("Получили задачу из очереди. Остаток длины %d.", _tasks.size());
    				}
    
    				if (qprfTask->isFinishTask())
    				{
    					CoUninitialize();
    					release_chckxml_lib();
    					qprfTask->semaphore()->Unlock();
    					_endthreadex(0);
    				}

    laMer007, 22 Мая 2015

    Комментарии (3)