Форум программистов, компьютерный форум 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++ Сортировка строк матрицы по возрастанию первых элементов Составить программу, которая переформирует заданную матрицу так, чтобы ее строки расспалагались в порядке возрастания их первых элементов. Помогите пожалуйста, я сколько не пытался, ничего не вышло... Заранее огромное спасибо подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,127
Записей в блоге: 26
24.10.2015, 14:42     Чем же макрос define так плох?
Цитата Сообщение от hoggy Посмотреть сообщение
читаешь стандарт языка
Стандарт языка описывает поведение программы, а вовсе не способы, которыми компилятор добивается такого поведения

C++
const int a = 10;
int foo (void) { return a; }
Код
$ g++ t.cc -S
$ cat t.s
...
__Z3foov:
...
        movl    $10, %eax    <--- в точку "return a" компилятор подставил 10
...
        .section .rdata,"dr"
        .align 4
__ZL1a:
        .long   10   <--- но переменная никуда не делась
...
И лишь в режиме с оптимизациями компилятор удалит переменную "a" (т.к. все её использования были заменены на значение константы). Тот факт, что в точку "return a" компилятор подставил значение - это тоже оптимизация, просто у современных компиляторов даже в режиме без оптимизаций делаются некоторые точечные оптимизации, которые практически не увеличивают время компиляции

Можно копнуть дальше и подать этот же код на вход компилятора Си (переименовав t.cc в t.c). И мы увидим, что в этом случае даже в режиме с оптимизациями переменная НЕ была удалена. Почему так происходит? Да потому что эти два кода (один и тот же текст в режимах Си и Си++) НЕ эквивалентны. В режиме Си++ на глобальные переменные с квалификатором const неявно навешивается модификатор static. И эквивалентный код на Си должен выглядеть как

C
static const int a = 10;
int foo (void) { return a; }
Тогда мы увидим симметричный код и симметричное поведение компилятора (в режиме без оптимизаций переменная остаётся, с оптимизациями удаляется)
 
Текущее время: 15:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru