|
|
|
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 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38656135&tid=2018847]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
195ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
87ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 566ms |

| 0 / 0 |
