powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
25 сообщений из 262, страница 5 из 11
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38658212
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 ? Используете ли вы его ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38658215
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переводить "the referenced type" как "ссылочный тип" некорректно, т.к. тут имеется в виду другое - "тот тип на который ссылаются" (к сожалению не могу подобрать короткий русский аналог).
А "ссылочный тип" - это тип хранящий ссылку, "reference type" (без "d"). Таких в С нет.

SashaMercury1. если я знаю что функция не будет (и не должна) принимать никакие параметры, как правильно будет выглядеть её прототип ?
У нас тут что, справочная что-ли? Зачем задавать на форуме тривиальные вопросы? :)
Код: plaintext
1.
rrr fff(void);


SashaMercury2. В каких случаях нельзя обойтись без void ? Используете ли вы его ?
void применяется когда либо нет значения либо тип значения неизвестен или не важен.
Например, cтандартная ф-я memcpy может копировать память независимо от типа данных расположенных в ней, поэтому тип не указывают, а используют указатели на void
Код: plaintext
1.
void * memcpy ( void * destination, const void * source, size_t num );
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38667054
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, спасибо ) Постараюсь уменьшить количество тривиальных вопросов.

Кстати, сейчас правильно

Anatoly MoskovskyНапример, cтандартная ф-я memcpy может копировать память независимо от типа данных расположенных в ней, поэтому тип не указывают, а используют указатели на void

Код: plaintext
1.
void * memcpy ( void * destination, const void * source, size_t num );



Вот так только вроде :)

Код: plaintext
1.
2.
#include <string.h>
void *memcpy(void * restrict s1, const void * restrict s2, size_t n); //(Я просто пример про restrict прочитал, потому запомнил)



Сегодня наткнулся на вот что :
©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 указателей ? Это так мало может быть.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38667679
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

Там пишут что компилятор должен уметь компилировать любую программу в которой встречаются каждый из перечисленных лимитов.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38667705
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryто почему всего 12 указателей
Не 12 указателей, а 12 уровней вложенности указателей.
Код: plaintext
1.
void ************p;  
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38667940
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял, спасибо :-) а почему именно 12 ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38667996
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryПонял, спасибо :-) а почему именно 12 ?Чтобы жизнь медом не казалась!
Я знаю зачем может понадобиться указатель на указатель, но нужность трехуровневого указателя уже вызывает у меня сомнения. Ну а уж больше...
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38668196
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там не только про указатели, но и сочетания указателей, функций и массивов в одной декларации.
Вполне могут встречаться кострукции вида "указатель на ф-ю, возвращающуюю указатель на массив указателей".
Тут уже 4 уровня вложенности: указатель - ф-я - массив - указатель.

Скорее всего в каком-то реальном проекте встретилось 6 уровней, вот в стандарте взяли с запасом в 2 раза.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38668231
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyТам не только про указатели, но и сочетания указателей, функций и массивов в одной декларации.
Вполне могут встречаться кострукции вида "указатель на ф-ю, возвращающуюю указатель на массив указателей".
Тут уже 4 уровня вложенности: указатель - ф-я - массив - указатель.Не, функция тут не будет указателем.

Как я понимаю, ты намекаешь на код типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
char *fruits[] = {"apple", "orange", 0};
char *cars[] = {"mustang", "focus", 0};

char ** foo(enum array_type n) {
  switch (n) {
    case Fruits: return fruits;
    case Cars: return cars;
    default: return NULL;
  }
}
char ** (*func(enum array_type)) f;
f = foo;

char **array = f(Fruits);


Три уровня у f.
Но мне все равно не очень верится что подобное может понадобится в реальном проекте. Уж слишком это заморочено и неудобно. А уж поддержка и изменение этого вообще кошмаром будет.

Anatoly MoskovskyСкорее всего в каком-то реальном проекте встретилось 6 уровней, вот в стандарте взяли с запасом в 2 раза.Мне больше кажется, что это они сделали широкий жест: "нате подавитесь".
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38668237
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38668500
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Везде максимум имеет формат 2^n-1, а тут нет. Вот я и удивился
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38674867
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Я анализировал один код, позже приведу его полностью. Встретил оператор 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.
switch (expr)
{
int i = 4;
f(i);
case 0:
i = 17;
/* falls through into default code */
default:
printf("%d\n", i);
}

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.
	int a = 1;
	switch (a)
	{
	case 1:
		a++;
	case 2:
		a++;
	case 3:
		a++;
	default:
		a++;
	}
	printf("%i \n", a);


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.
	switch (a)
	{
		int b = 2;
		int d = f(b);//b*b
		printf("%i", d);
	}


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.
	int a = 1;
	switch (a)
	{
	case 1:
		a++;
	case 2:
		a++;
	case 3:
		a++;
	default:
		a++;
	}
	printf("%i \n", a);



Что будет на выходе ? 5.

Дальше, вы не поверите сказал бы я человеку изучавшему Си один день, но вы то знаете:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	int a = 1;
	switch (a)
	{
	case 1:
		a++;
	case 3:
		a++;
	case 2:
		a++;
	default:
		a++;
	}
	printf("%i \n", a)



Что и тут на выходе 5. Что в стандарте я упустил, где написано что он должен работать так ?

Мало того
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	int a = 1;
	switch (a)
	{
	case 1:
		a++;
	case 3:
		a++;
	case 4:
		a++;
	default:
		a++;
	} 



На выходе вы конечно знаете что.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38674870
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    switch (2)
    {
    case 1:
        while (1)
        {
    case 2:
            break;
        }
    }


А это сможете объяснить как работает?
Например, к чему относится break - к case 2 или while? :)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38674873
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже с телефона, не могу проверить.Но мне кажется что к case 1. То есть этот break не выполнится. Очень не уверен, switch ранее в Си не использовал. Но ваш пример мне нравится :-)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38675782
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДальше, вы не поверите сказал бы я человеку изучавшему Си один день, но вы то знаете:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	int a = 1;
	switch (a)
	{
	case 1:
		a++;
	case 3:
		a++;
	case 2:
		a++;
	default:
		a++;
	}
	printf("%i \n", a)




Что и тут на выходе 5. Что в стандарте я упустил, где написано что он должен работать так ?
Вы упустили, что аргумент switch проверяется однократно, на входе в switch, потом делается переход на метку соответствующую этой проверке, далее код просто выполняется пока не встретится break или } (относящиеся к этому switch).
Все встретившиеся по пути метки case/default игнорируются.


SashaMercury6. Ну и код. Я собственно не поверил, и проверил
Код: plaintext
1.
2.
3.
4.
5.
6.
	switch (a)
	{
		int b = 2;
		int d = f(b);//b*b
		printf("%i", d);
	}



6.1 Так и оказалось, фиг с маслом а не printf. Тогда почему компилятор не ругнулся ?
switch это синтаксический сахар над if и goto.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
switch (a) {
  aaa;
case 1:
  xxx;
case 2:
  yyy;
  break;
defautl:
  zzz;
}


Эквивалентный (почти) код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
if (a == 1) goto case_1;
elseif (a == 2) goto case_2;
else goto case_default;

aaa;
case_1:  //case 1:
  xxx;
case_2: //case 2:
  yyy;
  goto out; //break;
case_default:  //default:
  zzz;
out:



Таким образом код до case никогда не выполняется.

Более того, так как case это по сути обычная метка, то переход на нее, пропускает код инициализации локальных переменных объявленных в switch, поэтому все переменные объявленные там остаются неинициализированными. Чтобы этого не было, нужно после case открыть вложеный блок {} и объявлять переменные в нем. (Каждый вложенный блок имеет собственный код инициализации переменных )

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
switch (a) {
case 1: 
   int a = 10;
   // a == uninitialized  
}
switch (a) {
case 1: {
   int a = 10;
   // a == 10
  }
}
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38675784
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНо мне кажется что к case 1
Нет. Еще варианты? :)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38676827
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень интересно.
Я думаю что относится к case 2. Хотя я в этом не уверен. Но мне кажется что связывание с этим case должно происходить. Тут для меня скорее другой вопрос. Произойдёт ли переход на case 2 ? Точнее произойдёт ли он только в том случае если на входе будет 1, или будет видна метка 2 вложенная в 1. Я решил что про вложенность меток я ничего не читал, и не знаю. Потому скорее всего такой вложенности быть не может. Потому произойдёт прямой переход на case 2, break будет относиться к нему.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38676828
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Вы упустили, что аргумент switch проверяется однократно, на входе в switch, потом делается переход на метку соответствующую этой проверке, далее код просто выполняется пока не встретится break или } (относящиеся к этому switch).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	int a = 1;
	switch (a)
	{
	case 1:
		a++;
	case 3: //p1
		a++;
	case 4:	
		a++;
	default:
		a++;
	}
	printf("%i \n", a);



Но тогда что будет в этом коде ? Выполнится case 1, затем, дефолт, а дальше произойдёт возврат к p1, и дважды будет происходить инкремент ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38676836
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SSНо тогда что будет в этом коде ? Выполнится case 1, затем, дефолт, а дальше произойдёт возврат к p1, и дважды будет происходить инкремент ?

Совсем дурной, он встретит case 1,и далее сделает 4 инкремента.

falls through

Тут я понял
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38676837
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
три*
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38677111
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryтри*четыре. default тоже выполнится
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38677979
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych, я понял ) Имел ввиду "кроме case 1 " ещё три инкремента.

Anatoly Moskovsky, как правильно рассуждать отвечая на ваш вопрос ? Какой правильный ответ ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38677991
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    switch (2)
    {
    case 1:
        while (1)
        {
    case 2:
            break;
        }
    }



А это сможете объяснить как работает?
Например, к чему относится break - к case 2 или while? :)

SashaMercuryAnatoly Moskovsky, как правильно рассуждать отвечая на ваш вопрос ? Какой правильный ответ ?
Рассуждать так.
break прерывающий switch относится не к case, а к switch в целом, а case это просто метка, у нее нет семантики прерывания.
Теперь, если у нас перемешаны switch и while, то break относится к ближайшему из них по вложенности.
Таким образом не смотря на то что break ближе к case, относится он к while, т.к. switch дальше.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38677997
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
Рассуждать так.
break прерывающий switch относится не к case, а к switch в целом, а case это просто метка, у нее нет семантики прерывания.
Теперь, если у нас перемешаны switch и while, то break относится к ближайшему из них по вложенности.
Таким образом не смотря на то что break ближе к case, относится он к while, т.к. switch дальше.

Спасибо.Здорово. Мне очень нравится эта логика языка.
Обидно что я всё это знал,(тем более после того когда вы мне объяснили что case это всего лишь метка кода), и не смог сделать выводы самостоятельно :(
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38680434
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Продолжил изучать 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. Часто ли вы пользуетесь данным квалификатором ? Насколько он важен ?
...
Рейтинг: 0 / 0
25 сообщений из 262, страница 5 из 11
Форумы / C++ [игнор отключен] [закрыт для гостей] / INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]