1. Си / Говнокод #28058

    +1

    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
    #include <stdio.h>
    
    int main(void)
    {
    	(
    		*********************
    		**  **     ** ***** *
    		* ** * **** ** *** **
    		* ** * **** *** * ***
    		* ** * **** **** ****
    		* ** * **** *** * ***
    		* ** **    *** *** **
    		*********************
    	printf)("pidor");
    }

    Запостил: kcalbCube, 26 Февраля 2022

    Комментарии (13) RSS

    • Что такое nox?
      Ответить
    • Эм, указатели на функции можно разадресовывать?
      Ответить
      • да, но это не имеет эффекта. **********a то же самое что a
        Ответить
        • надо будет говнокод-бота привязать к своему аккаунту.
          Ответить
      • В Си значения типа ЭфункцияЭ эквивалентно Эуказатель на функциюЭ (за исключением sizeof, ЕМНИП), разыменовав Эуказатель на функциюЭ получим то же самое тип, в отличие от остальных типов указателей.

        Конь систентно!
        Ответить
        • Оно вроде разлагается к указателю, как массивы, от любого чиха, а звёздочки запихивают его обратно.

          То есть *printf сначала превращает функцию в указатель, а затем обратно в функцию.

          EDIT: Ну да:
          6.3.2.1/4
          A function designator is an expression that has function type. Except when it is the operand of the sizeof operator, the _Alignof operator, or the unary & operator, a function designator with type ''function returning type'' is converted to an expression that has type ''pointer to function returning type''.

          6.5.3.2/4
          The unary * operator denotes indirection. If the operand points to a function, the result is a function designator; if it points to an object, the result is an lvalue designating the object. If the operand has type ''pointer to type'', the result has type ''type''. If an invalid value has been assigned to the pointer, the behavior of the unary * operator is undefined
          Ответить
          • Да, прикольно. Выглядит как циклическая ссылка.
            Ответить
          • А зачем такие сложности?
            Ответить
            • Видимо, потому что писали и p = function, и p = &function, вот чтобы было можно и так, и так писать.

              Вот бы и с амперсандами так тоже можно было.
              Ответить
        • Если очень сильно хочешь разыменования указатель на функцию, то кастани сначала в void*, а потом балуйся.
          Ответить
          • Не надо так делать. На многих платформах это плохо заканчивается: где-то волшебные биты, где-то адресные пространства разделены.
            Ответить

    Добавить комментарий