Няшная / Говнокод #29109 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
// https://tio.run/##jY9PC4JAFMTv@ymGJHFjDc06WUEdugpd1YPomgu2in8oED@7WVpRh@jdZt7vDfNCPUwDeeo6oggZpnXEsS6rSGTzZEuIEvFYSI6D42g5QxbHJa8oogwNPIJ@8kLIKtYm06snJwxq7uoD5VO7R1pcEpFyzaDvsP3u@F/YjyzSgzgHQmoUzeP2bgSujw0ag8FkWDBYDEuGVWu/iFneA2rgWv7gjY@Z9FPWox6rml/yuS54VRcShk3arrsB

#include <stdio.h>

#define FOO(p, offset) do { \
    printf("%x\n", &p[-offset]); \
} while(0)

#define BAR(p, offset) do { \
    printf("%x\n", p[-offset]); \
} while(0)


int main() {
    int a[] = {0, 1, 2, 3, 4, 5};
    int *p = &a[3];
    FOO(p, 1);
    FOO(p, 1u);
    BAR(p, 1);
    BAR(p, 1u);
    return 0;
}

Запостил: testhuest testhuest, (Updated )

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

    • Попробуй sfc /scannow кастить смещение в лонг инт

      Говорят на новых 64-битных платформах sizeof(int) < sixeof(int*), именно поэтому
      Ответить
      • Вообще полагаться на размер инта плохо. Для каста есть всякие size_t и ptrdiff_t. Ну и вдогонку uint32_t, uint64_t, uint128_t etc.
        Ответить
        • Да я понял уже. Стоило привести сферический пример в вакууме, и только после этого осознал в чём проблема.

          У меня есть стек, в котором размер элемента, и куда растёт сам стек настраивается. До какого-то момента всё идеально работало, пока в макросню не попал унсигнед и арифметика перестала работать из-за того что модуль стал больше и я заебался искать, в чём проблема.
          Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8