Здравствуйте! Тайм-коды для этого видео (длительность 31:16): 0:00 говорим о макросах 0:50 сегодня работаем в С\С++ 1:20 макрос - это... как у нас формируется программа, вспоминаем 3:30 как работает текстовый процессор. Пример 4:50 *обратите внимание на отсутствие точки с запятой в конце 5:20 что с этим можно сделать? Пример 7:40 и эта строчка работает, можем посмотреть 8:10 отключим DEBUG, смотрим результат 8:30 чем это отличается от if? (это остается в программе) 9:30 делаем еще интересней. Показываем пример 11:42 что можно переключать этими макросами? Примеры 12:30 определяем число PI 13:50 еще пример с E. Это не переменная 14:42 третий аспект. Пример, где макрос уже с параметром 18:05 пример с MAKROS2 19:30 пишем, имитируем сложную функцию. Пример с переносом строчки 21:15 мы еще можем сделать так. Пример. Склеивание на уровне текста 22:55 что будет делать процессор? 23:50 делаем также для В2 и С3 24:15 в чем отличие макроса (М) от функции? 25:30 просто нужно найти баланс 26:50 переносим код в С (всё работает) 27:15 inline функция. Пример (это запрос у компилятора сделать эту функцию встроенной) (это на уровне исполняемого кода) 28:50 преимущества, минусы 29:40 проверяем в С 30:00 а в Java компилятор сам решает 30:30 про Питон. Итоги Желаем Вам благополучия!
Хм. У меня вот такой код: #include inline int t(int x) { return x + 1; } int main(int argn, char** args) { int a = 200; printf("%d", t(a)); return 0; } выдает 201. Возможно, зависит отверстии компилятора.
Непонятно как в одном операторе define совмещаются и простая подстановка и макросы. #define PI 3.14 Тут всё понятно, до пробела это то ЧТО заменить, после пробела то НА ЧТО заменить. А в случае с макросами #define MACROS(X, Y) X + Y И в (X, Y) и в X + Y есть пробелы. По какому он ориентируется? Очевидно что по второму. Но откуда он знает что надо по второму? Или если есть круглые скобки то это особый случай? Ну тогда если вдруг мне в тексте надо просто заменить MACROS(X, на Y) X + Y я этого уже сделать не смогу?
Да, этого Вы сделать уже не сможете. Он понимает, что если есть открывающая скобка, то до закрывающейся - все еще продолжается "то, что нужно заменить"
Inline не работают на arm64 не компилируется)) на с++ все отлично Undefined symbols for architecture arm64 ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
Здравствуйте!
Тайм-коды для этого видео (длительность 31:16):
0:00 говорим о макросах
0:50 сегодня работаем в С\С++
1:20 макрос - это... как у нас формируется программа, вспоминаем
3:30 как работает текстовый процессор. Пример
4:50 *обратите внимание на отсутствие точки с запятой в конце
5:20 что с этим можно сделать? Пример
7:40 и эта строчка работает, можем посмотреть
8:10 отключим DEBUG, смотрим результат
8:30 чем это отличается от if? (это остается в программе)
9:30 делаем еще интересней. Показываем пример
11:42 что можно переключать этими макросами? Примеры
12:30 определяем число PI
13:50 еще пример с E. Это не переменная
14:42 третий аспект. Пример, где макрос уже с параметром
18:05 пример с MAKROS2
19:30 пишем, имитируем сложную функцию. Пример с переносом строчки
21:15 мы еще можем сделать так. Пример. Склеивание на уровне текста
22:55 что будет делать процессор?
23:50 делаем также для В2 и С3
24:15 в чем отличие макроса (М) от функции?
25:30 просто нужно найти баланс
26:50 переносим код в С (всё работает)
27:15 inline функция. Пример (это запрос у компилятора сделать эту функцию встроенной) (это на уровне исполняемого кода)
28:50 преимущества, минусы
29:40 проверяем в С
30:00 а в Java компилятор сам решает
30:30 про Питон. Итоги
Желаем Вам благополучия!
Спасибо!
Спасибо!
И Вам спасибо за отзывы! :)
В Си перед inline нужно добавлять static, иначе выкидывает ошибку (почему-то требует чтобы функция была локальной), в C++ такой проблемы нет
Хм. У меня вот такой код:
#include
inline int t(int x) {
return x + 1;
}
int main(int argn, char** args) {
int a = 200;
printf("%d", t(a));
return 0;
}
выдает 201.
Возможно, зависит отверстии компилятора.
@@dudvstud9081 возможно, или может настройки какие нужно подшаманить
@@dudvstud9081 пока не хочется на это много времени тратить, оставил коммент, может кому пригодится в будущем)
Непонятно как в одном операторе define совмещаются и простая подстановка и макросы.
#define PI 3.14
Тут всё понятно, до пробела это то ЧТО заменить, после пробела то НА ЧТО заменить.
А в случае с макросами
#define MACROS(X, Y) X + Y
И в (X, Y) и в X + Y есть пробелы. По какому он ориентируется? Очевидно что по второму. Но откуда он знает что надо по второму? Или если есть круглые скобки то это особый случай? Ну тогда если вдруг мне в тексте надо просто заменить
MACROS(X,
на
Y) X + Y
я этого уже сделать не смогу?
Да, этого Вы сделать уже не сможете. Он понимает, что если есть открывающая скобка, то до закрывающейся - все еще продолжается "то, что нужно заменить"
Inline не работают на arm64 не компилируется)) на с++ все отлично
Undefined symbols for architecture arm64
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
@@MrSunTrope ну вот то самое пресловутое отличие версий… попробуйте нагуглить решение. У меня нет arm64, чтобы проверить.
Ваще ниче не видно...
Надо как-то крупнее....