|
|
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Решил познакомиться с вышеупомянутым документом. При переводе возникли трудности. Возможно они связаны с недостаточными знаниями основ информатики и вычислительной техники или/и возможно у меня недостаточные знания английского языка. Мне кажется стоит создать раздел (этот топ) в котором можно будет задавать вопросы по данному документу. Если не стоит, то модераторам стоит закрыть данный раздел(им виднее). В любом случае, пока у меня один вопрос. INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x5.1.2 Execution environments 1 Two execution environments are defined: freestanding and hosted. In both cases, program startup occurs when a designated C function is called by the execution environment. All objects with static storage duration shall be initialized (set to their initial values) before program startup. The manner and timing of such initialization are otherwise unspecified. Program termination returns control to the execution environment. Forward references: storage durations of objects (6.2.4), initialization (6.7.9). 5.1.2.1 Freestanding environment 1 In a freestanding environment (in which C program execution may take place without any benefit of an operating system), the name and type of the function called at program startup are implementation-defined. Any library facilities available to a freestanding program, other than the minimal set required by clause 4, are implementation-defined. 2 The effect of program termination in a freestanding environment is implementationdefined. 5.1.2.2 Hosted environment 1 A hosted environment need not be provided, but shall conform to the following specifications if present. Freestanding environment - это запуск вне ОС ? Например это набор программ на С реализующих ОС ? Hosted environment - запуск в среде ОС, например программа написанная в IDE VS и запущенная в W7 ? Хотя какая разница где она написана. PS Я кстати удивился что так часто встречаю "shall" в этом документе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2014, 08:17 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x5.1.2.2.1 Program startup The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters: int main(void) { /* ... */ } or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared): int main(int argc, char *argv[]) { /* ... */ } or equivalent;10) or in some other implementation-defined manner. If they are declared, the parameters to the main function shall obey the following constraints: — The value of argc shall be nonnegative. Всё логично. Тогда почему не сделать у argc тип unsigned int подумал я. Проверил Код: plaintext 1. 2. 3. 4. 5. 6. Происходит неявное преобразование видимо. Как получилось что argc=-5, хотя согласно "The value of argc shall be nonnegative" быть такого не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2014, 08:55 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Compiling in Free-Standing Environments : OracleThe Solaris Studio C compiler supports compilation of programs that link with the standard C library and execute in a runtime environment that includes the standard C library and other runtime support libraries. The C standard terms such an environment a hosted environment. An environment that does not provide the standard library functions is termed a free-standing environment ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2014, 08:56 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПроисходит неявное преобразование видимоКакое, нафик, "неявное преобразование" для аргумента типа (знаковый) int?!Как получилось что argc=-5, хотя согласно "The value of argc shall be nonnegative" быть такого не может.Вообще оксюморон - присвоили знаковой переменной отрицательное значение, выбрали соответствующий модификатор и удивляемся, что всё отработало так, как должно отработать. P.S. Число аргументов, если оно передаётся, формирует окружение. Это окружение должно передавать неотрицательное значение. Не обязано, но должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2014, 09:03 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryFreestanding environment - это запуск вне ОС ? Например это набор программ на С реализующих ОС ? Hosted environment - запуск в среде ОС, например программа написанная в IDE VS и запущенная в W7 ? Хотя какая разница где она написана. Да. SashaMercuryPS Я кстати удивился что так часто встречаю "shall" в этом документе. На юридическом языке "shall" имеет значение "должен". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2014, 09:06 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
нееет, я не так написал. До этого я пробовал присваивать unsigned int a =-5, и присваивание происходило. Вопрос в голове остался(подумал-наверное неявное преобразование), а код не стал оставлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2014, 09:07 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov Вообще оксюморон - присвоили знаковой переменной отрицательное значение, выбрали соответствующий модификатор и удивляемся, что всё отработало так, как должно отработать. Я удивляюсь что это произошло, ведь согласно черновику стандарта такое действие незаконно INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x— The value of argc shall be nonnegative. Anatoly Moskovsky На юридическом языке "shall" имеет значение "должен". Знаю, просто давно его не встречал в таком количестве, вот и удивился ;) Вспоминается классический пример "will you marry me" и ветка ответов "yes, I will !", "yes, I shall", так мы учили разницу между shall и will C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2014, 09:14 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДо этого я пробовал присваивать unsigned int a =-5, и присваивание происходило. Вопрос в голове остался(подумал-наверное неявное преобразование)В фон-неймановской архитектуре знаковость - (в основном) вопрос интерпретации. Чтобы запретить присваивание отрицательных значений беззнаковым переменным требуется нехилая поддержка времени выполнения: все присваивания надо проверять и "что-то делать" с недопустимыми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2014, 09:16 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЯ удивляюсь что это произошло, ведь согласно черновику стандарта такое действие незаконноЯ повторю: значение переменной формирует окружение, передающее управление на точку входа функции main. Это окружение должно, а вовсе не обязано, формировать неотрицательное значение. Если стандарт(ы) обязывают, то в них так и пишут - must/must not. Второй вариант лучше переводить как "не имеет права". Как переменная argc будет использована внутри функции main и будет ли она вообще использована - личное дело этой функции. Может, например, декрементировать значение argc после анализа очередного аргумента в цикле. Тогда нулевое/отрицательное значение станет граничным условия для такого цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2014, 09:23 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДо этого я пробовал присваивать unsigned int a =-5, и присваивание происходило. Тут все просто. Разрядность ограниченная, у знаковых старший бит это знак (0+, 1-), поэтому знаковое -5 хранится также как беззнаковое 2^N - 5, где N количество разрядов. Булеву алгебру почитай. Там вычитания нет, достаточно инверсии и сложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2014, 10:12 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, понял. По argc снова вижу избыточность. Вечером подумаю. Ставлю спецификатор i, и выводится int ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2014, 12:09 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Что такое "integer promotion", я в общих чертах разобрался. Сейчас ещё читаю. 1. Можно сказать что это частный случай приведения к наибольшему общему типу ? 2. Как правильно перевести на русский язык ? или в таких случаях лучше называть вещи по-английски ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 04:23 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЧто такое "integer promotion", я в общих чертах разобрался. Сейчас ещё читаю. 1. Можно сказать что это частный случай приведения к наибольшему общему типу ? 2. Как правильно перевести на русский язык ? или в таких случаях лучше называть вещи по-английски ? 1. Нет. В С есть только два случая неявного приведения типов - в int и в void*. Поэтому о "частном" случае говорить нельзя. И их достаточно мало чтобы зазубрить. 2. Если за те пол-минуты пока я пишу фразу я не вспомнил русскоязычный аналог термина - оставляю его на английском. Проще жить намного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 06:57 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Почитал ещё тут . Удивил комментарий по следующему коду Код: plaintext 1. 2. 3. по ссылке вышеIn this example, the comparison operator operates on a signed int and an unsigned int. By the conversion rules, si is converted to an unsigned int. Because -1 cannot be represented as an unsigned int value, the -1 is converted to UINT_MAX in accordance with the C Standard, subclause 6.3.1.3, paragraph 2 [ISO/IEC 9899:2011]: Ссылаются в документ в названии топа, я проверил, вроде-бы так. Вопрос: почему правило именно такое, и в данном случае signed int приводится к unsigned int. Почему не сделали наоборот ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 07:13 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White Owl, спасибо, понял. White OwlВ С есть только два случая неявного приведения типов - в int и в void* INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 5.1.2.3 12EXAMPLE 3 Similarly, in the fragment float f1, f2; double d; /* ... */ f1 = f2 * d; the multiplication may be executed using single-precision arithmetic if the implementation can ascertain that the result would be the same as if it were executed using double-precision arithmetic (for example, if d were replaced by the constant 2.0, which has type double). Мне показалось что в данном случае правая часть может быть посчитана с использованием арифметики двойной точности, а значит будет и неявное преобразование. Наверное что-то не так понял ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 07:28 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВопрос: почему правило именно такое, и в данном случае signed int приводится к unsigned int. Почему не сделали наоборот ? signed int: 1 бит под знак + 31 под значение unsigned int: 32 под значение Как из 32 битного значения сделать 31 битное? Реально никаких преобразований не происходит, процессор может рассматривать одни и те же 32 бита как знаковое и как беззнаковое, определяется какой командой сравнивать, только эта команда ожидает оба оператора одного типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 08:22 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
наличие знака, равносильно умножению на два количество вариантов без знаков, да ещё плюс 1, ибо вместо двух нулей, теперь 1. Хотя в ваших словах наверное есть логика, с точки зрения арифметики и представления чисел в ЭВМ. Вот ещё по неявному приведению, INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 5.1.2.3 13EXAMPLE 4 Implementations employing wide registers have to take care to honor appropriate semantics. Values are independent of whether they are represented in a register or in memory. For example, an implicit spilling of a register is not permitted to alter the value. Also, an explicit store and load is required to round to the precision of the storage type. In particular, casts and assignments are required to perform their specified conversion. For the fragment double d1, d2; float f; d1 = f = expression; d2 = (float) expression; the values assigned to d1 and d2 are required to have been converted to float. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 08:48 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryналичие знака, равносильно умножению на два количество вариантов без знаков, да ещё плюс 1, ибо вместо двух нулей, теперь 1. Хотя в ваших словах наверное есть логика, с точки зрения арифметики и представления чисел в ЭВМ. Так и есть. Если интересно, то вот тебе табличка на примере двух битов как представление происходит: ДвоичноеБеззнаковоеЗнаковое000+0011+1102-2113-1 SashaMercuryВот ещё по неявному приведению, Тут я тебе не подскажу, никогда типы с плавающей запятой не были нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 09:33 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury2. Как правильно перевести на русский язык ? или в таких случаях лучше называть вещи по-английски ? Я встречал и сам использую перевод "integer promotion" как "расширение [целого] типа". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 10:02 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Всем спасибо :) понял все кроме неявного приведения, но думаю этот вопрос решится позже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2014, 14:30 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
1. INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 5.1.2.3 14 example 5 Код: plaintext 1. 2. проверил на разных значениях, получалось эквивалентно. Приведите пример чтобы было не эквивалентно, пожалуйста 2.INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 5.1.2.3 15EXAMPLE 6 To illustrate the grouping behavior of expressions, in the following fragment Код: plaintext 1. 2. 3. the expression statement behaves exactly the same as Код: plaintext 1. due to the associativity and precedence of these operators. Thus, the result of the sum (a + 32760) is next added to b, and that result is then added to 5 which results in the value assigned to a. On a machine in which overflows produce an explicit trap and in which the range of values representable by an int is [-32768, +32767], the implementation cannot rewrite this expression as Код: plaintext 1. since if the values for a and b were, respectively, -32754 and -15, the sum a + b would produce a trap while the original expression would not; nor can the expression be rewritten either as Код: plaintext 1. 2. 3. since the values for a and b might have been, respectively, 4 and -8 or -17 and 12. However, on a machine in which overflow silently generates some value and where positive and negative overflows cancel, the above expression statement can be rewritten by the implementation in any of the above ways because the same result will occur. Проверил всё, и всё ок, видимо он знает в каком порядке вычислять, либо незримо для меня расширяет правую часть как и в случаем с чарами в правой части. Либо я что-то не так понял с переводом, ниже мой код и комментарии Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 04:27 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryпроверил на разных значениях, получалось эквивалентно. Приведите пример чтобы было не эквивалентно, пожалуйста Код: plaintext 1. 2. 3. 4. 5. 6. 7. При переводе привычных нам десятичных чисел в двоичные с плавающей запятой возникают периодические дроби, а т.к. мантисса имеет конечную длину, то имеем погрешность. Поэтому проверять на равно и неравно их нельзя. SashaMercuryПроверил всё, и всё ок, видимо он знает в каком порядке вычислять, либо незримо для меня расширяет правую часть как и в случаем с чарами в правой части. Либо я что-то не так понял с переводом, ниже мой код и комментарии Я так понял что при переполнении не гарантируется правильный результат. Код: plaintext 1. 2. 3. 4. 5. Т.е. то что на твоем процессоре правильно посчиталось не означает что на всех так же будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 07:39 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Dima T Код: plaintext 1. Тут напутал, надо Код: plaintext 1. Так не находит, зацикливается. Пример сделать не удалось, но такие случаи возможны из-за наличия погрешности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 07:58 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Спасибо :) Сейчас попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 09:54 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38613973&tid=2018847]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
213ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
85ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 589ms |

| 0 / 0 |
