Форум программистов, компьютерный форум CyberForum.ru

Чем же макрос define так плох? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ begin http://www.cyberforum.ru/cpp-beginners/thread83539.html
Люди, я собираюсь научиться программировать на Си,подскажите, с чего лучше всего начать в C++, и в какой среде мне будет проще обучаться программировать (Visual C++, Microsoft Visual Studio C++, C++ Builder и т.д.)??? Заранее благодарен!
C++ Как передать вектор из main() во внутреннюю функцию ? Нужно передать вектор из main в функцию gen_binar_sq , записать в него элементы, и получить в main заполненый вектор и распечатать элементы. #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #include <cctype> #include <iostream> #include <vector> http://www.cyberforum.ru/cpp-beginners/thread83535.html
Функция: удаление узла дерева со всеми потомками C++
подскажите код функции которая удаляет элемент дерева со всеми его потомками NODE *SEARCH(char *key, NODE *root) { NODE *cur=root; if(cur==NULL) { cout<<"\n Data Base is empty."; return cur; }
C++ Определение заглавных букв в файле.
Нужна программа на Си которая определяет слово с самым большим количеством заглавных букв(если таковых много, следует выдать их все).Помогите пожалуйста.Заранее благодарен.
C++ Отличие С от С++ http://www.cyberforum.ru/cpp-beginners/thread83520.html
В чем отличие языка С от С++
C++ Сортировка строк матрицы по возрастанию первых элементов Составить программу, которая переформирует заданную матрицу так, чтобы ее строки расспалагались в порядке возрастания их первых элементов. Помогите пожалуйста, я сколько не пытался, ничего не вышло... Заранее огромное спасибо подробнее

Показать сообщение отдельно
LynXzp
1 / 0 / 0
Регистрация: 22.10.2015
Сообщений: 6
24.10.2015, 01:07     Чем же макрос define так плох?
По поводу памяти, да, по идее должно отсекать константу, но несовсем:
without.c:
C
1
2
3
void main(){
 while(1);
}
with.c:
C
1
2
3
4
const int a=100;
void main(){
 while(1);
}
with2.c:
C
1
2
3
4
5
const int a=100;
const int b=101;
void main(){
 while(1);
}
avr-gcc without.c -o without.o
avr-gcc with.c -o with.o
avr-gcc with2.c -o with2.o
md5 with*o
MD5 (with.o) = 20cef9a881abf45a705ee4a866e7d535
MD5 (with2.o) = a039418acfd289c805508efee49fc84d
MD5 (without.o) = 3213727e8abd00fd988b201612bcbf27
rm *.o
avr-gcc -Wl,--gc-sections without.c -o without.o
avr-gcc -Wl,--gc-sections with.c -o with.o
avr-gcc -Wl,--gc-sections with2.c -o with2.o
md5 with*o
MD5 (with.o) = 53a3f6dc92a6fa67272464a500dc9ce2
MD5 (with2.o) = 53a3f6dc92a6fa67272464a500dc9ce2
MD5 (without.o) = 53a3f6dc92a6fa67272464a500dc9ce2
gcc версия 4.8.3 (GCC)

Добавил ключик в свой Makefile (хотя ж знал про него)
И вообще это линковщик, а не компилятор, этим занимается. Не факт что у всех по умолчанию стоит -Wl,--gc-sections или аналог.

_____________________
даже используемые не кушают, пока мы не попросим их адресов.
Ух-ты. Не уверен что на bare-metal без ОС все так же. Но память занимаемую кодом уж точно использует а это тоже важно.
потому что совершенно очевидно:
что бы тупо подставлять значение константы
по месту использования,
память под сам объект выделять не обязательно.
Ничего не понял. Сейчас взял и сравнил свои with.o и without.o - оперативной памяти используют одинаково... Ничего не понял, там же Гарвардская архитектура, нельзя просто взять и прочитать из кода программ число. (Возможно обьем памяти посчитала утилита не верно, но больше грешу на себя. Ладно, это не так важно... пока запомню, вдруг потом пойму.)
_____________________

Для себя понял:
1. Сами по себе, макросы константы вообще не могут навредить (#define a n это ... зачем ... в принципе может понадобится, но проще обойтись).
2. В макросы-функции нужно передавать только значения. (Нельзя передавать выражения и функции) И тоже все будет хорошо.
(Нечего место экономить, никогда не пишу ++ не в отдельном выражении, только мозг выносить себе, потом это читая)
3. Макросы безопасны как и указатели, и в определенных случаях не проверка границ массива. Но применять надо осторожно, а шутники и assert(random) могут написать, никто же не будет говорить что assert это плохо.

*Танцуем с лезвиями в руках*
 
Текущее время: 17:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru