- 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
/* --- PRINTF_BYTE_TO_BINARY macro's --- */
#define PRINTF_BINARY_PATTERN_INT8 "%c%c%c%c%c%c%c%c"
#define PRINTF_BYTE_TO_BINARY_INT8(i) \
(((i) & 0x80ll) ? '1' : '0'), \
(((i) & 0x40ll) ? '1' : '0'), \
(((i) & 0x20ll) ? '1' : '0'), \
(((i) & 0x10ll) ? '1' : '0'), \
(((i) & 0x08ll) ? '1' : '0'), \
(((i) & 0x04ll) ? '1' : '0'), \
(((i) & 0x02ll) ? '1' : '0'), \
(((i) & 0x01ll) ? '1' : '0')
#define PRINTF_BINARY_PATTERN_INT16 \
PRINTF_BINARY_PATTERN_INT8 PRINTF_BINARY_PATTERN_INT8
#define PRINTF_BYTE_TO_BINARY_INT16(i) \
PRINTF_BYTE_TO_BINARY_INT8((i) >> 8), PRINTF_BYTE_TO_BINARY_INT8(i)
#define PRINTF_BINARY_PATTERN_INT32 \
PRINTF_BINARY_PATTERN_INT16 PRINTF_BINARY_PATTERN_INT16
#define PRINTF_BYTE_TO_BINARY_INT32(i) \
PRINTF_BYTE_TO_BINARY_INT16((i) >> 16), PRINTF_BYTE_TO_BINARY_INT16(i)
#define PRINTF_BINARY_PATTERN_INT64 \
PRINTF_BINARY_PATTERN_INT32 PRINTF_BINARY_PATTERN_INT32
#define PRINTF_BYTE_TO_BINARY_INT64(i) \
PRINTF_BYTE_TO_BINARY_INT32((i) >> 32), PRINTF_BYTE_TO_BINARY_INT32(i)
/* --- end macros --- */
#include <stdio.h>
int main() {
long long int flag = 1648646756487983144ll;
printf("My Flag "
PRINTF_BINARY_PATTERN_INT64 "\n",
PRINTF_BYTE_TO_BINARY_INT64(flag));
return 0;
}
А еще я как-то попытался взять указатель на функцию, а она оказалась макросом
Я тогда здорово перепугалось
в жопаскрипте так делали ранше, чтоб эмоулить модульность
Это замыкание.
В квадратных скобках указывается контекст, который нужно захватить, причём захватывать можно как по ссылке, так и по значению. В данном случае не захватывается ничего, ибо скобки пустые.
По совместительству -- анонимная функция, она же лямбда. По реализации -- что-то типа класса с единственным методом.
в других япах ты этим не управляешь, и можешь случайно захватить лишка.
где еще можно явано сказать, что хватать? в пхп?
nonlocal -- к ближайшей НЕ топлевелной.
Это мутно, конечно.
Лучше всего сделано в Perl: там есть
* переменные уровня пакета (ака глобальные), определяются с ключом our, видны снаружи пакета (через ::), видны в таблице глобов.
* переменные лексического скопа, определяются с ключом my, не видны снаружи пакета, видны в рамках блока (блоком может быть файл).
То-есть разница между пакетной и лексической видимостью очевидна и явна
Серьезные люди без надобности Windows не обновляют.
https://gcc.godbolt.org/z/u-AYhu
Создаётся вот такая "анонимная" функция:
Способ вызова:
В гнусях, вроде, трамплин будет только если возвращать указатель на вложенную функцию (вот это уже замыкание). А так, для простых вложенных функций это нахуй не надо, просто органичит область видимости.
а лямбда это просто онанимная функция
Может быть, этот ключ работает только на определённых платформах?
Зачем нужны макросы такие?
Вообще-то и в сях инлайн есть, и генерики, но общим будет только имя, реализацию для разных типов придется писать свою.
а генрики конечно есть: передаегшь указатель на войд и авторым парметром тип)
по какой причине копулятор может незаинлайнить чото?
Я про _Generic.
https://en.cppreference.com/w/c/language/generic
1. typeof на этапе компиляции извлекает из выражения его тип. Что-то типа auto в новых крестах.
2. Фигурные скобки ограничивают блок. Блок может возвращать значение (почти как в скриптовых языках): берётся значение последней операции.
3. Ну и круглые скобки на всякий случай, чтобы показать, что нужно извлечь значение выражения.
За пределами gcc это всё работать не обязано.
В каких ещё языках, кроме "R", возвращаемое значение - значение последней операции?
https://scifanatic-wpengine.netdna-ssl.com/wp-content/uploads/2017/03/facepalm-head.jpg
Мне так не хватает GPath и ast transformation
Отлично груви зашёл, рекомендую.
Играет джаз
Крутится рулетка
Играет джаз
Крутится рулетка
Играет джаз
Я проиграл
Я пидорас
Кстати, почему?
Идея же очень хорошая.
Вот я сделал ужасный энтерпрайз, на чем мне писать высокоуровневую бизнес логику и скрипты автоматизации?
Почему вообще так мало внимания грейлсу? Маркетинг?
Бывает очень удобно, когда нужно быстро написать тупой сайт.
Это лучше, чем делать весь этот бойлерплейт вручную.
АХАХАХАХАХАХ
https://gcc.godbolt.org/z/Coc9oy
https://ideone.com/tfrPdX
Вероятно, нечётное значение указателя в примере с пустыми квадратными скобками означало, что ничего не захвачено.
Кстати, уже с -O1 в обоих примерах всё инлайнится и заменяется на вычисленную в компайлтайме константу.
Да, при включенной оптимизации, если аргументы являются константами, компилятор лямбду выкинет и заменит на результат. А если аргументы переменные, всегда ли он сможет оптимизировать?