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

Константы и C++ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Код Хаффмена. Передача кодового дерева http://www.cyberforum.ru/cpp-beginners/thread1119091.html
Имеется файл. Провел его закодирование по коду Хаффмена, подсчитал частоты символов, построил кодовое дерево, произвол закодирование. Как передать таблицу кодов в файле? Например, имеется таблица кодов: a - 11 b - 101 c - 100 d - 011 e - 010 f - 001 g - 0001
C++ Написать программу для ввода строк символов с терминала Написать программу для ввода строк символов с терминала, организовать код. счет числа символов и слов в виде функций. Введенные строки сохранять в массиве. Вывести результаты расчета на монитор и в файл. Помогите, пожалуйста. http://www.cyberforum.ru/cpp-beginners/thread1119083.html
C++ C++ telnet
Добрый день! как из программы запустить telnet и передать команду например Help Спасибо
Работа с файлами C++
Ребят у кого есть возможность распишите как лучше сделать для лабы надо. Заранее спасибо Задание: Создать структуру Работник, со следующими полями: имя, номер отдела, зарплата. Разработать приложение, которое: 1. записывает данные типа структура Работник в файл; 2. считывает данные из файла и выводит в консоль; 3. расчитывает среднее значение зарплаты по всем работникам.
C++ Найти произведение элементов столбца, в котором расположен элемент с наибольшим значением http://www.cyberforum.ru/cpp-beginners/thread1119044.html
Помогите пожалуйста с реализацией задачи! :) В данной действительной квадратной матрице порядка n найти произведение элементов столбца, в котором расположен элемент с наибольшим значением. Предполагается, что такой элемент единственный. Суть уловил, код набросал, но вот что-то не хватает, не пойму что)) #include "stdafx.h" #include <iostream>
C++ Заданы натуральные числа N, M и K Заданы натуральные числа N, M и K. Вычислить значение дроби с точностью до K знаков после запятой. Например, если дано N=13, M=7, K=5 , то ответ: 0,53846 . при к>25 :( Зарание спасибо!!! подробнее

Показать сообщение отдельно
TheCalligrapher
С чаем беда...
Эксперт С++
 Аватар для TheCalligrapher
2777 / 1423 / 390
Регистрация: 18.10.2014
Сообщений: 2,615
26.10.2014, 04:49     Константы и C++
Цитата Сообщение от DrOffset Посмотреть сообщение
Не выдает, в этом и дело.
Даже в режиме -std=c++11, который как бы намекает нам на то, какой язык мы используем, диагностика не выдается и код компилируется. Вот пруф. Чтобы он начал выдавать предупреждение, нужно включить флаг -pedantic, или конкретно -Wvla. Переключения в режим С++11 или С++03, как видно, недостаточно.
Хорошо, пусть будет недостаточно. Действительно нужен флаг '-pedantic' или '-pedantic-errors' - флаги, которые были введены в GCC специально для того, чтобы требовать стандартного поведения.

Цитата Сообщение от DrOffset Посмотреть сообщение
Эта игра слов мне не нравится и вот почему:
1. gnu++ - это не язык, а набор расширений, которые реализует компилятор для с++.
Термин GNU++ выдумал не я. Именно так данный диалект именуется в опциях GCC.

Цитата Сообщение от DrOffset Посмотреть сообщение
2. Если некоторое множество расширений входит в компилятор по-умолчанию, это совершенно не значит, что данный компилятор не является компилятором С++.
А это здесь к чему? Я такого никогда не говорил. Я, кажется, ясно сказал выше, что компиляторы C++ могут реализовывать какие угодно расширения. В том числе и по умолчанию. Однако, стандарт языка четко требует, чтобы ill-fomed код всегда сопровождался диагностическим сообщением.

Цитата Сообщение от DrOffset Посмотреть сообщение
Компилятором С++ не является только тот компилятор, который не реализуется стандарт С++. А в стандарте С++ нет никаких явных запретов на расширения,
Верно. Более того, есть явное разрешение на расширения. Но к чему вы мне об этом сообщаете?

А вот что в стандарте есть, так это требование диагностики ill-formed кода, за исключением мест, где стандарт явно разрешает диагностики не делать.

Цитата Сообщение от DrOffset Посмотреть сообщение
так же, как нет конкретных требований для диагностики (есть рекомендации, более или менее жесткие, но нет конкретных указаний: "выдать ошибку" или "выдать предупреждение"). Следовательно тезис про то, что G++ - это не компилятор С++ ошибочен.
А вот тут уже пошла ерунда. Во-первых, чего стандарт С++ действительно не содержит, так это разделения на "ошибки" и "предупреждения". Такого разделения в С++ не существует. В С++ существует только понятие диагностического сообщения.

Во-вторых, стандарт С++ содержит совершенно четкое требование на эту тему

8 A conforming implementation may have extensions (including additional library functions), provided they
do not alter the behavior of any well-formed program. Implementations are required to diagnose programs
that use such extensions that are ill-formed according to this International Standard
. Having done so, however,
they can compile and execute such programs
Цитата Сообщение от DrOffset Посмотреть сообщение
Хочу также напомнить вот что: в стандарте существует практика указания на жесткость требований, посредством использования определенных форм модальных глаголов.
Совершенно верно. Глаголы "shall" и "must" обозначают максимально жесткое безусловное требование. Глагол "should" обозначает рекомендацию. Документ, который определяет значения этих терминов для всех стандартов - это RFC 2119: http://www.ietf.org/rfc/rfc2119.txt

Цитата Сообщение от DrOffset Посмотреть сообщение
Вот например про массивы:
8.3.4
If the constant-expression (5.19) is present, it shall be an integral constant expression and its value shall be greater than zero.
Вот именно! Вы, надеюсь, видите, что в данном случае использована форма "shall"?

Цитата Сообщение от DrOffset Посмотреть сообщение
Очень часто разработчики компиляторов используют эти формулировки для того, чтобы определить уровень диагностики. Так что, до тех пор, пока в документе не повысится жесткость требований, трактовать отсутствие constant expression в качестве размерности массива как ошибку совсем необязательно.
Это опять какая-то чепуха. Требование константности размера в декларации сделано с максимально возможным уровнем жесткости: "shall be". Его невозможно никуда "повысить".

Цитата Сообщение от DrOffset Посмотреть сообщение
Ошибка и расширенное поведение - это разные вещи. Плюс к этому, по цитатам выше видно, что стандарт не накладывает требований "обязан" (must) на размерность массива, оставляя лишь более слабое "должен" (shall).
А, вот в чем ваша ошибка! Вы очевидно перепутали "shall" и "should". Повторяю еще раз "shall be" - это максимальный уровень жесткости требования в стандарте С++ (и в аналогичных документах), равный по строгости "must". Еще раз отсылаю вас к истокам: http://www.ietf.org/rfc/rfc2119.txt

1. MUST This word, or the terms "REQUIRED" or "SHALL", mean that the definition is an absolute requirement of the specification.
 
Текущее время: 22:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru