|
|
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
©ISO/IEC ISO/IEC 9899:201x6.7.3.1 Formal definition of restrict 1 Let D be a declaration of an ordinary identifier that provides a means of designating an object P as a restrict-qualified pointer to type T. 2 IfD appears inside a block and does not have storage class extern, let B denote the block. If D appears in the list of parameter declarations of a function definition, let B denote the associated block. Otherwise, let B denote the block of main (or the block of whatever function is called at program startup in a freestanding environment). 3 In what follows, a pointer expression E is said to be based on object P if (at some sequence point in the execution of B prior to the evaluation of E) modifying P to point to a copy of the array object into which it formerly pointed would change the value of E.137) Note that ‘‘based’’ is defined only for expressions with pointer types. 4 During each execution of B, let L be any lvalue that has &L based on P. If L is used to access the value of the object X that it designates, and X is also modified (by any means), then the following requirements apply: T shall not be const-qualified. Every other lvalue used to access the value of X shall also have its address based on P. Every access that modifies X shall be considered also to modify P, for the purposes of this subclause. If P is assigned the value of a pointer expression E that is based on another restricted pointer object P2, associated with block B2, then either the execution of B2 shall begin before the execution of B, or the execution of B2 shall end prior to the assignment. If these requirements are not met, then the behavior is undefined. 5 Here an execution of B means that portion of the execution of the program that would correspond to the lifetime of an object with scalar type and automatic storage duration associated with B. 6 A translator is free to ignore any or all aliasing implications of uses of restrict. Вот о чём тут идёт речь: 1. D: T*restrict p; 2. Если D имеет класс памяти static, обозначим блок где он встречается B. Если D один из параметров функции обозначим B ассоциированный блок. В противном случае обозначим за B блок main. 3. Введём класс глубины указателей U. int *p,*u,*k - принадлежат классу U^1;int** h,**y; char** а - принадлежат классу U^2. Максимальный класс U^12. Будем говорить, указательное выражение Е основано на объекте Р, если Е и Р принадлежат одному классу указателей, и Е есть lvalue от Р. 4. L=lvalue &L based on P Если через L возможно получить доступ к объекту X,а также к этому объекту можно получить и через другие объекты, значит Т не содержит в себе константную квалификацию. Каждое lvalue через которое может быть получен доступ к элементу X, должно также иметь адрес based on P. Если Р присвоено значение Е, где Е based on another restrict pointer P2(fe T* restrict p2),... Дальше не очень с пониманием, видимо выше что-то пропустил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2014, 08:14 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Всё. Мне кажется основное я понял верно. И в целом разобрался с переводом. Чтобы это нормально понять, нужно ввести такие понятия как пространство указателей вот так. Каким то образом мы именуем память, но доступ к этой памяти может получить кто угодно. С помощью этого квалификатора на каждый участок памяти можно поставить замок и т.д. Как часто вы используете его в жизни ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 07:56 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВсё. Мне кажется основное я понял верно. И в целом разобрался с переводом. Чтобы это нормально понять, нужно ввести такие понятия как пространство указателей вот так.ээээ.. ты сейчас с кем разговаривал? Не, с одной стороны, если тебе проще подходить к пониманию многоуровневых указателей через теорию пространств, то ура. Но с другой стороны, никто так не делает. Для подавляющего большинства людей намного проще вспомнить ассемблер и косвенный доступ, а потом уже понять что такое указатель. Вообще, мне кажется что это один из тех случаев когда хорошее знание математики мешает реальному пониманию. Ты привык думать что: "вот есть такая штука которую можно использовать так-то". А сейчас надо думать: "есть возможность сделать это, какую штуку мы можем изобразить?" В математике первичны абстракции, здесь первичны действия. SashaMercuryКаким то образом мы именуем память, но доступ к этой памяти может получить кто угодно. С помощью этого квалификатора на каждый участок памяти можно поставить замок и т.д. Как часто вы используете его в жизни ?Никогда! Потому что это совсем не замок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2014, 18:30 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите пожалуйста по возникшим вопросам 1. Сегодня прочитал ©ISO/IEC ISO/IEC 9899:201xWhen sizeof is applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1. When applied to an operand that has array type, the result is the total number of bytes in the array. When applied to an operand that has structure or union type, the result is the total number of bytes in such an object, including internal and trailing padding. Подумал-"да, ну. Вроде размер указателя должен вернуть". Проверил Код: plaintext 1. 2. 3. , ну и вы знаете что я увидел. Насколько я знаю, имя массива является константным указательным выражением, или константным указателем. А указатель это переменная, или просто указатель. То есть к имени массив а я не могу сделать операцию ++, например. Тогда, я решил проверить Код: plaintext 1. 2. 3. 4. Ну и вы понимаете что я снова увидел 10 4 4. То есть sizeof каким то образом различает a and c. Каким образом сейчас этот оператор видит разницу ? 2. Мне казалось, что объявление массива T t[x], это синтаксический сахар равносильный T* const t=(T* const)malloc(x) , но скорее всего это не так (судя по пункту 1). А может и так, но в любом случае, мне думается что и без конструкции T t[x] можно обойтись, без потерь в плане функционала языка. Так ли это ? 3. Прочитал в стандарте что sizeof возвращает size_t. Можно ли обойтись без этого типа ? Почему нельзя возвращать в другой тип из пространства signed integer type ? Можно ли его заменить long long int, например ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2014, 03:47 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
И почему size_t знаковый ? чтобы вернуть ошибку ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2014, 03:49 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНасколько я знаю, имя массива является константным указательным выражением, или константным указателем. Нет. Имя массива неявно приводится к константному указателю на первый элемент в тех контекстах, где ожидается указатель. А в остальном массив это совершенно по другому устроенная сущность. SashaMercuryИ почему size_t знаковый ? size_t - беззнаковый, извините если разочаровал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2014, 04:50 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryНасколько я знаю, имя массива является константным указательным выражением, или константным указателем. Нет. Имя массива неявно приводится к константному указателю на первый элемент в тех контекстах, где ожидается указатель. А в остальном массив это совершенно по другому устроенная сущность. SashaMercuryИ почему size_t знаковый ? size_t - беззнаковый, извините если разочаровал :) беззнаковый, точно ! Я прочитал написано unsigned, а подумал почему то что signed. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2014, 05:00 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите пожалуйста по следующим вопросам. 1. ©ISO/IEC ISO/IEC 9899:201xEOF which expands to an integer constant expression, with type int and a negative value, that is returned by several functions to indicate end-of-file, that is, no more input from a stream; Не могу логически связать, хотя каждое слово понимаю. Как мне понятен перевод: EOF...который расширяет к целому константному выражению, типа signed int, что возвращается несколькими функциями для индикация конца файла/потока. Вообще больше интересует фраза выделенная красным. Как её грамотно переводить ? 2. Встретил сегодня на википедии . Это ведь ошибка ? wchar smallest addressable unit of the machine that can contain basic character set. It is an integer type. Actual type can be either signed or unsigned depending on the implementation. Хотя я чётко помню ©ISO/IEC ISO/IEC 9899:201xAn object declared as type char is large enough to store any member of the basic execution character set. next wshort short int signed short signed short int short signed integer type. At least 16 bits in size Да где же такое есть в стандарте ? Далее неправильно описан long long. Разве это не ошибки ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 08:33 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. ©ISO/IEC ISO/IEC 9899:201xEOF which expands to an integer constant expression, with type int and a negative value, that is returned by several functions to indicate end-of-file, that is, no more input from a stream; Не могу логически связать, хотя каждое слово понимаю. Как мне понятен перевод: EOF...который расширяет к целому константному выражению, типа signed int, что возвращается несколькими функциями для индикация конца файла/потока. EOF который разворачивается в целое константное выражение. expands здесь указан в контексте подстановки макросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2014, 12:06 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, спасибо! У меня на секунду мелькала такая мысль, честно. Но я почему-то на ней не остановился. Здорово понимать это, когда знаешь что это макрос, и понимать в каком контексте к нему применяется слово расширять/разворачивать. Приятно C: А на вики всё-таки ошибки ? Я оказался прав ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2014, 02:57 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Я не вижу никакого противоречия в вики и стандарте. "can contain" и "is large enough to store" это по смыслу одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2014, 04:50 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Хм. Ну всё таки в первом случае, утверждение не несёт такого сильного значения. Это как can и must. Вроде похоже, но не то. А по размерам типов данных ? Разве тут нет явных противоречий со стандартом ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2014, 05:55 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryРазве тут нет явных противоречий со стандартом ? Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2014, 17:11 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, почитал внимательнее. В целом вы оказались правы. Хотя я не согласен с формулировкой в любом случае. В limits.h указаны: ©ISO/IEC ISO/IEC 9899:201x 5.2.4.2.1Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign. Мне кажется что лучше явно указать количество бит, занимаемых типом данных. Мне не очень понравилось, то, как это описано. Не нашёл в стандарте описание конструкции Код: plaintext 1. 2. 3. У меня возникли кое-какие вопросы по её работе. Вот что нашёл ©ISO/IEC ISO/IEC 9899:201x 6.8.4Selection statements Syntax 1 selection-statement: if ( expression ) statement if ( expression ) statement else statement switch ( expression ) statement Semantics 2 A selection statement selects among a set of statements depending on the value of a controlling expression. 3 A selection statement is a block whose scope is a strict subset of the scope of its enclosing block. Each associated substatement is also a block whose scope is a strict subset of the scope of the selection statement. Но это не то. Потому пришёл к выводу что такой конструкции нет(она получена путем комбинации), и правильно знать не Код: plaintext 1. а Код: plaintext 1. 2. (не говорю что так нужно писать) Я правильно понял ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 06:58 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЯ правильно понял ?Нет. Правильно будет знать что есть конструкция if ( expression ) statement else statement и знать что эта конструкция сама по себе является statement. Короче говоря, почитай про Context Free Grammar. Это очень нужная вещь для понимания структур языков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 19:04 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White Owl, Так он так и написал ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2014, 19:34 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Хорошо ) Anatoly Moskovsky , сегодня между делом думал. Для чего нужен limits.h ? Вероятно для поддержки переносимости языка. В нём указаны диапазоны для целых типов данных. И если исходить из того, что программа собирается в двоичной системе счисления, то действительно описание на википедии верно, но я не встретил нигде в стандарте того факта, что программы на Си можно(и нужно) писать исходя из того, что основание системы счисления окружения должно быть равным 2. То есть, теоретически, можно написать программу на Си в окружении с основанием системы счисления равным 4 например. Тогда, типы данных будут занимать в два раза меньше бит. Эти мысли правильные, или я заблуждаюсь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 06:11 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДля чего нужен limits.h ? Вероятно для поддержки переносимости языка. В нём указаны диапазоны для целых типов данных.Не только целых. Там по традиции указываются все параметры платформы. SashaMercury И если исходить из того, что программа собирается в двоичной системе счисления, то действительно описание на википедии верно, но я не встретил нигде в стандарте того факта, что программы на Си можно(и нужно) писать исходя из того, что основание системы счисления окружения должно быть равным 2. То есть, теоретически, можно написать программу на Си в окружении с основанием системы счисления равным 4 например.Да можно. Никаких проблем. SashaMercury Тогда, типы данных будут занимать в два раза меньше бит. Ну с чего это вдруг? Типы данных будут такими какими их назначат разработчики платформы. Скажут что в целом восемь бит - будет восемь бит. Скажут что на платформе 11 бит в троичной системе счисления - будут 11 бит в троичной системе. Все зависит от CPU, памяти и левой задней ноги человека их сконструировавшего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 06:52 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White Owl, таким образом, в стандарте указывается только диапазон значений в 10 сс, а не количество бит необходимых для хранения типа ? Значит на википедии всё-таки ошибка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 06:57 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SSТогда, типы данных будут занимать в два раза меньше бит имел ввиду, что для хранения одного и того-же диапазона значений потребуется в два раза меньше бит.В общем случае, если a- это 1 сс, b-2cc, получим число характеризующее отношение числа бит необходимых для хранения одинакового диапазона 1сс ко 2 сс через формулу Возможно есть какие-то частные случаи, но по-моему формула верна. Поправьте, если не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 07:08 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Неужели эти вопросы такие глупые и очевидные ( Так и не понял, правильно ли я рассуждаю, или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 14:44 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНеужели эти вопросы такие глупые и очевидные ( Так и не понял, правильно ли я рассуждаю, или нет. Стандарт это практика, а не теория. У него нет цели описать все теоретически возможные случаи, только реально возможные с небольшим запасом. В реале есть только процессоры работающие с двоичной логикой, т.е. у бита два состояния 0,1. Других процессоров нет, поэтому троичные, четверичные и т.д. биты могут быть реализованы только надстройкой над двоичной. Такая надстройка - это уже будет другой язык, со своими правилами и стандартами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 14:59 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryWhite Owl, таким образом, в стандарте указывается только диапазон значений в 10 сс, а не количество бит необходимых для хранения типа ? Значит на википедии всё-таки ошибка? Еще раз: В Си диапазон значений записываемых в элементарный тип определяется возможностями платформы на которой программа собирается. Сейчас у нас абсолютное доминирование платформ основанных на двоичной арифметике с 8-и битными байтами. Поэтому, мы и можем указывать диапазон значений в системе счисления отличной от реальности. В статьях и стандартах десятичная система используется исключительно для удобства восприятия человеком привыкшим к десятичной системе. Но на самом деле диапазон значений целого беззнакового числа всегда , где c система счисления а n количество бит обрабатываемых в CPU за один раз. Dima TSashaMercuryНеужели эти вопросы такие глупые и очевидные ( Так и не понял, правильно ли я рассуждаю, или нет. Стандарт это практика, а не теория. У него нет цели описать все теоретически возможные случаи, только реально возможные с небольшим запасом. В реале есть только процессоры работающие с двоичной логикой, т.е. у бита два состояния 0,1. Других процессоров нет, поэтому троичные, четверичные и т.д. биты могут быть реализованы только надстройкой над двоичной. Такая надстройка - это уже будет другой язык, со своими правилами и стандартами.Ты не прав. Существуют процессоры основанные на не двоичных системах счисления. В них один бит (один физический провод) может содержать ток разного номинала, каждый номинал соответствует разному числу внутри системы счисления. Другое дело что экономически такие процессоры сейчас изготовлять не выгодно. Транзисторы и диоды основанные на "есть сигнал или нету сигнала" намного дешевле чем транзисторы и диоды различающие уровень сигнала. "Намного" это значит на несколько порядков. И да, Саша прав, если суметь оправдать экономическую целесообразность изготовления таких процессоров, то в то-же самое количество бит можно будет записать намного большее число. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 18:14 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Ну появилась многоуровневая флэш-память и что? Наружу-то она всё равно "торчит двоичным битом". Плотность выше, да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 18:18 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White OwlТы не прав. Существуют процессоры основанные на не двоичных системах счисления. В них один бит (один физический провод) может содержать ток разного номинала, каждый номинал соответствует разному числу внутри системы счисления. Думаешь еще существуют? Разрабатывали аналоговые процы (если так можно назвать) в период рассвета СССР, в 50-60е, насколько историю знаю - тогда и забросили. Тогда же были разработки компов с троичной логикой (один вроде даже не сдан на драгметаллы), но потом занялись пародированием разработок IBM и все стало окончательно двоичным. Поправь если ошибаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 19:53 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38736999&tid=2018847]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
195ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 528ms |

| 0 / 0 |
