|
|
|
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 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Вот пример когда z != x Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 10:07 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Только с бассейна пришел, уже нельзя включать компьютер (, завтра проверю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 16:00 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryINTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 5.1.2.3 14 example 5 Код: plaintext 1. 2. проверил на разных значениях, получалось эквивалентно.Пробуйте вычитать очень близкие значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 18:45 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovПробуйте вычитать очень близкие значения. Маловероятно что будут потери. Пример (условный, числа как бы двоичные) Код: plaintext 1. 2. 3. 4. Тут уменьшаемое должно быть значительно меньше вычитаемого, тогда будут потери на обратной операции. Пример я выше привел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 19:40 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 5.1.2.3 14 example 5 Код: plaintext 1. 2. проверил на разных значениях, получалось эквивалентно. Приведите пример чтобы было не эквивалентно, пожалуйста Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2014, 23:18 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, понял. Действительно существует расхождение. Пытался вывести на экран битовое представление double, не получилось, ибо побитовое и видимо работает только с целым типом. Ещё подумаю. Почему не расширить препроцессор математическим аппаратом для упрощения выражений такого вида ? Если даже Maple одной командой evalf или simplify позволяет упростить входную строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 03:43 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВсем спасибо, понял. Действительно существует расхождение. Пытался вывести на экран битовое представление double, не получилось, ибо побитовое и видимо работает только с целым типом. Ещё подумаю. Выводи как массив unsigned char[8]. Возможно байты в памяти в обратном порядке хранятся. Структура хранения тут описана Правила преобразования если интересно SashaMercuryПочему не расширить препроцессор математическим аппаратом для упрощения выражений такого вида ? Если даже Maple одной командой evalf или simplify позволяет упростить входную строку. Потому что в таком виде мало кто пишет. Это просто наглядный пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2014, 08:04 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Dima_TВыводи как массив unsigned char[8]. Код: plaintext 1. 2. 3. 4. 5. 6. примерно так ? По этим числам я уже в принципе могу понять какой двоичный код хранится с байтах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 02:28 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryпримерно так ? По этим числам я уже в принципе могу понять какой двоичный код хранится с байтах Примерно да, только выводи в шестнадцатеричном виде или сразу в двоичном, так понятнее. И байты в обратном порядке читай. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 06:51 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Спасибо. Переписал код так. Для double x=1 показывает не то. Проверил ваш код вместе со своим, аналогично. Я думал что для хранения единицы будет в единице только 1 бит, остальные в ноль. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 08:08 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДля double x=1 показывает не то. Что не то? Я тебе ссылку выше давал Читаем Примеры чисел двойной точности0x 3ff0 0000 0000 0000 = 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 08:31 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Туплю. Конечно то. Там фишка вся в мантиссе, забыл. Извиняюсь, не прав ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 08:36 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
авторОкончательное значение числа равняется ±1,мантисса · 2^(порядок − 01111111111) старший бит мантиссы, всегда равный единице, опускается, а порядок 0 записывается как 2^10 - 1 = 1023 т.е. 1 = 1.00000 * 2^0 1. убираем, 0 заменяем на 01111111111 (=1023=0x3FF), получаем Код: plaintext 1. или Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 08:43 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. 128 это (1 << (sizeof(unsigned char)* 8-1)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 08:57 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Dima_T128 это (1 << (sizeof(unsigned char)* 8-1)) У меня немного другой цикл. Я подумал, зачем вы приводите к unsigned char а не просто к char. Прочитал на хабре почему так, и решил что раз unsigned char является абстракцией машинного байта, то есть смысл сделать этот цикл для всех машин, и для тех где 1 байт занимает, например, 9 бит. А сейчас я смотрю на свой код, вижу *8 и понял что у меня не получилось то что я хотел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 09:03 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
1 байт везде 8 бит Также принято значения байта считать беззнаковыми, т.е. 0...255, поэтому unsigned char ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 09:24 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Dima T1 байт везде 8 битСейчас. А то есть у меня старенький справочник по це, так там и девятибитные системы упомянуты :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 16:51 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovDima T1 байт везде 8 битСейчас. А то есть у меня старенький справочник по це, так там и девятибитные системы упомянуты :-) Там и биты с тремя состояниями наверно упоминаются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 17:02 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Dima TТам и биты с тремя состояниями наверно упоминаются А не угадали :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 17:07 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Начал читать раздел 6.2.5 Types. Подскажите пожалуйста в тех моментах, где я не до конца разобрался. 1. INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 6.2.5.16.2.5 Types 1 The meaning of a value stored in an object or returned by a function is determined by the type of the expression used to access it. (An identifier declared to be an object is the simplest such expression; the type is specified in the declaration of the identifier.) Types are partitioned into object types (types that describe objects) and function types (types that describe functions). At various points within a translation unit an object type may be incomplete (lacking sufficient information to determine the size of objects of that type) or complete (having sufficient information)) Например во время integer promotion ? Когда char может быть расширен до int ? 2. INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 6.2.5.2An object declared as type _Bool is large enough to store the values 0 and 1. Почему этот тип называется _Bool а не bool ?(вообще название выделяется из остальных, хотя бы тем что начинается с "_") Я могу хранить только 0 и 1, или как минимум 0 и 1 ? 3. INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 6.2.5.4There are five standard signed integer types, designated as signed char, short int, int, long int, and long long int. (These and other types may be designated in several additional ways, as described in 6.7.2.) There may also be implementation-defined extended signed integer types. The standard and extended signed integer types are collectively called signed integer types. Приведите пожалуйста пример 4. quote INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 6.2.5.5An object declared as type signed char occupies the same amount of storage as a ‘‘plain’’ char object. A ‘‘plain’’ int object has the natural size suggested by the architecture of the execution environment (large enough to contain any value in the range INT_MIN to INT_MAX as defined in the header <limits.h>). Я понимаю это как -"классический" char. Как правильно ? Можно ли самому менять диапазоны в этом файле ? Подозреваю что можно. Но сомневаюсь, что если поставлю в максимум 2^100 fe, то мне выделится 13 байт при объявлении int. 5. INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 6.2.5.9The range of nonnegative values of a signed integer type is a subrange of the corresponding unsigned integer type, and the representation of the same value in each type is the same.41) A computation involving unsigned operands can never overflow, because a result that cannot be represented by the resulting unsigned integer type is reduced modulo the number that is one greater than the largest value that can be represented by the resulting type. Второе место где возникли трудности, скорее не с переводом, а с пониманием. Вот как я это понял: Если операндами выражения являются unisigned int, то мы никогда не получим переполнение, потому что, в том случае, если у нас есть переполнение(или как написано-если результат не может быть представлен в unsigned int), то над результатом(над каким результатом ?) произойдёт операция reduced modulo...дальше не понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 03:55 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 6.2.5.16.2.5 Types 1 The meaning of a value stored in an object or returned by a function is determined by the type of the expression used to access it. (An identifier declared to be an object is the simplest such expression; the type is specified in the declaration of the identifier.) Types are partitioned into object types (types that describe objects) and function types (types that describe functions). At various points within a translation unit an object type may be incomplete (lacking sufficient information to determine the size of objects of that type) or complete (having sufficient information)) Например во время integer promotion ? Когда char может быть расширен до int ? Нет. Это про структуры/классы. Код: plaintext 1. 2. 3. 4. SashaMercury2. INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 6.2.5.2An object declared as type _Bool is large enough to store the values 0 and 1. Почему этот тип называется _Bool а не bool ?(вообще название выделяется из остальных, хотя бы тем что начинается с "_") Я могу хранить только 0 и 1, или как минимум 0 и 1 ? Почему _Bool не знаю. Хранить можно только 0 и 1 остальное не гарантируется. SashaMercury3. INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 6.2.5.4There are five standard signed integer types, designated as signed char, short int, int, long int, and long long int. (These and other types may be designated in several additional ways, as described in 6.7.2.) There may also be implementation-defined extended signed integer types. The standard and extended signed integer types are collectively called signed integer types. Приведите пожалуйста пример например, на некоторых платформах есть тип __int128 SashaMercury4. quote INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 6.2.5.5An object declared as type signed char occupies the same amount of storage as a ‘‘plain’’ char object. A ‘‘plain’’ int object has the natural size suggested by the architecture of the execution environment (large enough to contain any value in the range INT_MIN to INT_MAX as defined in the header <limits.h>). Я понимаю это как -"классический" char. Как правильно ? Можно ли самому менять диапазоны в этом файле ? Подозреваю что можно. Но сомневаюсь, что если поставлю в максимум 2^100 fe, то мне выделится 13 байт при объявлении int. plain - это простой. В данном случае имеется в виду char без модификаторов signed/unsigned Менять хедеры описанные в стандарте - нельзя. (Да и бессмысленно в данном случае, т.к. <limits.h> всего лишь описывает жестко зашитые в компилятор лимиты, а не задает их) SashaMercury5. INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 6.2.5.9The range of nonnegative values of a signed integer type is a subrange of the corresponding unsigned integer type, and the representation of the same value in each type is the same.41) A computation involving unsigned operands can never overflow, because a result that cannot be represented by the resulting unsigned integer type is reduced modulo the number that is one greater than the largest value that can be represented by the resulting type. Второе место где возникли трудности, скорее не с переводом, а с пониманием. Вот как я это понял: Если операндами выражения являются unisigned int, то мы никогда не получим переполнение, потому что, в том случае, если у нас есть переполнение(или как написано-если результат не может быть представлен в unsigned int), то над результатом(над каким результатом ?) произойдёт операция reduced modulo...дальше не понял При переполнении беззнакововой операции результатом будет остаток от деления на 2 в степени разрядность конечного типа. Другими словами все старшие биты, которые не влезают, будут отброшены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 05:02 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Спасибо :) Всё-таки про _Bool очень интересно, такое именование не просто так. Мне кажется, это связано с тем, что на этот тип хватит и бита, а выделяется байт, со всеми вытекающими ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 07:43 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Несколько раз встретил "alignment requirements" . Забыл сразу спросить про то, как правильно это понимать. В первом приближении я понял это как порядок расположения/чтения байт(куска памяти), далее нашёл в сети следующий перевод-"требования к точности совмещения". И всё равно я не уверен что правильно понимаю о чём идёт речь. Ниже пример куска где используется это словосочетание: INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 6.2.5.13 Each complex type has the same representation and alignment requirements as an array type containing exactly two elements of the corresponding real type; the first element is equal to the real part, and the second element to the imaginary part, of the complex number. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 08:25 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Ещё возник один простой вопрос. Верны ли предложения ниже ? 1. Объект объявленный как char имеет размер достаточный для хранения basic execution character set. То есть можно утверждать: char символьный тип. 2. Не везде char будет занимать 1 байт.(больше предположение) 3.signed char и unsigned char - принадлежат множеству целых типов (standart integer types). 4. Объём памяти выделенный на plain char и u/s char одинаков. 5. char, signed char, unsigned char это разные вещи. И никто из них не может рассматриваться попарно равным. 6.int=unsigned int, не существует plain int, или plain smth_type кроме char. Хотя в стандарте указывают plain int, я так понял это signed int. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 08:48 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
7. 9899:201x 14 The type char, the signed and unsigned integer types, and the floating types are collectively called the basic types. The basic types are complete object types. Even if the implementation defines two or more basic types to have the same representation, they are nevertheless different types.44) 15 The three types char, signed char, and unsigned char are collectively called the character types. The implementation shall define char to have the same range, representation, and behavior as either signed char or unsigned char.45) 16 An enumeration comprises a set of named integer constant values. Each distinct enumeration constitutes a different enumerated type. 17 The type char, the signed and unsigned integer types, and the enumerated types are collectively called integer types. The integer and real floating types are collectively called real types. К чему это было смешивать. Было бы так char-символьный, u/s char -целый. А тут получается что u/s char принадлежит двум пространствам. Это мне не нравится. Тогда какой смысл в этом выделении plain char. Да и вообще двусмысленность получается. Может быть я что-то не так понял.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 09:01 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНесколько раз встретил "alignment requirements" . Забыл сразу спросить про то, как правильно это пониматьТребования к выравниванию. Например, в x86 обращение к слову, которое расположено по нечётному адресу "штрафуется" (только) лишними циклами циклами обращения к памяти. Есть архитектуры, где такие обращения запрещены и будет сгенерировано аппаратное исключение. В x86 начиная, если правильно помню, с i486 есть специальный "бит выравнивания" в слове состояния процессора - если установить, то невыровненные обращения будут вызывать аппаратное исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 10:36 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryК чему это было смешивать. Было бы так char-символьный, u/s char -целый. А тут получается что u/s char принадлежит двум пространствам. Это мне не нравится. Тогда какой смысл в этом выделении plain char. Да и вообще двусмысленность получается. Может быть я что-то не так понял..Исторически сложилось. US-ASCII - семибитный код. В асинхронных коммуникация размер символа можно было регулировать. В частности, можно было передавать семибитный код и, дополнительно, бит чётности, который использовала аппаратура. На прикладном уровне получался "свободный" старший бит и вопрос его интерпретации отдавался на откуп разработчиков системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 10:41 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Всё-равно, не понятно, почему в стандарте в одном абзаце char обзывают целочисленным, а в другом символьным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 13:28 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВсё-равно, не понятно, почему в стандарте в одном абзаце char обзывают целочисленным, а в другом символьнымПотому, что все кодируют символы целыми числами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 13:40 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, это логично, это я понимаю. Но что мне выводить с этих 8 бит ? Выводить число, или выводить символ соотвествующий этому числу ? Да, в printf, у меня есть спецификатор, и я укажу что я хочу лицезреть. И всё ? И в чём тогда разница между char и unsigned char ? Меня спросят-какой тип у char, Саша ? Что я отвечу ? у неё нет строгого типа ? PS Теперь я могу не спрашивать даже, очевидно что в Си слабая типизация. Мне кажется это гибко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 13:52 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИ в чём тогда разница между char и unsigned char ? Меня спросят-какой тип у char, Саша ? Что я отвечу ? у неё нет строгого типа ? Отвечай, что существует три разных типа: char, signed char и unsigned char. Правильные кодеры используют первый для симоволов, а два остальных - для чисел. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 13:57 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
1. Объект объявленный как char имеет размер достаточный для хранения basic execution character set. То есть можно утверждать: char символьный тип. В С/С++ нет символьных типов вообще. Есть только числа. 2. Не везде char будет занимать 1 байт.(больше предположение) Вроде как стандарт именно гарантирует, что размер char -- 1 байт. 3.signed char и unsigned char - принадлежат множеству целых типов (standart integer types). Да 4. Объём памяти выделенный на plain char и u/s char одинаков. Да 5. char, signed char, unsigned char это разные вещи. И никто из них не может рассматриваться попарно равным. Не совсем. signed char, unsigned char -- это разные вещи. char -- это тип, совпадающий с одним из двух : либо signed char, либо unsigned char. Каким будет char по умолчанию, возможно, стандарт декларирует, но по факту есть настройки компиляторов, которые делают char по умолчанию signed или unsigned. 6.int=unsigned int, не существует plain int, или plain smth_type кроме char. Хотя в стандарте указывают plain int, я так понял это signed int. В общем, с int та же история, что и с char. Возможно, что стандарт как-то особо выделяет тип char в этом смысле, но это не очень важно. Идея в том, что int == signed int unsigned == unsigned int short == signed short unsigned short == unsigned short и так далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:00 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Я хочу только тебе заметить, что таким образом ты не изучаешь язык, а изучаешь стандарт языка. Я бы не рекомендовал изучать язык по тексту стандарта. Это всё равно, что новичку-скалолазу изучать скалолазание сразу на маршруте 5-ой категории сложности. Да, если влезешь, то будешь наверное знать всё скалолазание, но вот только не факт, что влезешь. Начинай с простого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:04 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
"Правильные кодеры используют первый для симоволов"- только я хочу, чтобы это было закреплено в стандарте :( Он получается несовершенным ( Объясните пожалуйста подробней эту историческую особенность. Basil A. Sidorov Исторически сложилось. US-ASCII - семибитный код. В асинхронных коммуникация размер символа можно было регулировать. В частности, можно было передавать семибитный код и, дополнительно, бит чётности, который использовала аппаратура. На прикладном уровне получался "свободный" старший бит и вопрос его интерпретации отдавался на откуп разработчиков системы. не смог сделать вывод:"char должен быть и символьным и целым". Наверное вы всё корректно объяснили, но мне хватает каких-то фундаментальных знаний для понимания того, что вы хотите донести до меня. Что он ASCII 7-битный был, знал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:05 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryне смог сделать вывод:"char должен быть и символьным и целым". char - символьный. Остальные - целые. НО! Между ними разрешено неявное преобразование. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:10 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Ребята, правильнее думать, что в С нет вообще символьных типов. И в принципе так оно и есть -- специальных символьных операций в языке нет, а с char допустимы все арифметические операции. символьный тип же введён видимо в стандарт только для обозначения char-а. SashaMercury, есть такая книга: http://www.ozon.ru/context/detail/id/5637788/ Это по сути пересказ стандарта языка С на нормальном языке. Если уж так серьёзно погружаться хочешь в язык, рекомендую её читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:41 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Я учту все мнения, спасибо :) Думаю, в дальнейшем некоторые вещи прояснятся сами. MasterZiv, пытался пользоваться функцией fopen, пришлось искать её в стандарте, наткнулся на незнакомый идентификатор в её прототипе-restrict, потому пришлось сначала изучить типы данных, затем разберусь с restrict, затем с fopen, а затем уже поcчитаю пробелы и знаки табуляции в 1.txt. PS Мне думается что любой тип данных, по сути, числовой, в любом языке программирования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 14:54 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryPS Мне думается что любой тип данных, по сути, числовой, в любом языке программирования Ты глубоко неправ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 15:37 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВсё-таки про _Bool очень интересно, такое именование не просто так. Мне кажется, это связано с тем, что на этот тип хватит и бита, а выделяется байт, со всеми вытекающимиВ принципе - верно, это наименование сделано в учебнике с прицелом на "использовать минимальный возможный объем для хранения". Но минимальный возможный объем это всегда байт. Так что... SashaMercuryЕщё возник один простой вопрос. Верны ли предложения ниже ? 1. Объект объявленный как char имеет размер достаточный для хранения basic execution character set. То есть можно утверждать: char символьный тип. 2. Не везде char будет занимать 1 байт.(больше предположение) 3.signed char и unsigned char - принадлежат множеству целых типов (standart integer types). 4. Объём памяти выделенный на plain char и u/s char одинаков. 5. char, signed char, unsigned char это разные вещи. И никто из них не может рассматриваться попарно равным. 6.int=unsigned int, не существует plain int, или plain smth_type кроме char. Хотя в стандарте указывают plain int, я так понял это signed int. 1. Да, утверждать это можно, но только если дашь правильное определение символьного типа. 2. Везде. 3. Да 4. "plain char" == "signed char" 5. Нет. char==signed char. Но signed char != unsigned char 6. Нет. int == signed int SashaMercuryНесколько раз встретил "alignment requirements" . Забыл сразу спросить про то, как правильно это понимать. Для этого тебе надо окунутся слегка в схемотехнику. Байты в памяти обычно хранятся не по отдельности а группами. Эти группы называются "слово". Бывают машины в которых размер слова это один байт, но они чрезвычайно редки. За счет того что компьютер физически не может переслать из памяти в регистр (и обратно) один байт и всегда работает целиком со словом это приводит к "alignment requirements". Например, если тебе надо работать с одним байтом - процессор выкачает из памяти все слово, но проигнорирует старшие байты. Если тебе надо прочитать слово которое хранится в памяти "не правильно", начало в одном физическом слове, а конец в другом, то зависит от процессора - одни процессоры просто откажутся это делать и программа умрет, а другие (x86) сделают два чтения - прочитают оба физических слова, и сдвинут их как нужно прежде чем положить результат в регистр, это естественно намного медленнее чем чтение правильно лежащего слова. В С/С++ это выражается в том, что: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Компилятор сам следит за alignment и старается не резать много-байтовые типы между физическими словами. Это одна из причин почему для каждого типа компьютеров нужен свой компилятор - компилятор должен знать размеры слова. И обозначение 32-bit, 64-bit это как раз и есть размеры слова. И кстати, если ты пишешь под Винды и привык к типу двух-байтовому типу WORD или четырех-байтовому DWORD - это страшное наследие далекого прошлого, когда Винды были версии 1.0 и работали на 16-и битном процессоре, там действительно слова были по 16 бит. А потом, микрософты просто поленились обновить эти обозначения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 18:22 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury6.int=unsigned int int=signed int ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 18:24 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
char может быть как знаковым так и нет в зависимости от настроек компилятора. Поэтому правильнее считать его отличающимся от обоих и никогда не смешивать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 18:29 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White Owl4. "plain char" == "signed char" Нет. char, signed char, unsigned char - 3 разных типа. Единственное что у них равное - размер. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ЗЫ. Для SashaMercury - это С++ если чо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 18:33 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
А вот пример демонстрирующий что и в С char и signed/unsigned char тоже разные типы: Код: plaintext 1. 2. 3. 4. compitererror: conflicting types for 'tt' void tt(signed char c) ^ note: previous declaration of 'tt' was here void tt(char c); Аналогично и с unsigned char ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2014, 18:43 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. На выходе 1, но видимо это не обязательно ? Размер 8 Байт, значит для хранения структуры используется одно слово(у меня 64битная ОС). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Что показывает этот пример ? Что я могу делать явное приведение типов к p/s/u char ? Код: plaintext 1. Хороший пример с прототипом)), действительно компилятор ругается. White Owl , я конечно не идеально понял, но общее представление о том что вы рассказывали иметь буду ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 05:01 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЧто показывает этот пример ? Что я могу делать явное приведение типов к p/s/u char ? Нет. Пример показывает что так как это 3 разных типа, то можно перегрузить функцию test каждым из них. Если бы какие-то из типов совпадали, то была бы ошибка дублирования определения функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 13:06 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Сделай: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 16:42 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. На выходе 1, но видимо это не обязательно ? Размер 8 Байт, значит для хранения структуры используется одно слово(у меня 64битная ОС). С двумя полями порядок не меняет размер. А вот с 3 и более полями размер зависит от порядка, как раз из-за выравнивания. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 17:12 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White Owl, Anatoly Moskovsky, на выходе 12 8 для примера предложенного последним. Последний вопрос по этой теме. Дана структура с n количеством полей int, char перемешанных в любом порядке. Можем ли мы утверждать какой объём будет занимать эта структура только исходя из логических выкладок ? Какая информация для этого нужна о процессоре и ОС ?(разрядность вероятно). Либо мы не можем делать 100% предположения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 03:33 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
VS Express ругается на _Bool кстати ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 03:34 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryVS Express ругается на _Bool кстати _Bool - из стандартного С, а VS никакие версии стандарта С не поддерживает. В VS развивали только С++. (Впрочем обещали исправиться и допилить С) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 03:44 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryWhite Owl, Anatoly Moskovsky, на выходе 12 8 для примера предложенного последним. Последний вопрос по этой теме. Дана структура с n количеством полей int, char перемешанных в любом порядке. Можем ли мы утверждать какой объём будет занимать эта структура только исходя из логических выкладок ? Какая информация для этого нужна о процессоре и ОС ?(разрядность вероятно). Либо мы не можем делать 100% предположения. В общем случае - зависит от компилятора и платформы. Точнее - зависит от параметра packing по умолчанию. В VS это 8 для 32-битных процессоров, 16 для 64-битных. (Для GCC - не помню) packing - это предельное выравнивание, которое применяется даже если у типа больший размер. Зная только этот параметр и выравнивания отдельных типов можно точно рассчитать размеры структур. В частном случае - для int и char - выравнивания не превышают packing почти на любой платформе, поэтому для всех основных платформ и компиляторов размер структуры с этими типами будет одинаковым, т.е. его можно посчитать не привязываясь к платформе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 04:01 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Спасибо. В общем понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 08:23 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
К сожалению не могу в нормальном качестве выложить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2014, 09:00 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Появилось немного времени(скоро предстоит одно событие, потому сейчас в основном занимаюсь математикой, не думайте что я ленюсь и так долго это изучаю), и я продолжил читать. Подскажите пожалуйста по некоторым вопросам 1. ©ISO/IEC ISO/IEC 9899:201x 6.2.5 19The void type comprises an empty set of values; it is an incomplete object type that cannot be completed Перевёл так: тип void представляет собой пустое множество элементов. Далее я не смогу получить логически связное предложение. 2. ©ISO/IEC ISO/IEC 9899:201x 6.2.5 20An array type describes a contiguously allocated nonempty set of objects with a particular member object type, called the element type. The element type shall be complete whenever the array type is specified. Array types are characterized by their element type and by the number of elements in the array. An array type is said to be derived from its element type, and if its element type is T, the array type is sometimes called ‘‘array of T’’. The construction of an array type from an element type is called ‘‘array type derivation’’. 2.1 Red "Тип элементов массива должен быть завершённым при указании типа массива. " Кажется я понял. Словосочетание "завершённый тип элемента" связано с Anatoly Moskovsky Код: plaintext 1. 2. 3. 4. Понял когда писал :) Правильно ? Вероятно при объявлении массива где-то должна сохраняться информация о массиве, чтобы знать сколько выделять памяти на каждый элемент. 2.2 Blue Эта информация хранится где-нибудь ? (провожу аналогию с системными таблицами СУБД). Впрочем выше я уже это спросил. 2.3. Green Как правильно перевести ? 3. ©ISO/IEC ISO/IEC 9899:201x 6.2.5 20A structure type describes a sequentially allocated nonempty set of member objects (and, in certain circumstances, an incomplete array), each of which has an optionally specified name and possibly distinct type. — A union type describes an overlapping nonempty set of member objects, each of which has an optionally specified name and possibly distinct type. 3.1 Не каждый из членов структуры должен иметь имя ? 3.2 red Говорят о том что структура может быть иногда, в некотором смысле, массивом ? Подумал, допустим: Код: plaintext 1. 2. 3. 4. 5. В данном случае, array[100], по функционалу будет отличаться от int a[100]? 4.Вообще, в более широком смысле, можно утверждать что массив массивов есть частный случай массива структур. А можно ли сказать, что массив есть частный случай структуры ? C union type не очень понятно, надо поработать с ними сначала. Но что в данном контексте значит overlapping ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 04:06 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SSВообще, в более широком смысле, можно утверждать что массив массивов есть частный случай массива структур. А можно ли сказать, что массив есть частный случай структуры ? наверное можно всё-же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 04:07 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. ©ISO/IEC ISO/IEC 9899:201x 6.2.5 19The void type comprises an empty set of values; it is an incomplete object type that cannot be completed Перевёл так: тип void представляет собой пустое множество элементов. Далее я не смогу получить логически связное предложение. Тип void ведет себя как неполный, т.е. имеет те же ограничения (неизвестен размер, объявлять можно только указатель ..). При этом его нельзя сделать полным, т.е. это его изначальное и окончательное состояние. SashaMercury2.1 Red "Тип элементов массива должен быть завершённым при указании типа массива. " Кажется я понял. Словосочетание "завершённый тип элемента" связано с Anatoly Moskovsky Код: plaintext 1. 2. 3. 4. Понял когда писал :) Правильно ? Да SashaMercury2.2 Blue Эта информация хранится где-нибудь ? (провожу аналогию с системными таблицами СУБД). Впрочем выше я уже это спросил. Да, хранится в памяти компилятора при компиляции :) SashaMercury3. ©ISO/IEC ISO/IEC 9899:201x 6.2.5 20A structure type describes a sequentially allocated nonempty set of member objects (and, in certain circumstances, an incomplete array), each of which has an optionally specified name and possibly distinct type. — A union type describes an overlapping nonempty set of member objects, each of which has an optionally specified name and possibly distinct type. 3.1 Не каждый из членов структуры должен иметь имя ? 3.2 red Говорят о том что структура может быть иногда, в некотором смысле, массивом ? 3.1 Да. 3.2. Нет, тут говорят про членов структуры. Т.е. структура - это непустой набор объектов-членов, и иногда (вдобавок к этому набору) неполный массив (т.е. массив без указания размерности) Например: Код: plaintext 1. 2. 3. 4. В конце структуры допускается указание массива без размера, который будет в памяти физически расположен за структурой, а его размер будет вычисляться самой программой в рантайме, а не компилятором при объявлении. SashaMercury4.Вообще, в более широком смысле, можно утверждать что массив массивов есть частный случай массива структур. А можно ли сказать, что массив есть частный случай структуры ? Нет, ни то ни то не является частным случаем другого. Но оба являются частным случаем коллекции. Массив - коллекция однотипных объектов, структура - коллекция произвольных объектов. SashaMercuryC union type не очень понятно, надо поработать с ними сначала. Но что в данном контексте значит overlapping ? Означает - перекрывающиеся, т.е. имеющие общую память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 04:46 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Спасибо, в целом я понял. Anatoly Moskovsky В конце структуры допускается указание массива без размера, который будет в памяти физически расположен за структурой, а его размер будет вычисляться самой программой в рантайме, а не компилятором при объявлении. Подумал, где это может использоваться. Например для хранения набора символов неизвестной заранее мощности, возможно 1 символ, возможно 10^10 ? Но тогда "места за структурой" может не хватить, должно быть какое-то ограничение на размер этого массива. Или я не так понял, и хранится указатель на начало массива неизвестной мощности ? Даже если сначала будет посчитан размер, и только потом выделена память на всё, запрашиваемый размер может быть слишком велик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2014, 08:42 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Продолжил дальше. Думал про функции, но чёткой картины не сложилось. Подскажите пожалуйста ©ISO/IEC ISO/IEC 9899:201x 6.2.5 20— A function type describes a function with specified return type. A function type is characterized by its return type and the number and types of its parameters. A function type is said to be derived from its return type, and if its return type is T, the function type is sometimes called ‘‘function returning T’’. The construction of a function type from a return type is called ‘‘function type derivation’’. — A pointer type may be derived from a function type or an object type, called the referenced type. A pointer type describes an object whose value provides a reference to an entity of the referenced type. A pointer type derived from the referenced type T is sometimes called ‘‘pointer to T’’. The construction of a pointer type from a referenced type is called ‘‘pointer type derivation’’. A pointer type is a complete object type. А. Первое выделение я понял как: Тип указатель может быть получен из типа функции или из object type, называемого ссылочным типом. Но мне кажется что я неправильно перевёл, или не правильно понял. Что хотят сказать ? Б."T type derivation" встречаю не первый раз, подскажи как правильно переводить ? В. Ну и самое главное, про функции. Где можно прочитать про то как работает функция ? я написал пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Посмотрел ассемблерный код. Вот что я увидел: 01. Перед вызовом функции выполняется операция push столько раз, сколько у нас аргументов, то есть в стек помещаются аргументы функции 02. Выполняется операции call f(smth_MemoryAddress) 03. происходит операция add esp,8, изменяется адрес стека на вес параметров функции помещённых в стек ? Вот что я предполагаю: В.1. f- возможно, имеет схожий смысл с именем массива. Код: plaintext 1. То есть я делаю вывод что f что-то схожее с константным указателем(только его нельзя прочитать как например *f). Возможно я сильно не прав. В.2. call, программа начинает выполнять инструкции расположенные с адреса smth_MemoryAddress до того как не встретит инструкцию ret. В.3 А как функция получила входные параметры ? Видимо первые строчки кода функции буду обращаться к вершине стека eax ?(rасм код функции я не нашёл.) А как функция узнает сколько значений ей нужно читать с вершины стека ? В.4 Куда будет записан результат ? В вершину стека ? В.5 Параметры ранее помещённые в стек дальше будут затираться ? Они уже не нужны ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 04:39 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА. Первое выделение я понял как: Тип указатель может быть получен из типа функции или из object type, называемого ссылочным типом. Но мне кажется что я неправильно перевёл, или не правильно понял. Что хотят сказать ?"это называется ссылочным типом". Указатель может быть на объект или на функцию - это ссылочный тип. SashaMercuryБ."T type derivation" встречаю не первый раз, подскажи как правильно переводить ?"приведение типа". SashaMercuryТо есть я делаю вывод что f что-то схожее с константным указателем(только его нельзя прочитать как например *f). Возможно я сильно не прав.Нууу... плюс-минус. Имя функции это действительно константный указатель. И синтаксис его использования совпадает с синтаксисом имени массива. Прочитать что находится по этому указателю - нельзя. Умные компиляторы тебе напомнят что это указатель на функцию, глупые позволят прочитать код функции (если ОС тоже это позволит). SashaMercuryВ.2. call, программа начинает выполнять инструкции расположенные с адреса smth_MemoryAddress до того как не встретит инструкцию ret.да SashaMercuryВ.3 А как функция получила входные параметры ? Видимо первые строчки кода функции буду обращаться к вершине стека eax ?(rасм код функции я не нашёл.) А как функция узнает сколько значений ей нужно читать с вершины стека ?А список аргументов на что? SashaMercuryВ.4 Куда будет записан результат ? В вершину стека ?В одном из регистров процессора. В x86 это будет в [?]AX, в MIPS'ах $v0. SashaMercuryВ.5 Параметры ранее помещённые в стек дальше будут затираться ? Они уже не нужны ?ээээ... дальше это когда? Но в общем да, когда функция завершена, все что выделялось для нее на стеке больше не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 05:54 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercuryБ."T type derivation" встречаю не первый раз, подскажи как правильно переводить ?"приведение типа". "приведение" это casting. Type derivation - это порождение нового типа из данного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 11:01 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyWhite Owlпропущено... "приведение типа". "приведение" это casting. Type derivation - это порождение нового типа из данного.Да, но... Нету в нашем традиционном арго такого слова как "порождение типа". Поэтому я и предпочитаю переводить type derivation как "приведение типа". Хотя знать разницу между casting и derivation конечно надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 18:14 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White OwlНету в нашем традиционном арго такого слова как "порождение типа". Поэтому я и предпочитаю переводить type derivation как "приведение типа". Хотя знать разницу между casting и derivation конечно надо. Да мало ли чего нет. Нет устоявшейся терминологии - переводите по словарю. Зачем приплетать совершенно посторонний термин? Термин приведение здесь вообще неуместен, т.к. он устоявшийся и означает преобразование значения из одного существующего типа в другой существующий тип. А тут значений нет, а есть создание нового типа на основе существующего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 18:56 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Спасибо. White Owl SashaMercury В.4 Куда будет записан результат ? В вершину стека ? В одном из регистров процессора. В x86 это будет в [?]AX, в MIPS'ах $v0. 1.то есть фраза - "функция возвращает значение", несёт в себе смысл "функция записывает значение в выделенный(или в один из выделенных) регистр(ов) процессора" ? 2. Код: plaintext 1. кусок кода на который ссылается константный указатель f отработает, и запишет результат в регистр ax. Далее в переменную a будет записан результат из этого регистра. Код: plaintext 1. Кусок кода на который ссылается f отработает, и запишет результат в ax ? 2.1 Как мне прочитать что туда записала функция, если я не сделаю это сразу ? 2.2 Если ниже я выполню: Код: plaintext 1. куда будет записан результат ? 2.3Вообще, как-то отмечается что возвращённое значение уже использовано(прочитано из регистра) ? 2.4 Функция явно(на уровне регистров), может возвращать (записывать в регистр) только одно значение ? Или она может записывать в два регистра, fe. 2.5 Если это так(2.4), то во всех языках программирования, при спуске на уровень регистров, мы увидим что функция возвращает только одно значение ? ps понимаю про неявный возврат через указатель(на начало строки например) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 02:06 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.то есть фраза - "функция возвращает значение", несёт в себе смысл "функция записывает значение в выделенный(или в один из выделенных) регистр(ов) процессора" ? Стандарт ничего про регистры и стек не говорит. Так что это зависит от платформы. На многих платформах например параметры часто передаются не через стек, а через регистры. Точно так же возвращаемое значение может передаваться через стек (хотя обычно используется регистр). SashaMercury2.2 Если ниже я выполню: Код: plaintext 1. куда будет записан результат ? С точки зрения С, результат никуда не будет записан. С точки зрения машинного кода, например на платформе x86 результат будет записан функцией в регистр EAX, а вызывающий код его проигнорирует. Т.е. он будет утерян. ЗЫ. Раз вас такие вопросы интересуют, то лучше параллельно поизучайте ассемблер, чем гадать на форуме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 02:24 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury2.4 Функция явно(на уровне регистров), может возвращать (записывать в регистр) только одно значение ? Или она может записывать в два регистра, fe. Например на 32-битных платформах при возврате 64-битного значения может быть использовано 2 регистра. Но я вас уверяю, при программировании на С/С++ вам должно быть все равно сколько и какие регистры будут задействованы. Компилятор сгенерирует наиболее эффективный код для передачи значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 02:30 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky Стандарт ничего про регистры и стек не говорит. Так что это зависит от платформы. На многих платформах например параметры часто передаются не через стек, а через регистры. Точно так же возвращаемое значение может передаваться через стек (хотя обычно используется регистр). Как тогда с точки зрения С понимать фразу "функция возвращает значение" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 03:11 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКак тогда с точки зрения С понимать фразу "функция возвращает значение" ? Буквально понимать :) Стандарт описывает "что делать" (передать значение), а не "как делать" (записать в регистр) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 04:24 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryAnatoly Moskovsky Стандарт ничего про регистры и стек не говорит. Так что это зависит от платформы. На многих платформах например параметры часто передаются не через стек, а через регистры. Точно так же возвращаемое значение может передаваться через стек (хотя обычно используется регистр). Как тогда с точки зрения С понимать фразу "функция возвращает значение" ?Это значит, что если у тебя есть в программе: Код: plaintext 1. 2. 3. То в переменную запишется результат функции вне зависимости от используемого компилятора и используемой платформы. Как это происходит на уровне процессора - зависит от компилятора и используемой платформы. В общем, тебе явно пора браться за ассемблер и теорию компиляторов. По ассемблеру ищи Питера Абеля "Ассемблер". Он довольно старенький, но все что нужно рассказывает. По теории компиляторов лучшая книга: Альфред Ахо "Компиляторы". Как это все работает вместе (и многом другом) ищи Эндрю Таненбаума "Современные операционные системы". Их все переводили и издавали на русском. Но лучше купи оригиналы на Амазоне, меньше будет терминологической путаницы. Термины переводить занятие сложное и неблагодарное. Лучше понять что они означают и просто использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 04:30 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky Тип void ведет себя как неполный, т.е. имеет те же ограничения (неизвестен размер, объявлять можно только указатель ..). При этом его нельзя сделать полным, т.е. это его изначальное и окончательное состояние. если я напишу авторvoid smth_f() {...} f(...) 1.Никакого значения никуда записано не будет по выходу из функции ? 2. Код: plaintext 1. 2. и Код: plaintext 1. 2. аналогичны ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 07:39 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.Никакого значения никуда записано не будет по выходу из функции ? Если ты сделаешь: Код: plaintext 1. 2. то компилятор выругается. SashaMercury2. Код: plaintext 1. 2. и Код: plaintext 1. 2. аналогичны ?Нет. Ты можешь задавать параметры для f1() , но совсем не можешь задавать для f2(). Код: plaintext 1. 2. Вот эти два определения аналогичны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 16:40 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White Owl Код: plaintext 1. 2. Вот эти два определения аналогичны.стоит, наверное, отметить, что в С++ аналогии обратные, т.е. f1() и f2( void ) имеют одинаковые сигнатуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 16:51 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
egorychWhite Owl Код: plaintext 1. 2. Вот эти два определения аналогичны.стоит, наверное, отметить, что в С++ аналогии обратные, т.е. f1() и f2( void ) имеют одинаковые сигнатуры. Да, это одна из разниц между С и С++. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 18:15 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White Owlegorychпропущено... стоит, наверное, отметить, что в С++ аналогии обратные, т.е. f1() и f2( void ) имеют одинаковые сигнатуры. Да, это одна из разниц между С и С++. Код: plaintext 1. 2. 3. В смысле, что имелось ввиду? http://ideone.com/SHVTqA На C вообще выдает ошибку на int f3(...); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 18:56 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Маленькая поправка. () не совсем то же самое что и (...) в С. В С простой (...) не разрешен - нужен хотя бы один именованный аргумент перед ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 18:57 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyМаленькая поправка. () не совсем то же самое что и (...) в С. В С простой (...) не разрешен - нужен хотя бы один именованный аргумент перед ...В С? Разрешен. Ключик -fallow-parameterless-variadic-functions и никаких запретов :) А в С++ и ключиков не нужно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 22:13 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
White OwlВ С? Разрешен. Ключик В стандартном С это UB. А ключиков можно изобрести много, это не делает код стандартным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 23:24 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SS ©ISO/IEC ISO/IEC 9899:201x 6.2.5 20 — A function type describes a function with specified return type. A function type is characterized by its return type and the number and types of its parameters. A function type is said to be derived from its return type, and if its return type is T, the function type is sometimes called ‘‘function returning T’’. The construction of a function type from a return type is called ‘‘function type derivation’’. — A pointer type may be derived from a function type or an object type, called the referenced type. A pointer type describes an object whose value provides a reference to an entity of the referenced type. A pointer type derived from the referenced type T is sometimes called ‘‘pointer to T’’. The construction of a pointer type from a referenced type is called ‘‘pointer type derivation’’. A pointer type is a completeobject type. White Owl"это называется ссылочным типом". Указатель может быть на объект или на функцию - это ссылочный тип. До своего варианта перевода, я перевёл так-же. Но pointer type и refereced type выделены курсивом, и я подумал, маловероятно этот перевод верный. Видимо ошибся. про void. 1. если я знаю что функция не будет (и не должна) принимать никакие параметры, как правильно будет выглядеть её прототип ? 2. В каких случаях нельзя обойтись без void ? Используете ли вы его ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2014, 03:21 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Переводить "the referenced type" как "ссылочный тип" некорректно, т.к. тут имеется в виду другое - "тот тип на который ссылаются" (к сожалению не могу подобрать короткий русский аналог). А "ссылочный тип" - это тип хранящий ссылку, "reference type" (без "d"). Таких в С нет. SashaMercury1. если я знаю что функция не будет (и не должна) принимать никакие параметры, как правильно будет выглядеть её прототип ? У нас тут что, справочная что-ли? Зачем задавать на форуме тривиальные вопросы? :) Код: plaintext 1. SashaMercury2. В каких случаях нельзя обойтись без void ? Используете ли вы его ? void применяется когда либо нет значения либо тип значения неизвестен или не важен. Например, cтандартная ф-я memcpy может копировать память независимо от типа данных расположенных в ней, поэтому тип не указывают, а используют указатели на void Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2014, 04:15 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, спасибо ) Постараюсь уменьшить количество тривиальных вопросов. Кстати, сейчас правильно Anatoly MoskovskyНапример, cтандартная ф-я memcpy может копировать память независимо от типа данных расположенных в ней, поэтому тип не указывают, а используют указатели на void Код: plaintext 1. Вот так только вроде :) Код: plaintext 1. 2. Сегодня наткнулся на вот что : ©ISO/IEC ISO/IEC 9899:201x 5.2.4.1 Translation limits 1 The implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following limits:18) — 127 nesting levels of blocks — 63 nesting levels of conditional inclusion — 12 pointer, array, and function declarators (in any combinations) modifying an arithmetic, structure, union, or void type in a declaration — 63 nesting levels of parenthesized declarators within a full declarator — 63 nesting levels of parenthesized expressions within a full expression — 63 significant initial characters in an internal identifier or a macro name (each universal character name or extended source character is considered a single character) ... Имеют ввиду что хотя бы один из перечисленных экземпляров должен быть ограничен сверху заданными параметрами ? Если так, то почему так ? Странная реализация, логично было бы накладывать предел сверху на каждый параметр. Потому я вероятно что-то не так понял с переводом. А если я не так понял с переводом, то почему всего 12 указателей ? Это так мало может быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 03:53 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Там пишут что компилятор должен уметь компилировать любую программу в которой встречаются каждый из перечисленных лимитов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 14:55 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryто почему всего 12 указателей Не 12 указателей, а 12 уровней вложенности указателей. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 15:03 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Понял, спасибо :-) а почему именно 12 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 17:25 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПонял, спасибо :-) а почему именно 12 ?Чтобы жизнь медом не казалась! Я знаю зачем может понадобиться указатель на указатель, но нужность трехуровневого указателя уже вызывает у меня сомнения. Ну а уж больше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 18:09 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Там не только про указатели, но и сочетания указателей, функций и массивов в одной декларации. Вполне могут встречаться кострукции вида "указатель на ф-ю, возвращающуюю указатель на массив указателей". Тут уже 4 уровня вложенности: указатель - ф-я - массив - указатель. Скорее всего в каком-то реальном проекте встретилось 6 уровней, вот в стандарте взяли с запасом в 2 раза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 23:04 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyТам не только про указатели, но и сочетания указателей, функций и массивов в одной декларации. Вполне могут встречаться кострукции вида "указатель на ф-ю, возвращающуюю указатель на массив указателей". Тут уже 4 уровня вложенности: указатель - ф-я - массив - указатель.Не, функция тут не будет указателем. Как я понимаю, ты намекаешь на код типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Три уровня у f. Но мне все равно не очень верится что подобное может понадобится в реальном проекте. Уж слишком это заморочено и неудобно. А уж поддержка и изменение этого вообще кошмаром будет. Anatoly MoskovskyСкорее всего в каком-то реальном проекте встретилось 6 уровней, вот в стандарте взяли с запасом в 2 раза.Мне больше кажется, что это они сделали широкий жест: "нате подавитесь". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2014, 00:16 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Three Star Programmer A rating system for C-programmers. The more indirect your pointers are (i.e. the more "*" before your variables), the higher your reputation will be. No-star C-programmers are virtually non-existent, as virtually all non-trivial programs require use of pointers. Most are one-star programmers. In the old times (well, I'm young, so these look like old times to me at least), one would occasionally find a piece of code done by a three-star programmer and shiver with awe. Some people even claimed they'd seen three-star code with function pointers involved, on more than one level of indirection. Sounded as real as UFOs to me. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2014, 00:35 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Везде максимум имеет формат 2^n-1, а тут нет. Вот я и удивился ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2014, 16:33 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Я анализировал один код, позже приведу его полностью. Встретил оператор switch и интересный комментарий: falls through. С этим я разобрался, и решил разобраться с ним полностью, почитал стандарт. ©ISO/IEC ISO/IEC 9899:201x 6.8.4.2 The switch statement Constraints 1 The controlling expression of a switch statement shall have integer type. 2 If a switch statement has an associated case or default label within the scope of an identifier with a variably modified type, the entire switch statement shall be within the scope of that identifier.154) 3 The expression of each case label shall be an integer constant expression and no two of the case constant expressions in the same switch statement shall have the same value after conversion. There may be at most one default label in a switch statement. (Any enclosed switch statement may have a default label or case constant expressions with values that duplicate case constant expressions in the enclosing switch statement.) Semantics 4 Aswitch statement causes control to jump to, into, or past the statement that is the switch body, depending on the value of a controlling expression, and on the presence of a default label and the values of any case labels on or in the switch body. A case or default label is accessible only within the closest enclosing switch statement. 5 The integer promotions are performed on the controlling expression. The constant expression in each case label is converted to the promoted type of the controlling expression. If a converted value matches that of the promoted controlling expression, control jumps to the statement following the matched case label. Otherwise, if there is a default label, control jumps to the labeled statement. If no converted case constant expression matches and there is no default label, no part of the switch body is executed. EXAMPLE In the artificial program fragment Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. the object whose identifier is i exists with automatic storage duration (within the block) but is never initialized, and thus if the controlling expression has a nonzero value, the call to the printf function will access an indeterminate value. Similarly, the call to the function f cannot be reached. 1. Почему нельзя использовать тип float ? Связано с точностью сравнения ? 2. 2 пункт перевода вообще не понял. Подскажите пожалуйста о чём идёт речь. Вероятно что-то очень банальное, мне так кажется. 3. В третьем пункте идёт фраза "after conversion", я так понял после integer promotion ? 4. 3pAny enclosed switch statement may have a default label or case constant expressions with values that duplicate case constant expressions in the enclosing switch statement Любой оператор switch может иметь метку default или case со значениями дублирующими..другой switch ? Это хотят сказать ? 5. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 5.1 константа 1 конвертируется к int ? Согласно пункту 5. 5.2 p5If a converted value matches that of the promoted controlling expression, control jumps to the statement following the matched case label. Otherwise, if there is a default label, control jumps to the labeled statement. If no converted case constant expression matches and there is no default label, no part of the switch body is executed. Не очень понял перевод. Подскажите пожалуйста. 6. Ну и код. Я собственно не поверил, и проверил Код: plaintext 1. 2. 3. 4. 5. 6. 6.1 Так и оказалось, фиг с маслом а не printf. Тогда почему компилятор не ругнулся ? 6.2 Есть ли вообще смысл такхи вот строчек в операторе switch? 6.3 Ну вот это never initialized меня вообще удивило, как такое может быть ? Я ведь чётко присвоил ей значение. 7. Почему оператор switch принимает не адрес объекта ? Исходя из логики работы должен быть указатель. Или тут что-то скрыто ? 8. Два участка кода, и один вы уже видели: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Что будет на выходе ? 5. Дальше, вы не поверите сказал бы я человеку изучавшему Си один день, но вы то знаете: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Что и тут на выходе 5. Что в стандарте я упустил, где написано что он должен работать так ? Мало того Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. На выходе вы конечно знаете что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2014, 05:01 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. А это сможете объяснить как работает? Например, к чему относится break - к case 2 или while? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2014, 05:40 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Я уже с телефона, не могу проверить.Но мне кажется что к case 1. То есть этот break не выполнится. Очень не уверен, switch ранее в Си не использовал. Но ваш пример мне нравится :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2014, 06:18 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДальше, вы не поверите сказал бы я человеку изучавшему Си один день, но вы то знаете: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Что и тут на выходе 5. Что в стандарте я упустил, где написано что он должен работать так ? Вы упустили, что аргумент switch проверяется однократно, на входе в switch, потом делается переход на метку соответствующую этой проверке, далее код просто выполняется пока не встретится break или } (относящиеся к этому switch). Все встретившиеся по пути метки case/default игнорируются. SashaMercury6. Ну и код. Я собственно не поверил, и проверил Код: plaintext 1. 2. 3. 4. 5. 6. 6.1 Так и оказалось, фиг с маслом а не printf. Тогда почему компилятор не ругнулся ? switch это синтаксический сахар над if и goto. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Эквивалентный (почти) код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Таким образом код до case никогда не выполняется. Более того, так как case это по сути обычная метка, то переход на нее, пропускает код инициализации локальных переменных объявленных в switch, поэтому все переменные объявленные там остаются неинициализированными. Чтобы этого не было, нужно после case открыть вложеный блок {} и объявлять переменные в нем. (Каждый вложенный блок имеет собственный код инициализации переменных ) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2014, 17:09 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНо мне кажется что к case 1 Нет. Еще варианты? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2014, 17:10 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Очень интересно. Я думаю что относится к case 2. Хотя я в этом не уверен. Но мне кажется что связывание с этим case должно происходить. Тут для меня скорее другой вопрос. Произойдёт ли переход на case 2 ? Точнее произойдёт ли он только в том случае если на входе будет 1, или будет видна метка 2 вложенная в 1. Я решил что про вложенность меток я ничего не читал, и не знаю. Потому скорее всего такой вложенности быть не может. Потому произойдёт прямой переход на case 2, break будет относиться к нему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 07:01 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky Вы упустили, что аргумент switch проверяется однократно, на входе в switch, потом делается переход на метку соответствующую этой проверке, далее код просто выполняется пока не встретится break или } (относящиеся к этому switch). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Но тогда что будет в этом коде ? Выполнится case 1, затем, дефолт, а дальше произойдёт возврат к p1, и дважды будет происходить инкремент ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 07:05 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SSНо тогда что будет в этом коде ? Выполнится case 1, затем, дефолт, а дальше произойдёт возврат к p1, и дважды будет происходить инкремент ? Совсем дурной, он встретит case 1,и далее сделает 4 инкремента. falls through Тут я понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 07:47 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
три* ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 07:48 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryтри*четыре. default тоже выполнится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2014, 12:53 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
egorych, я понял ) Имел ввиду "кроме case 1 " ещё три инкремента. Anatoly Moskovsky, как правильно рассуждать отвечая на ваш вопрос ? Какой правильный ответ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 01:56 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. А это сможете объяснить как работает? Например, к чему относится break - к case 2 или while? :) SashaMercuryAnatoly Moskovsky, как правильно рассуждать отвечая на ваш вопрос ? Какой правильный ответ ? Рассуждать так. break прерывающий switch относится не к case, а к switch в целом, а case это просто метка, у нее нет семантики прерывания. Теперь, если у нас перемешаны switch и while, то break относится к ближайшему из них по вложенности. Таким образом не смотря на то что break ближе к case, относится он к while, т.к. switch дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 04:04 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky Рассуждать так. break прерывающий switch относится не к case, а к switch в целом, а case это просто метка, у нее нет семантики прерывания. Теперь, если у нас перемешаны switch и while, то break относится к ближайшему из них по вложенности. Таким образом не смотря на то что break ближе к case, относится он к while, т.к. switch дальше. Спасибо.Здорово. Мне очень нравится эта логика языка. Обидно что я всё это знал,(тем более после того когда вы мне объяснили что case это всего лишь метка кода), и не смог сделать выводы самостоятельно :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2014, 04:17 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Продолжил изучать fopen. У меня возникли следующие вопросы. Подскажите пожалуйста по ним. 1. ©ISO/IEC ISO/IEC 9899:201x page 122 The intended use of the restrict qualifier (like the register storage class) is to promote optimization, and deleting all instances of the qualifier from all preprocessing translation units composing a conforming program does not change its meaning (i.e., observable behavior). Данный квалификатор необходим для оптимизации работы препроцеесора ? Т.е. препроцессор данный квалификатор и объекты связанные с ним никаким образом не меняет. Тогда странно, я бы сравнил его не с классом памяти register, а с квалификатором volatile. 2. ©ISO/IEC ISO/IEC 9899:201x 6.7.3.1 Formal definition of restrictLet 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. Первый и второй раздел мне понятны. Первый: D is expr: T* restrict p; И второй говорит о том где расположено выражение D. Подскажите как перевести третий, без него я не смогу понять что дальше. 3. Часто ли вы пользуетесь данным квалификатором ? Насколько он важен ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 06:23 |
|
||
|
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 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Dima TДумаешь еще существуют? Разрабатывали аналоговые процы (если так можно назвать) в период рассвета СССР, в 50-60е, насколько историю знаю - тогда и забросили. Сразу вспомнил: электромеханический аналоговый счетно-решающий прибор для расчета упреждения цели на Шилках ЗСУ-23-4М. Легко переносится четырьмя членами экипажа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 20:16 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Dima TWhite OwlТы не прав. Существуют процессоры основанные на не двоичных системах счисления. В них один бит (один физический провод) может содержать ток разного номинала, каждый номинал соответствует разному числу внутри системы счисления. Думаешь еще существуют? Разрабатывали аналоговые процы (если так можно назвать) в период рассвета СССР, в 50-60е, насколько историю знаю - тогда и забросили. Тогда же были разработки компов с троичной логикой (один вроде даже не сдан на драгметаллы), но потом занялись пародированием разработок IBM и все стало окончательно двоичным. Поправь если ошибаюсь. Я не думаю что они существуют, я знаю что они существуют. Но из лабораторий пока не выходят... Из коммерчески успешных проектов не знаю ни одного. Но то что их нету сейчас, не значит что их не будет никогда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 00:37 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
"И тут Остапа понесло" :D Ну ясно, я как чувствовал, что вы спорить все начнёте, а ответа я не получу ;) Ладно. В любом случае узнал что-то новое, это хорошо. Всем спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 04:31 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Сегодня мне нужно было считать несколько значений по маске. Сначала я хотел нарисовать для этого блоксхему, а потому подумал, что с большой долей вероятности, для этого можно использовать функцию из стандартной библиотеки ввода вывода stdio.h Код: plaintext 1. Я думаю, что она вам всем знакома. Ранее я ей пользовался, но не углублялся в детали её работы. Решил её изучить, и для этого конечно открыл стандарт. У меня возникло несколько вопросов, подскажите пожалуйста. 1. ©ISO/IEC ISO/IEC 9899:201x 7.21.6.2 21. The fscanf function reads input from the stream pointed to by stream, under control of the string pointed to by format that specifies the admissible input sequences and how they are to be converted for assignment, using subsequent arguments as pointers to the objects to receive the converted input. If there are insufficient arguments for the format, the behavior is undefined. If the format is exhausted while arguments remain, the excess arguments are evaluated (as always) but are otherwise ignored. Не очень понял перевод того, что выделил красным. Я понял так: "Если строка формата полностью просмотрена, но не все аргументы функции проинициализированы(ей), оставшиеся аргументы вычисляются, но игнорируются" Концовка моего перевода мне непонятна. 2.©ISO/IEC ISO/IEC 9899:201xThe format shall be a multibyte character sequence, beginning and ending in its initial shift state. Что такое shift state ? 3.ISO/IEC 9899:201xA directive composed of white-space character(s) is executed by reading input up to the first non-white-space character (which remains unread), or until no more characters can be read. The directive nev er fails. То есть пробелы в массиве const char* restrict format не играют никакой роли(только если они не стоят после %) ? 4. ISO/IEC 9899:201xAn input item is read from the stream, unless the specification includes an n specifier Как только встретит %n произойдёт переход к началу следующей строки, и считывание будет идти с неё? 5. ISO/IEC 9899:201xThe length modifiers and their meanings are: hh Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to signed char or unsigned char. h Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to short int or unsigned short int. l (ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to long int or unsigned long int; that a following a, A, e, E, f, F, g, or G conversion specifier applies to an argument with type pointer to double; or that a following c, s, or [ conversion specifier applies to an argument with type pointer to wchar_t. ll (ell-ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to long long int or unsigned long long int. Это про что? Не понял. Сначала подумал что дело идёт о максимальной длине считывания, но не уверен. 6. Вот такой пример input = "2++3=5" Так считываю: Код: plaintext 1. все ок.(хотя я не хочу чтобы тут было все ок) А вот так input = "2++3==5", считывание не происходит корректно(хотя n=4,а не 2 как нужно). Почему так ? 7. Пользуетесь ли вы в своей работе этой функцией ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2014, 10:20 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Прошу прощение, весь код, с типами данных Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2014, 10:22 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryРешил её изучить, и для этого конечно открыл стандарт.для изучения функций стандартной библиотеки полезней читать хэлп к используемому компилятору, а не стандарт. Потому что разработчики компилятора могут от стандарта отойти по каким либо причинам. Стандарт говорит о том, как должно быть, хэлп говорит как есть на самом деле. К сожалению, это не всегда одно и то же SashaMercuryПользуетесь ли вы в своей работе этой функцией ?нет. Слишком уж она требовательна к качеству входящих данных ( замечание относится ко всему семейству scanf, естественно ). Но и на С я не пишу, а в плюсах нет необходимости использовать функции из <cstdio> )) PS прошу прощения за оффтоп ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2014, 11:48 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. ©ISO/IEC ISO/IEC 9899:201x 7.21.6.2 21. The fscanf function reads input from the stream pointed to by stream, under control of the string pointed to by format that specifies the admissible input sequences and how they are to be converted for assignment, using subsequent arguments as pointers to the objects to receive the converted input. If there are insufficient arguments for the format, the behavior is undefined. If the format is exhausted while arguments remain, the excess arguments are evaluated (as always) but are otherwise ignored. Не очень понял перевод того, что выделил красным. Я понял так: "Если строка формата полностью просмотрена, но не все аргументы функции проинициализированы(ей), оставшиеся аргументы вычисляются, но игнорируются" Концовка моего перевода мне непонятна. while arguments remain - переводится "пока остаются [необработанные] аргументы". SashaMercury2.©ISO/IEC ISO/IEC 9899:201xThe format shall be a multibyte character sequence, beginning and ending in its initial shift state. Что такое shift state ? Это про кодировки строк. Если символы могут занимать несколько байтов, так что интерпретация следующего байта зависит от предыдущих, то нельзя передавать в функцию часть строки вырванную из контекста. Например utf-8 - такая кодировка. SashaMercury3.ISO/IEC 9899:201xA directive composed of white-space character(s) is executed by reading input up to the first non-white-space character (which remains unread), or until no more characters can be read. The directive nev er fails. То есть пробелы в массиве const char* restrict format не играют никакой роли(только если они не стоят после %) ? Нет. См. выделенное. SashaMercury4. ISO/IEC 9899:201xAn input item is read from the stream, unless the specification includes an n specifier Как только встретит %n произойдёт переход к началу следующей строки, и считывание будет идти с неё? Читайте доку по scanf, n - в формате имеет совршенно другой смысл - задает длину в одном из аргументов. SashaMercury5. ISO/IEC 9899:201xThe length modifiers and their meanings are: hh Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to signed char or unsigned char. h Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to short int or unsigned short int. l (ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to long int or unsigned long int; that a following a, A, e, E, f, F, g, or G conversion specifier applies to an argument with type pointer to double; or that a following c, s, or [ conversion specifier applies to an argument with type pointer to wchar_t. ll (ell-ell) Specifies that a following d, i, o, u, x, X, or n conversion specifier applies to an argument with type pointer to long long int or unsigned long long int. Это про что? Не понял. Сначала подумал что дело идёт о максимальной длине считывания, но не уверен. Здесь указывается тип данных куда складывается результат. short, int, long - имеют разные физические размеры. SashaMercury6. Вот такой пример input = "2++3=5" Так считываю: Код: plaintext 1. все ок.(хотя я не хочу чтобы тут было все ок) А вот так input = "2++3==5", считывание не происходит корректно(хотя n=4,а не 2 как нужно). Почему так ? %d читает число со знаком, а %c читает ровно один символ - поэтому все правильно. SashaMercury7. Пользуетесь ли вы в своей работе этой функцией ? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2014, 14:57 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, 1. Почему-то подумал что while в том контексте читается как but. По остальным вопросам разберусь на свежую голову. Ещё раз перечитаю и разберу. Всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2014, 15:23 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. Почему-то подумал что while в том контексте читается как but. Можно подумать это меняет смысл предложения :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2014, 15:42 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
C праздником вас, Сообщество :) Желаю всем здоровья. Также, надеюсь вы будете читать код, такой-же прекрасный, как "Идиот" Достоевского, интересных решений и идей в творчестве. Софья Васильевна КовалевскаяСтоит мне только коснуться математики, как я опять забуду всё на свете. PS Отмечу, что я не стал бы выделять настоящих программистов от математиков. Настоящие программисты несомненно тоже математики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2014, 16:05 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryPS Отмечу, что я не стал бы выделять настоящих программистов от математиков. Программирование это больше логика чем математика, я бы даже сказал что математики мало в программировании. Говорят из философов хорошие программисты получаются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2014, 19:22 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНастоящие программисты несомненно тоже математики. С точки зрения математики мой текущий проект был закончен в июне. А с точки зрения программирования я до сих пор отлаживаю его. Так что позвольте не согласиться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2014, 23:51 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Сегодня читал стандарт, и встретил следующее ©ISO/IEC ISO/IEC 9899:201x 6.4.2.2 Predefined identifiers6.4.2.2 Predefined identifiers Semantics 1 The identifier _ _func_ _ shall be implicitly declared by the translator as if, immediately following the opening brace of each function definition, the declaration static const char _ _func_ _[] = "function-name"; appeared, where function-name is the name of the lexically-enclosing function.72) 2 This name is encoded as if the implicit declaration had been written in the source character set and then translated into the execution character set as indicated in translation phase 5. 3 EXAMPLE Consider the code fragment: Код: plaintext 1. 2. 3. 4. 5. 6. Each time the function is called, it will print to the standard output stream: myfunc Forward references: function definitions (6.9.1). В программе это будет выглядеть вот так : Код: plaintext 1. 2. 3. 4. 5. Зачем это нужно ? С квалификаторами const и static я согласен, но зачем именно такое именование переменной ? И зачем нужно добавлять "[]" ? И не очень понял почему привели именно этот пример, это настолько актуально ? Чем так важен идентификатор(токен) _ _func_ _ ? Подскажите пожалуйста. Вот если была бы функция, вызов которой позволял выводить имя функции, предварительно не записывая его в константную статическую переменную, это было бы интересно. Правда пока не очень где это может пригодиться, но скорее всего применение найти можно было бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 05:04 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Predefined означает заранее определенный. Т.е. в данном случае определенный не в программе, а компилятором, автоматически. Поэтому SashaMercuryВ программе это будет выглядеть вот так : Код: plaintext 1. 2. 3. 4. как если бы функция выглядела так Код: plaintext 1. 2. 3. 4. 5. ЗЫ. Стыдно через почти год изучения С не знать зачем тут [] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 05:55 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky ЗЫ. Стыдно через почти год изучения С не знать зачем тут [] Смутило имя переменной, с двумя _ в начале и в конце. И более привычна такая запись Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 06:56 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Всё равно не понял зачем это нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 06:59 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
всмысле не зачем [] нужно, а зачем нужен этот механизм. И почему именно такое именование переменной __func__ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 07:08 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Всё, что начинается с двух подчёркиваний, зарезервировано стандартом под компилятороспецифичные идентификаторы. s[] — не то же самое, что *s, различия в размещении переменной в памяти и в её размере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 09:55 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
RWolfSashaMercury, s[] — не то же самое, что *s, различия в размещении переменной в памяти и в её размере. Различие в том, что Код: plaintext 1. есть определение массива на 4 элемента, s-имя массива, константа если хотите и адрес его первого элемента. Код: plaintext 1. А s1 это переменная. К ней соответственно применимы s1++,s=new_p ; etc Потому фраза выделенная красным некорректна. Или не до конца корректна, если кто придерётся. Спасибо. Эти вещи мне были понятны(и я объяснил по какой причине я ошибся) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 10:22 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryвсмысле не зачем [] нужно, а зачем нужен этот механизм. для вызова деструкторов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 10:45 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
ИзопропилSashaMercuryвсмысле не зачем [] нужно, а зачем нужен этот механизм. для вызова деструкторовв С? откуда бы им там взяться, интересно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 11:25 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
egorychИзопропилпропущено... для вызова деструкторовв С? откуда бы им там взяться, интересно? там что-то про чисты С - было? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 11:47 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Изопропилтам что-то про чисты С - было? Вся тема про чистый С, вообще-то, как и стандарт из которого цитата :) ИзопропилSashaMercuryзачем нужен этот механизм. для вызова деструкторов А причем деструкторы к __func__ вообще непонятно. Можете объяснить? (Предположим, что мы говорим про С++) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 13:55 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyА причем деструкторы к __func__ вообще непонятно. Можете объяснить? (Предположим, что мы говорим про С++) там два вопросв было - один насчёт [] второй насчёт идентификаторов с подчерками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 14:28 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Изопропилтам два вопросв было - один насчёт [] второй насчёт идентификаторов с подчерками Так. И какая связь деструкторов с любым из этих вопросов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2014, 14:55 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
RWolfSashaMercury, Всё, что начинается с двух подчёркиваний, зарезервировано стандартом под компилятороспецифичные идентификаторы. Наконец-то я прочитал что-то про эти подчёркивания в литературе. Diomidis SpinellisCode Reading: The Open Source Perspective 9.3.2 Namespaces An important concept of a module is the principle of information hiding, prescribing that all information related to a module should be private to it unless it is specifically declared to be public. In C modules implemented as a single file you will find that global identifiers are declared with the static keyword to limit their visibility to a single compilation unit (file). Код: plaintext 1. 2. 3. However, this technique does not prevent identifiers used in header files from leaking to the files that include them. As an example, in the C and C++ language a typedef or a preprocessor macro definition in a header file may result in a clash when another file defines a global function or variable with the same name. Although some cases can be solved by renaming the offending identifier in the program being developed, others, where two different existing modules clash with each other, can be difficult to solve since they may not fall under the developer's control. Consider the (contrived) example of compiling the following code. Код: plaintext 1. 2. The two header files included both define a uch identifier, thus creating the following error. libc/regex/utils.h:46: redefinition of `uch' libz/zutil.h:36: `uch' previously declared here This problem of namespace pollution is solved in a number of ad hoc ways in the C language; other languages like Ada, C++, Eiffel, Java, Perl, and the Modula family provide specific constructs for combatting this problem. A common solution for curbing the namespace pollution, without the need for additional language-provided facilities, involves prefixing identifiers with a certain unique prefix. Notice how in the example below all type, function, and macro identifiers of the rnd.h header file are prefixed with an rnd prefix. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. In fact, the prefix method of identifier isolation is officially sanctioned by the ANSI C standard by reserving all identifiers starting with an underscore character (_) for use by the language implementation. When reading a library header you will notice that all identifiers start with an underscore, thus being kept separated from any identifiers a user might define. Код: plaintext 1. 2. 3. 4. Although in the above example the _base and _size structure tags belong—according to ANSI C—in a separate namespace (that of the __sbuf structure tags), they still need to be prefixed with an underscore since they might clash with macro definitions. To avoid the problems we described above you will find that modern C++ programs often make use of the namespace functionality. Таким образом, это искусственный элемент. Используете ли вы префиксы в своей работе ? (провёл аналогию с БД, мне например не нравится когда к атрибутам отношения добавляют префикс, не вижу в этом смыла, хотя возможно просто чего-то не знаю) Хотя, в данном случае, дело не в нравится/не нравится, а в необходимости связанной с ODR(One Definiton Rule). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 02:45 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Последний участок кода неккоректен Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 02:46 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryТаким образом, это искусственный элемент. Используете ли вы префиксы в своей работе ? Вы все не так поняли. Программистам запрещено объявлять имена с префиксом из "_". Только создатели компилятора имеют право это делать при реализации стандартных библиотек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 03:21 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryТаким образом, это искусственный элемент. Используете ли вы префиксы в своей работе ? Вы все не так поняли. Программистам запрещено объявлять имена с префиксом из "_". Только создатели компилятора имеют право это делать при реализации стандартных библиотек. сейчас я выполнил вот такой код Код: plaintext 1. 2. 3. 4. 5. 6. Хотя то, о чём вы говорите, я прочитал DSIn fact, the prefix method of identifier isolation is officially sanctioned by the ANSI C standard by reserving all identifiers starting with an underscore character (_) for use by the language implementation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 03:27 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryсейчас я выполнил вот такой код Код: plaintext 1. 2. 3. 4. 5. 6. Вы должны уже понимать разницу между юридическими законами и законами физики. Здесь речь про первые :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 04:41 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, понял что это юридические правила. Спасибо :) Об этом действительно написано в стандарте? Поищу. Вы используете префиксы ради ODR в своих программах ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 04:59 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryТаким образом, это искусственный элемент. Используете ли вы префиксы в своей работе ? Вы все не так поняли. Программистам запрещено объявлять имена с префиксом из "_". Только создатели компилятора имеют право это делать при реализации стандартных библиотек. Теперь я полностью понял вашу мысль. Вот как я понял, то что там написано. "Для того чтобы ограничить область видимости некоторых идентификаторов(для исключения конфликтов в части ODR) существует квалификатор static. Однако, он не помогает, когда программист использует директиву препроцессора #include и включает один файл в другой. По этой причине был искусственно введена префиксная система к идентификаторам каждого конкретного файла. Для встроенных библиотек, например, используется префикс _ или __(для структур). Для других файлов, префикс устанавливается на усмотрение программиста(желательно не использовать _ и __)". Вы, как мне теперь понятно, говорите что я всё не так понял, и нужно лишь знать то, что _ и __ префиксы идентификаторов во встроенных библиотеках языка. И про проблему ODR (т.е. то для чего нужны эти префиксы), вы не говорите. Т.е. вы не связываете эти префиксы с ODR. Раз у вас различное мнение с автором книги, то с большой долей вероятности, у меня есть ошибка в рассуждениях и понимании вас и автора, где она ? Объясните пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:13 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Поискал в стандарте, и не нашёл где было бы написано о каких-либо соглашениях касаемо имён. Плохо искал ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:20 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПоискал в стандарте, и не нашёл где было бы написано о каких-либо соглашениях касаемо имён. Плохо искал ? соглашения то есть конечно, а вот конкретно про _ и __ ничего не нашёл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:30 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, По стандартам С и С++ в юзерской программе не может быть двойных подчеркиваний и одиночных подчеркиваний перед заглавными буквами. Других ограничений на подчеркивания нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:37 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Про другие ограничения я поторопился. С117.1.3 Reserved identifiers ... — All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use. — All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:42 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
В вот в С++ С++1117.6.4.3.3 Global names Certain sets of names and function signatures are always reserved to the implementation: — Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use. — Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.175 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:46 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
В С и С++ хоть по разному записано, но означает одно и то же. Префиксы "_" и "__" - зарезервированы для компилятора, и не дозволяются в юзерских именах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:48 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyПро другие ограничения я поторопился. С117.1.3 Reserved identifiers ... — All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use. — All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces. нашёл. Значит это не юридические правила, а физические правила. Просто VS их не выполняет(реализовал компилятор Си, не выполнив все требования стандарта), правильно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:48 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗначит это не юридические правила, а физические правила Физические законы не требуют формулирования, они выполняются в любом случае. А тут именно юридически запрещено. Как например запрещено воровство законами УК, и даже если сейф закрыт на замок и воровство из него невозможно, то это не значит что воровать запрещено физическими законами. Просто пока не удалось взломать сейф :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:53 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, вот смотрите , я напишу такой код Код: plaintext 1. 2. у нас будет redefinition, и это написано в стандарте. Программа не запустится. Стандарт это свод законов описывающих язык. Значит это невозможно физически. Аналогично и с underscore. А вот законы негласные, касаемо читабельности кода, именованию переменных, организации полуоткрытых справа интервалов,etc это уже юридические законы грамотного Си-программиста. Вот как я больше понимаю разницу между физическими и юридическими законами в части программирования на Си. Потому, мне кажется, тут недоработка разработчиков VS. Они не до конца реализовали естественную физическую среду Си. Хотя ваш подход, также уместен, и я его принимаю. Можно рассуждать что это свод законов, юридических. А то что VS их не выполняет, это наши проблемы. Мы всё равно не должны брать деньги из открытого сейфа. А физическими законами тогда что будет ? Или будут только юридические ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 07:03 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИли будут только юридические Конечно. Ведь стандарт - это юридический документ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 07:16 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, хорошо. Это я тоже принимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 07:18 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, То что компилятор пропускает _ в юзерской программе имеет вполне разумное объяснение. Для компилятора нет четкой грани между кодом программы, где запрещено, и кодом стандартной библиотеки, где разрешено. Поэтому проконтролировать выполнение правила нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 07:18 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Си имеет фиксированное стандартом количество встроенных библиотек с фиксированными именами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 07:34 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SSAnatoly Moskovsky, Си имеет фиксированное стандартом количество встроенных библиотек с фиксированными именами? Думаю, да. Однако вывод который я хотел ранее сказать-"почему бы не проверять имена компилируемых файлов, и исходя из этого либо разрешать либо запрещать префиксы _ и __ ". Но этот вывод будет неправильным, ибо задача компилятора не проверять имена компилируемых файлов, а компилировать исходный код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 09:14 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercury, То что компилятор пропускает _ в юзерской программе имеет вполне разумное объяснение. Для компилятора нет четкой грани между кодом программы, где запрещено, и кодом стандартной библиотеки, где разрешено. Поэтому проконтролировать выполнение правила нельзя. а это значит, что данный вывод правильный. Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 09:15 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercurySSAnatoly Moskovsky, Си имеет фиксированное стандартом количество встроенных библиотек с фиксированными именами?Думаю, да.Не надо думать. Надо смотреть вокруг, а не просто втыкать текст стандарта: Windows SDK Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. llvm clang Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 12:54 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, не могли бы вы объяснить, что вы хотите сказать, для "особо одарённых" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 16:16 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryBasil A. Sidorov, не могли бы вы объяснить, что вы хотите сказатьон хочет сказать, что, хотя WinSDK и не является частью стандартной библиотеки С, там всё же используются идентификаторы, начинающиеся с __ и с _Большая-буква. Равно, как и в некоторых других библиотеках. Вывод: в прикладном коде лучше не использовать такие идентификаторы в глобальном пространстве имён, а вот в общеупотребительных библиотеках - это наоборот, вполне допустимая практика, и более того, желательная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 16:26 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, а почему тебя вообще так "парит" этот вопрос? Так и хочется тебе сказать - "не парься!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 16:29 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
egorychВывод: в прикладном коде лучше не использовать такие идентификаторы в глобальном пространстве имён, а вот в общеупотребительных библиотеках - это наоборот, вполне допустимая практика, и более того, желательная Это как правила хорошего тона в обществе джетльменов. Тоесть ты конечно-же можешь "запилить" code-style аля obfuscation. Но рано или поздно посмотрят как на дебила. Кому плохо сделал? Себе наверное. Или что, латиницы не хватило? Малобукв? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 16:33 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
mayton, Я бы сказал, что "математика учит обращать внимание на самое важное", но не буду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 16:33 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
maytonТоесть ты конечно-же можешь "запилить" code-style аля obfuscation. Но рано или поздно посмотрят как на дебила. Кому плохо сделал? Себе наверное. Или что, латиницы не хватило? Малобукв?Многабукав. А теперь смотрим включаемые файлы компиляторов и (g)clib/SDK - обфускация на марше. А всё потому, что в этих включаемых файлах - не всегда тривиальные косвенные определения. И подчерки служат той же цели, что и красный сигнал световора: "Не лезь сюда! Здесь опасно". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 16:44 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercuryBasil A. Sidorov, не могли бы вы объяснить, что вы хотите сказатьон хочет сказать, что, хотя WinSDK и не является частью стандартной библиотеки С, там всё же используются идентификаторы, начинающиеся с __ и с _Большая-буква. Равно, как и в некоторых других библиотеках. а мне кажется, разработчики WinSDK не соблюдают требования стандарта и нарушают законы. Они должны были использовать свой префикс, как и писал Диомидис Спинеллис. egorychВывод: в прикладном коде лучше не использовать такие идентификаторы в глобальном пространстве имён, а вот в общеупотребительных библиотеках - это наоборот, вполне допустимая практика, и более того, желательная опять таки, про общеупотребительные библиотеки, в стандарте не сказано что в этих библиотеках можно использовать таки префиксы. С11 7.1.3 Reserved identifiers ... — All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use. — All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces. Вывод: в прикладном коде и в общеупотребительных библиотеках нельзя использовать такие префиксы. PS Это не мои выводы. Это говорит стандарт языка Си. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 01:47 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercury, а почему тебя вообще так "парит" этот вопрос? Так и хочется тебе сказать - "не парься!" Дело в том, что мне нравится этот язык, и я не могу закрыть на что-то глаза. Каждая деталь важна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 01:59 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskymayton, Я бы сказал, что "математика учит обращать внимание на самое важное", но не буду C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 02:00 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВывод: в прикладном коде и в общеупотребительных библиотеках нельзя использовать такие префиксы. PS Это не мои выводы. Это говорит стандарт языка Си. Это не совсем так. Стандарт описывает что и с какими именами должна содержать реализация языка. При этом реализация вполне может содержать и другие возможности, не описанные в стандарте, и вот они должны подчиняться именованию с подчеркиванием. WinSDK это часть реализации языка С/С++ на платформе Windows в VS (без нее невозможно писать программы под винду). Поэтому она не считается какой-то там пользовательской библиотекой и имеет право на использование префиксов __ для огораживания своих внутренностей от пользовательского кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 02:28 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКаждая деталь важна и умение отличать первостепенное от второстепенного ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 05:08 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryВывод: в прикладном коде и в общеупотребительных библиотеках нельзя использовать такие префиксы. PS Это не мои выводы. Это говорит стандарт языка Си. Это не совсем так. Стандарт описывает что и с какими именами должна содержать реализация языка. При этом реализация вполне может содержать и другие возможности, не описанные в стандарте, и вот они должны подчиняться именованию с подчеркиванием. WinSDK это часть реализации языка С/С++ на платформе Windows в VS (без нее невозможно писать программы под винду). Поэтому она не считается какой-то там пользовательской библиотекой и имеет право на использование префиксов __ для огораживания своих внутренностей от пользовательского кода. Понимаю вас. Тем не менее у меня остались противоречия по этому вопросу, но они связаны с тем, что я не вижу всю картину. Потому, я запомню это, и в будущем ещё подумаю над этим вопросом. Спасибо. PS Использует ли кто-нибудь свои префиксы для предотвращения нарушения ODR в своих программах ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 05:53 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИспользует ли кто-нибудь свои префиксы для предотвращения нарушения ODR в своих программах ? тынц , и тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 09:19 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
egorych, вы шутите, давая ссылку на венгерскую нотацию ?) Этот вопрос не в рамках того что такое венгерская нотация, а в рамках этого отрывка из книги Спинеллиса SSRWolfSashaMercury, Всё, что начинается с двух подчёркиваний, зарезервировано стандартом под компилятороспецифичные идентификаторы. Наконец-то я прочитал что-то про эти подчёркивания в литературе. Diomidis SpinellisCode Reading: The Open Source Perspective 9.3.2 Namespaces An important concept of a module is the principle of information hiding, prescribing that all information related to a module should be private to it unless it is specifically declared to be public. In C modules implemented as a single file you will find that global identifiers are declared with the static keyword to limit their visibility to a single compilation unit (file). Код: plaintext 1. 2. 3. However, this technique does not prevent identifiers used in header files from leaking to the files that include them. As an example, in the C and C++ language a typedef or a preprocessor macro definition in a header file may result in a clash when another file defines a global function or variable with the same name. Although some cases can be solved by renaming the offending identifier in the program being developed, others, where two different existing modules clash with each other, can be difficult to solve since they may not fall under the developer's control. Consider the (contrived) example of compiling the following code. Код: plaintext 1. 2. The two header files included both define a uch identifier, thus creating the following error. libc/regex/utils.h:46: redefinition of `uch' libz/zutil.h:36: `uch' previously declared here This problem of namespace pollution is solved in a number of ad hoc ways in the C language; other languages like Ada, C++, Eiffel, Java, Perl, and the Modula family provide specific constructs for combatting this problem. A common solution for curbing the namespace pollution, without the need for additional language-provided facilities, involves prefixing identifiers with a certain unique prefix. Notice how in the example below all type, function, and macro identifiers of the rnd.h header file are prefixed with an rnd prefix. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. In fact, the prefix method of identifier isolation is officially sanctioned by the ANSI C standard by reserving all identifiers starting with an underscore character (_) for use by the language implementation. When reading a library header you will notice that all identifiers start with an underscore, thus being kept separated from any identifiers a user might define. Код: plaintext 1. 2. 3. 4. Although in the above example the _base and _size structure tags belong—according to ANSI C—in a separate namespace (that of the __sbuf structure tags), they still need to be prefixed with an underscore since they might clash with macro definitions. To avoid the problems we described above you will find that modern C++ programs often make use of the namespace functionality. Таким образом, это искусственный элемент. Используете ли вы префиксы в своей работе ? (провёл аналогию с БД, мне например не нравится когда к атрибутам отношения добавляют префикс, не вижу в этом смыла, хотя возможно просто чего-то не знаю) Хотя, в данном случае, дело не в нравится/не нравится, а в необходимости связанной с ODR(One Definiton Rule). имеется ввиду, используете ли вы префиксы в своей работе для того, о чём говорит Спинеллис ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 09:41 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryиспользуете ли вы префиксы в своей работе для того, о чём говорит Спинеллися живу в мире С++, у меня там для этого есть пространства имён ))) хотя использую при именовании исходных файлов и элементов перечисления, а также иногда пользуюсь в смысле второй моей ссылки от Спольски в языках, где нет подходящих языковых конструкций. Имеется ввиду вот что: Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 10:03 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercurymaytonSashaMercury, а почему тебя вообще так "парит" этот вопрос? Так и хочется тебе сказать - "не парься!" Дело в том, что мне нравится этот язык, и я не могу закрыть на что-то глаза. Каждая деталь важна ОКИ. Не потони в деталях. Особенно когда будешь изучать различные API. Это уже за рамками стандарта С. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 12:18 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
egorych, т.е. вы используете пространства имён, как и говорит далее Спинеллис(последняя строчка процитированного). Спасибо, что поделились опытом :) mayton, оки-доки-артишоки :D хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 01:59 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Сегодня мне понадобилась функция fscanf. Точнее то, что она возвращает. ISO/IEC 9899:201x 7.21.6.2 The fscanf function 16The fscanf function returns the value of the macro EOF if an input failure occurs before the first conversion (if any) has completed. Otherwise, the function returns the number of input items assigned, which can be fewer than provided for, or even zero, in the event of an early matching failure. Приведите пожалуйста пример, когда она вернёт EOF. У меня не получилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 07:46 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, файл пустой, например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2015, 10:26 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Спасибо, сработало. Странно, ранее, я читал все что было в файле, доходил до конца. И снова делал fscanf, однако -1 почему-то не возвращалось. Например файл содержал 100 temp EOF Делал так Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2015, 01:52 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Достаточно часто в целочисленных алгоритмах встречается деление целых чисел, и в частности, часто необходимо найти как остаток от деления, так и целую часть. Приходится использовать два мультипликативных оператора: Код: plaintext 1. 2. Аналогичные результаты можно получить после нахождения целой части с помощью элементарных арифметических операций, например. Предполагаю, что реализация операторов % и / может позволить получить оба значения за одно действие. Возможно потребуются ассемблерные вставки. Правильно ли я предполагаю ? Как вы поступаете в таком случае ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 03:33 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
В стандарте не нашел ничего об этом,жаль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 03:36 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВозможно потребуются ассемблерные вставки. Правильно ли я предполагаю ? Как вы поступаете в таком случае ? Поступаем так: Код: plaintext 1. 2. Ассемблерные вставки не требуются. Это забота компилятора использовать возможности процессора для вычисления выражений за одну операцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 05:26 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryВозможно потребуются ассемблерные вставки. Правильно ли я предполагаю ? Как вы поступаете в таком случае ? Поступаем так: Код: plaintext 1. 2. Ассемблерные вставки не требуются. Это забота компилятора использовать возможности процессора для вычисления выражений за одну операцию. т.е. по факту деление будет происходить один раз ? Вторая операция потребует время только на доступ к ячейке памяти, а не на вычисление ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 06:37 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryт.е. по факту деление будет происходить один раз ? Вторая операция потребует время только на доступ к ячейке памяти, а не на вычисление ? Стандарт не обязывает компиляторы делать оптимизации. Поэтому что будет по факту, зависит от компилятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 07:13 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. Достаточно часто в целочисленных алгоритмах встречается деление целых чисел, и в частности, часто необходимо найти как остаток от деления, так и целую часть. Приходится использовать два мультипликативных оператора: Код: plaintext 1. 2. Аналогичные результаты можно получить после нахождения целой части с помощью элементарных арифметических операций, например. Предполагаю, что реализация операторов % и / может позволить получить оба значения за одно действие. Возможно потребуются ассемблерные вставки. Правильно ли я предполагаю ? Как вы поступаете в таком случае ? Если очень хочется работать "без потери точности", можно использовать <ratio> . За деление и остаток от него можно не беспокоиться. Пересылка регистр-память стоит всё равно гораздо дороже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 07:26 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. 2. Предполагаю, что реализация операторов % и / может позволить получить оба значения за одно действие. Возможно потребуются ассемблерные вставки. Правильно ли я предполагаю ? Как вы поступаете в таком случае ? Правильно предполагаешь. Процессор может посчитать одной командой http://www.kolasc.net.ru/cdo/programmes/assembler/div.html ИМХУ писать надо как ты написал. Думаю компилятор сам догадается что этот код одной командой можно выполнить. Даже если не догадается - процессор при вычислении может это параллельно посчитать и разницы не будет. По большому счету нет смысла заморачиваться, как выше подмечено: пересылка результата в память гораздо медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 08:06 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 08:35 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, div, ldiv, lldiv ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 13:57 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Думаю что пожелание Саши по поводу оптимизации деления и расчёта остатка имеет смысл в крито-системах где длина операндов может достигать 4096 bit и где расчёт и пересылка имеют конкретную стоимость в единицах времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 15:26 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
BagaBaga За деление и остаток от него можно не беспокоиться. Пересылка регистр-память стоит всё равно гораздо дороже. Если какое-либо действие избыточно, то сколько бы оно не стоило, от него нужно избавиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 17:00 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
maytonДумаю что пожелание Саши по поводу оптимизации деления и расчёта остатка имеет смысл в крито-системах где длина операндов может достигать 4096 bit и где расчёт и пересылка имеют конкретную стоимость в единицах времени. Может быть :) А вообще, этот вопрос возник ровно по одной причине. Построил схему для целочисленного алгоритма, и вдруг мне стало некомфортно смотреть на неё, как будто забыл указать константный квалификатор к источнику копирования(такой же дискомфорт), и я решил что нужно попытаться избавиться от этого "двойного деления". Спасибо всем за советы :) PS RWolf, это видимо функции стандартной библиотеки С++? завтра посмотрю внимательно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 17:08 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
В стандарте С++ посмотрю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 17:09 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryэто видимо функции стандартной библиотеки С++? завтра посмотрю внимательно Нет. Скорее всего Wolf давал тебе ссылку на инструкции языка ассемблер. Впрочем... С++ дружит с ассемблером на уровне специальных директив. Если тебе такое по душе конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 17:19 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 17:37 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Ого. Вона как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 17:40 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЕсли какое-либо действие избыточно, то сколько бы оно не стоило, от него нужно избавиться Нет, если это ухудшит читаемость кода, при том что компилятор сам умеет оптимизировать это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 19:23 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryЕсли какое-либо действие избыточно, то сколько бы оно не стоило, от него нужно избавиться Нет, если это ухудшит читаемость кода, при том что компилятор сам умеет оптимизировать это. +1 SashaMercury, программирование на 99% это ремесло и на 1% исскуство. Ремесло требует оптимизации совсем в другом, например в читабельности кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2015, 19:28 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. 1. Подскажите пожалуйста, как правильно переводить слово statement из стандарта на русский язык. Не могу хорошее слово подобрать. declaration - объявление, expresson - выражение, а statement не знаю. 2. Может ли expression содержать ; ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2015, 10:14 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
оператор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2015, 10:28 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Странно. Почему так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2015, 14:30 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
[quot SashaMercury а statement не знаю. Тут надо аккуратно очень. Обычно переводят "оператор". Но в С и operator тоже есть -- + - * / и так далее. Как тогда его переводить ? Книг русских по С/С++ я уже давно не читал, как переводят -- не знаю. Ну или забыл. Можно "оператор"/"операция", но чревато путаницей. Потом посмотрю, как переводили Хабрисона/Стила. 2. Может ли expression содержать ; ? Как бы ';' именно expression и завершает. Как выражение может содержать его ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2015, 14:46 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
MasterZivКак бы ';' именно expression и завершает. Как выражение может содержать его ?пустой оператор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2015, 15:31 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
В математической логике "statement" может еще использоваться как утверждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2015, 17:36 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
egorychMasterZivКак бы ';' именно expression и завершает. Как выражение может содержать его ?пустой оператор? Точка с запятой завершает оператор (statement) вычисления выражения. Как она может быть частью выражения ? Она его просто завершит, и начнётся новый оператор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2015, 18:06 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
MasterZivТочка с запятой завершает оператор (statement) вычисления выражения. Как она может быть частью выражения ? Она его просто завершит, и начнётся новый оператор.частью быть не может, но может быть самим выражением. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2015, 18:25 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
egorychпустой оператор "У тебя должно быть очень хорошее зрение, если ты видишь ничего." (с) ЛК Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2015, 18:30 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Искал в стандарте Си, и в стандарте С++ макрозамену для Pi. Не нашёл. Плохо искал ? Или её просто нет в этих стандартах ? Пробовал "гуглить", как советует Анатолий, нашёл аналогичный вопрос . Однако не помог совет предложенный на той странице PS понимаю что могу самостоятельно определить эту константу используя макрозамену. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 09:20 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, #include <math.h> , не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 09:33 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercury, #include <math.h> , не? Должно быть так. Но как в этой библиотеке называется эта константа ? PI и M_PI там не нашёл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 10:16 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
По ссылке примеры почитал? Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 10:20 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Dima TПо ссылке примеры почитал? Код: plaintext 1. 2. 3. 4. 5. 6. 7. конечно почитал. Не помогло. MVS 2013 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 10:24 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryконечно почитал. Не помогло. MVS 2013 По заявлениям MS должно работать в 2013. Убедись что ранее (в других *.h) нет #include <math.h> Попробуй поставить #define перед всеми #include Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 10:32 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДолжно быть так. Но как в этой библиотеке называется эта константа ? PI и M_PI там не нашёлплохо искал Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2015, 11:42 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
На стационарном компьютере работает. На ноутбуке нет. Сам файл библиотеки не открывал, на ноутбуке. Просто пытался подключить эти макросы как говорил Дмитрий. Зачем эти константы запрятаны в условной компиляции ? И почему в стандарте о них ни слова ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2015, 02:53 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2015, 21:10 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Почему удалили тему с программой-поздравлением ?( Саша старался, а вы удаляете :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2015, 15:29 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Если речь идёт о разборе действий модератора - то возможно стиль ее оформления не соответствовал действующим правилам форума. В любом случае здесь обсуждать действия модера не стоит. Лучше сюда http://www.sql.ru/forum/sqlru. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2015, 15:38 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
mayton, Жаловаться на кого-то в Сообществе и выносить сор из избы я не буду. Потому задал этот вопрос тут. Кто бы это ни сделал, это некрасиво. Пусть тогда отправит свое подравление-программу, если ему моя не понравилась. Или объяснил бы хотя бы в чем дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2015, 16:15 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercurymayton, Жаловаться на кого-то в Сообществе и выносить сор из избы я не буду. Потому задал этот вопрос тут. Кто бы это ни сделал, это некрасиво. Пусть тогда отправит свое подравление-программу, если ему моя не понравилась. Или объяснил бы хотя бы в чем дело.А это было поздравление? Выглядело как обфусцированная фигня. В следующий раз дай своей программе хоть описание нормальное. Вдруг кто поверит и запустит? И вообще, есть кнопка "сообщить модератору". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2015, 16:58 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, я смотрел среди удалённых. Ну ты дал джазу! Первая моя мысль - что это какой-то развод. И извини бро... на поздравление это вообще ни разу не канает Давай лучше кодь тяпничный бенчмарк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2015, 17:51 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Нужно было запустить программу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2015, 19:08 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Не обижайся. Если начистоту... без "цеховой солидарности" - я-бы точно также "грохнул" твой топик как и другой модератор. Ну просто... тема вопроса не обозначена. И выглядит как издёвка. Ну будь здоров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2015, 21:36 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018847]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
133ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 561ms |

| 0 / 0 |
