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

Пример использования спецификатора volatile - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Циклические алгоритмы http://www.cyberforum.ru/cpp-beginners/thread424220.html
Как реализовать данную функцию для каждого x, изменяющегося от a до b с шагом h. Значения a, b, h и n вводятся с клавиатуры. Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение параметра n=10.
C++ Передача массива из главной функции в неглавную по указателю. Доброго времени суток! Задача: В функции main() сформировать матрицу M со случайными числами. Её передать по указателю в не главную функцию, в которой из матрицы изымается главная диагональ. Вывести на экран получившуюся матрицу. Я взял k=3, сформировал матрицу с рандомными числами, но как передать её по указателю в неглавную функцию не знаю. #include <conio.h> #include <iostream>... http://www.cyberforum.ru/cpp-beginners/thread424215.html
Покрашенный граф C++
Привет для вот такого условия Дан ориентированный граф, у которого каждая дуга покрашена в один из трех цветов. Требуется найти длину кратчайшего пути из 1й вершины в N-ую, если в пути не могут идти подряд две дуги одного цвета. Входные данные В первой строке записаны N и M (2<=N<=200, 0<=M<=N*N). Далее идет M строк с описанием дуг. Каждая дуга описывается тремя целыми числами X, Y, C -...
Найти число элементов массива > T и их произведение. C++
Недоработанная прога: #include <iostream.h> #include <conio.h> int Proiz_Kol(int,int,int**,int*); void main() { int **a, i, j, n, m, pr, kol; cout<<"\t Input N, M:";
C++ Перегрузка оператора "=" http://www.cyberforum.ru/cpp-beginners/thread424204.html
Дано такое задание Ввести строку символов S1. Программа должна содержать перегруженную операцию “=”, использование которой скопирует S1 в S2 при следующих условиях:Подстроку в квадратных “” скобках. вот пробовал написать, только чето не могу разобраться как тут правильно скопировать помогите кто) #include <iostream> #include <cstring> #include "conio.h" using namespace std; class...
C++ Измените программу с использованием циклических алгоритмов Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы. Значения a, b, h и n вводятся с клавиатуры. Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение параметра n=10. #include <math.h> #include <stdio.h> #include <iostream.h> int main() { double a,b,h,n,S,Y,x; int i=1; подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 1
08.01.2012, 12:34     Пример использования спецификатора volatile
Первый:
В зелёной строке написано, что после того, как выполнилась строка A, но ещё не выполнилась строка Б, переменную clock могут изменить извне (то есть, вообще не из этой программы). Переменная может опрашиваться и получать данные извне (без кавычек) в любой момент после того, как эти внешние силы вообще узнали о существовании такой переменной. Но компилятор-то такие вещи не отслеживает, он о них знать не может, а знает только о том, что ты описываешь в рамках своей программы. И изначально он исходит из предположения, что переменные твоей программы только ей и изменяются. На этом основании он может иногда и схитрить, оптимизировать те или иные операции. Скажем, если он видит, что переменной присвоено какое-то значение, а потом эта переменная используется, он может вместо чтения переменной сразу подставить то исходное значение. А если эта переменная больше ни для чего не использовалась, может и вообще её выкинуть нафиг. Спецификатор volatile говорит ему, что переменная может меняться не только внутри твоей программы, и тогда компилятор начинает быть настороже. Он уже не станет подставлять то исходное значение, а честно прочитает реальное содержимое переменной.

Второй:
Она может быть не опрошена по той причине, что компилятор видит, что в твоей программе этой переменной ничего не присваивается и предполагает, что её значение не изменилось. Так что он в целях ускорения и уменьшения кода оптимизирует эту операцию и подставит прежнее значение. Спецификатор volatile говорит ему, что значение переменной всё равно могло измениться и он честно будет читать его каждый раз.

Третий:
Имеется в виду, что на момент выполнения строки Б настоящее значение clock изменится, но поскольку оптимизатор подсунет нам предыдущее значение вместо того, чтобы прочесть реальное, мы получим неверный результат.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru