0 / 0 / 0
Регистрация: 05.01.2010
Сообщений: 9
|
||||||
1 | ||||||
Чем же макрос define так плох?08.01.2010, 03:29. Показов 16676. Ответов 115
После прочтения про директиву препроцессора define возник вопрос по поводу применения define, как функции:
0
|
08.01.2010, 03:29 | |
Ответы с готовыми решениями:
115
Чем так плох чипсет P31? чем плох mysql_query Чем плох uCoz? Чем плох goto? |
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||||||||||||||||
24.10.2015, 17:21 | 61 | ||||||||||||||||||||
hoggy, вот тебе альтернативные ссылки с тем же кодом (раз уж у тебя эта не открывается): Раз, Два, Три.
Теперь про место для значения. Код:
mov esi, 42 уже нет. Т.е. размер кода стал меньше. Как вообще можно было предположить, что значение явно присутствующее в исходном файле, может выводиться на консоль и при этом НИГДЕ не храниться? Оно что из космоса прилетает? Заметь, никаких адресов, о которых ты говорил, тут не используется, сугубо значение константы.
1
|
24.10.2015, 17:52 | 62 |
"Пример выше" это который?
Из этого никак не следует, что const-переменная является константой Добавлено через 29 секунд Да тут же вопрос терминологии. Он веник называет пряником, а потому и сложно понять, чего он говорит
0
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|
24.10.2015, 18:29 | 66 |
0
|
24.10.2015, 18:30 | 67 |
Я что-то туплю под вечер после работы.. Это как?
n4527? Что-то не найду у себя такого... Поиск фразу "variable that is explicitly declared const" тоже не находит.
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
24.10.2015, 18:51 | 69 |
Я в C++11 (ISO/IEC 14882 Third edition 2011-09-01) смотрел.
В драфте 3.5/(3.2): 3/6: Поясни мысль. Добавлено через 1 минуту Не важно, компиляции или выполнения. Всё равно это в том числе и "переменная", хотя и принимающая только одно значение в момент инициализации.
1
|
24.10.2015, 19:01 | 70 |
Блин.. Я, конечно, могу представить о чём идёт речь, но я категорически не хочу укладывать у себя в уме понятие "константная переменная", ведь это противоположные сущности
0
|
1 / 0 / 0
Регистрация: 22.10.2015
Сообщений: 6
|
|
24.10.2015, 21:24 | 71 |
Ура! Прояснилось
Так все отлично, она inline подставлена точно так же как и #define бы сделал. Не знаю как в Win, думаю зависит от компилятора, например: http://habrahabr.ru/company/intel/blog/246913/ освободился регистр... А в микроконтроллерах много регистров (32 например), и при этом мало памяти и производительности, поэтому компилятор (gcc) может по выбору оптимизации пихать в стек все регистры или не все (что делать с остальными регистрами придумать не сложно, но как на самом деле не скажу). Может esi в данном бинарнике такой регистр... выступает верхним значением стека. (ну это я так, на кофейной гуще, но выглядит правдоподобно для меня)
0
|
Croessmah
|
24.10.2015, 21:30
#72
|
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
24.10.2015, 21:46 | 75 | |||||
кажись там речь о том, что
1
|
1 / 0 / 0
Регистрация: 22.10.2015
Сообщений: 6
|
|
24.10.2015, 21:47 | 76 |
Если я правильно понимаю то
const int a=5; 1. может при дальнейшем использовании подставится значением и это будет константная константа дальше некуда (printf("%d",a) превращается компилятором в printf("%d",5)) 2. а может создастся переменная в памяти и получится "константная переменная" (например foo(&a); как говорили выше) (Я всегда думал что создается константая переменная, почему-то даже в мыслях не было что она может стать inline. Просто константы в макросе это явно inline, а const int больше похоже на запрет модификации переменной.)
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
24.10.2015, 22:01 | 78 | |||||
1
|
1 / 0 / 0
Регистрация: 22.10.2015
Сообщений: 6
|
|
24.10.2015, 22:02 | 79 |
А если
foo(&a); а foo - функция из подгруженной библиотеки черт его знает какого языка и компилятора. Вот возмет foo и запишет по адресу переменной a другое значение Если a не находится в защищенной области памяти и ОС это поддерживающей то пиши пропало.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
||||||
24.10.2015, 22:02 | 80 | |||||
ну например так
1
|
24.10.2015, 22:02 | |
24.10.2015, 22:02 | |
Помогаю со студенческими работами здесь
80
Чем плох make? Чем плох управляемый С++? Чем плох void main? Чем плох ProBuilder (Unity3D)? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |