powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
262 сообщений из 262, показаны все 11 страниц
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38613902
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Решил познакомиться с вышеупомянутым документом. При переводе возникли трудности. Возможно они связаны с недостаточными знаниями основ информатики и вычислительной техники или/и возможно у меня недостаточные знания английского языка. Мне кажется стоит создать раздел (этот топ) в котором можно будет задавать вопросы по данному документу. Если не стоит, то модераторам стоит закрыть данный раздел(им виднее).
В любом случае, пока у меня один вопрос.
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" в этом документе.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38613915
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
int main(int argc, char** argv)
{
	argc = -5;
	printf("%i", argc);
	return 0;
}



Происходит неявное преобразование видимо. Как получилось что argc=-5, хотя согласно "The value of argc shall be nonnegative" быть такого не может.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38613916
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38613919
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryПроисходит неявное преобразование видимоКакое, нафик, "неявное преобразование" для аргумента типа (знаковый) int?!Как получилось что argc=-5, хотя согласно "The value of argc shall be nonnegative" быть такого не может.Вообще оксюморон - присвоили знаковой переменной отрицательное значение, выбрали соответствующий модификатор и удивляемся, что всё отработало так, как должно отработать.

P.S. Число аргументов, если оно передаётся, формирует окружение. Это окружение должно передавать неотрицательное значение. Не обязано, но должно.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38613921
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryFreestanding environment - это запуск вне ОС ? Например это набор программ на С реализующих ОС ?
Hosted environment - запуск в среде ОС, например программа написанная в IDE VS и запущенная в W7 ? Хотя какая разница где она написана.
Да.
SashaMercuryPS
Я кстати удивился что так часто встречаю "shall" в этом документе.
На юридическом языке "shall" имеет значение "должен".
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38613923
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нееет, я не так написал. До этого я пробовал присваивать unsigned int a =-5, и присваивание происходило. Вопрос в голове остался(подумал-наверное неявное преобразование), а код не стал оставлять.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38613927
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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:
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38613931
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДо этого я пробовал присваивать unsigned int a =-5, и присваивание происходило. Вопрос в голове остался(подумал-наверное неявное преобразование)В фон-неймановской архитектуре знаковость - (в основном) вопрос интерпретации.
Чтобы запретить присваивание отрицательных значений беззнаковым переменным требуется нехилая поддержка времени выполнения: все присваивания надо проверять и "что-то делать" с недопустимыми.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38613935
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЯ удивляюсь что это произошло, ведь согласно черновику стандарта такое действие незаконноЯ повторю: значение переменной формирует окружение, передающее управление на точку входа функции main.
Это окружение должно, а вовсе не обязано, формировать неотрицательное значение.
Если стандарт(ы) обязывают, то в них так и пишут - must/must not. Второй вариант лучше переводить как "не имеет права".
Как переменная argc будет использована внутри функции main и будет ли она вообще использована - личное дело этой функции.
Может, например, декрементировать значение argc после анализа очередного аргумента в цикле. Тогда нулевое/отрицательное значение станет граничным условия для такого цикла.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38613973
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДо этого я пробовал присваивать unsigned int a =-5, и присваивание происходило.
Тут все просто. Разрядность ограниченная, у знаковых старший бит это знак (0+, 1-), поэтому знаковое -5 хранится также как беззнаковое 2^N - 5, где N количество разрядов.
Булеву алгебру почитай. Там вычитания нет, достаточно инверсии и сложения.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38614064
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, понял.
По argc снова вижу избыточность. Вечером подумаю.
Ставлю спецификатор i, и выводится int
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38615983
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое "integer promotion", я в общих чертах разобрался. Сейчас ещё читаю.

1. Можно сказать что это частный случай приведения к наибольшему общему типу ?
2. Как правильно перевести на русский язык ? или в таких случаях лучше называть вещи по-английски ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38616000
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЧто такое "integer promotion", я в общих чертах разобрался. Сейчас ещё читаю.

1. Можно сказать что это частный случай приведения к наибольшему общему типу ?
2. Как правильно перевести на русский язык ? или в таких случаях лучше называть вещи по-английски ?
1. Нет. В С есть только два случая неявного приведения типов - в int и в void*. Поэтому о "частном" случае говорить нельзя. И их достаточно мало чтобы зазубрить.
2. Если за те пол-минуты пока я пишу фразу я не вспомнил русскоязычный аналог термина - оставляю его на английском. Проще жить намного :)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38616007
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитал ещё тут .
Удивил комментарий по следующему коду
Код: plaintext
1.
2.
3.
	signed int si = -1;
	unsigned int ui = 1;
	printf("%d", si < ui);//print 0



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


Мне показалось что в данном случае правая часть может быть посчитана с использованием арифметики двойной точности, а значит будет и неявное преобразование. Наверное что-то не так понял ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38616037
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВопрос: почему правило именно такое, и в данном случае signed int приводится к unsigned int. Почему не сделали наоборот ?
signed int: 1 бит под знак + 31 под значение
unsigned int: 32 под значение

Как из 32 битного значения сделать 31 битное?

Реально никаких преобразований не происходит, процессор может рассматривать одни и те же 32 бита как знаковое и как беззнаковое, определяется какой командой сравнивать, только эта команда ожидает оба оператора одного типа.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38616045
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наличие знака, равносильно умножению на два количество вариантов без знаков, да ещё плюс 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.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38616086
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryналичие знака, равносильно умножению на два количество вариантов без знаков, да ещё плюс 1, ибо вместо двух нулей, теперь 1.
Хотя в ваших словах наверное есть логика, с точки зрения арифметики и представления чисел в ЭВМ.
Так и есть. Если интересно, то вот тебе табличка на примере двух битов как представление происходит:
ДвоичноеБеззнаковоеЗнаковое000+0011+1102-2113-1
SashaMercuryВот ещё по неявному приведению,
Тут я тебе не подскажу, никогда типы с плавающей запятой не были нужны.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38616125
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury2. Как правильно перевести на русский язык ? или в таких случаях лучше называть вещи по-английски ?
Я встречал и сам использую перевод "integer promotion" как "расширение [целого] типа".
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38616514
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо :) понял все кроме неявного приведения, но думаю этот вопрос решится позже.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38617109
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.
INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 5.1.2.3 14 example 5
Код: plaintext
1.
2.
double x, y, z;
z = (x - y) + y ; // not equivalent toz = x;



проверил на разных значениях, получалось эквивалентно. Приведите пример чтобы было не эквивалентно, пожалуйста
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.
int a, b;
/* ... */
a = a + 32760 + b + 5;


the expression statement behaves exactly the same as
Код: plaintext
1.
a = (((a + 32760) + b) + 5);


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.
a = ((a + b) + 32765);


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.
a = ((a + 32765) + b);
or
a = (a + (b + 32765));


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.
	int a=0, b=100, c=10;
	a = (a + 2147483647 + b) -100; 
	printf("%i \n", a);//2147483647

	a = (-2147483647 - 1000) + a;
	printf("%i \n", a);//-1000
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38617135
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryпроверил на разных значениях, получалось эквивалентно. Приведите пример чтобы было не эквивалентно, пожалуйста
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	double x, y, z;
	do {
		x = rand();
		y = rand();
		z = (x - y) + y ;
	} while(z != y);
	printf("%f %f\n", x, y);


При переводе привычных нам десятичных чисел в двоичные с плавающей запятой возникают периодические дроби, а т.к. мантисса имеет конечную длину, то имеем погрешность. Поэтому проверять на равно и неравно их нельзя.
SashaMercuryПроверил всё, и всё ок, видимо он знает в каком порядке вычислять, либо незримо для меня расширяет правую часть как и в случаем с чарами в правой части. Либо я что-то не так понял с переводом, ниже мой код и комментарии
Я так понял что при переполнении не гарантируется правильный результат.
Код: plaintext
1.
2.
3.
4.
5.
	int a=0, b=100;
	a = (a + 2147483647 + b); 
	printf("%i \n", a);//-2147483549 т.е. переполнение
	a -= 100; 
	printf("%i \n", a);//2147483647


Т.е. то что на твоем процессоре правильно посчиталось не означает что на всех так же будет.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38617145
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Код: plaintext
1.
	} while(z != y);


Тут напутал, надо
Код: plaintext
1.
	} while(z == x);


Так не находит, зацикливается. Пример сделать не удалось, но такие случаи возможны из-за наличия погрешности.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38617199
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо :) Сейчас попробую
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38617207
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример когда z != x
Код: plaintext
1.
2.
3.
	double x = 1.2, y = 12;
	double z = (x - y) + y;
	printf("%f %s %f (%e)\n", x, ((x == z) ? "==": "!="), z, x - z);
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38617701
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только с бассейна пришел, уже нельзя включать компьютер (, завтра проверю
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38617945
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryINTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 5.1.2.3 14 example 5
Код: plaintext
1.
2.
double x, y, z;
z = (x - y) + y ; // not equivalent toz = x;


проверил на разных значениях, получалось эквивалентно.Пробуйте вычитать очень близкие значения.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38618010
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovПробуйте вычитать очень близкие значения.
Маловероятно что будут потери. Пример (условный, числа как бы двоичные)
Код: plaintext
1.
2.
3.
4.
a = 0.101010101 * 2^5;
b = 0.101010100 * 2^5;
c = a - b = 0.10000000 * 2^-3; // или 0.000000001 * 2^5
c + b = 0.101010101 * 2^5;


Тут уменьшаемое должно быть значительно меньше вычитаемого, тогда будут потери на обратной операции. Пример я выше привел.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38618157
nyash-myash
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SashaMercury1.
INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:201x 5.1.2.3 14 example 5
Код: plaintext
1.
2.
double x, y, z;
z = (x - y) + y ; // not equivalent toz = x;



проверил на разных значениях, получалось эквивалентно. Приведите пример чтобы было не эквивалентно, пожалуйста


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
double x = -9007199254740992, y = 1, z;
z = (x - y) + y;
if (z != x)
    printf("z != x\n");
// В некоторых случаях все равно z == x
// Можно повысить шанс неравенства введя дополнительную переменную.
double z1,z2;
z1 = x - y;
z2 = z1 + y;
if (z2 != x)
    printf("z2 != x\n");
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38618208
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, понял. Действительно существует расхождение.
Пытался вывести на экран битовое представление double, не получилось, ибо побитовое и видимо работает только с целым типом. Ещё подумаю.

Почему не расширить препроцессор математическим аппаратом для упрощения выражений такого вида ? Если даже Maple одной командой evalf или simplify позволяет упростить входную строку.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38618257
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВсем спасибо, понял. Действительно существует расхождение.
Пытался вывести на экран битовое представление double, не получилось, ибо побитовое и видимо работает только с целым типом. Ещё подумаю.
Выводи как массив unsigned char[8]. Возможно байты в памяти в обратном порядке хранятся. Структура хранения тут описана
Правила преобразования если интересно
SashaMercuryПочему не расширить препроцессор математическим аппаратом для упрощения выражений такого вида ? Если даже Maple одной командой evalf или simplify позволяет упростить входную строку.
Потому что в таком виде мало кто пишет. Это просто наглядный пример.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38619971
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima_TВыводи как массив unsigned char[8].


Код: plaintext
1.
2.
3.
4.
5.
6.
	double x = 125;
	unsigned char* px = (unsigned char*)&x;
	for (int i = 0; i < sizeof(x); i++)
	{
		printf("%u \n", *(px+i));
	}



примерно так ? По этим числам я уже в принципе могу понять какой двоичный код хранится с байтах
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38619997
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryпримерно так ? По этим числам я уже в принципе могу понять какой двоичный код хранится с байтах
Примерно да, только выводи в шестнадцатеричном виде или сразу в двоичном, так понятнее. И байты в обратном порядке читай.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 	double x = 1;
	for (unsigned char* px = (unsigned char*)&x + sizeof(x) - 1; px >= (unsigned char*)&x; px--)
	{
		for(int j = 128; j > 0; j >>= 1) {
			printf("%s", (*px & j) ? "1":"0");
		}
		printf("=0x%02X\n", *px);
	}
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38620014
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
Переписал код так. Для double x=1 показывает не то. Проверил ваш код вместе со своим, аналогично. Я думал что для хранения единицы будет в единице только 1 бит, остальные в ноль.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
	for (unsigned char* px = (unsigned char*)&x + sizeof(x)-1; px >= (unsigned char*)&x; px--)//иду по байтам double
	{
		for (int j = sizeof(unsigned char)* 8-1; j >=0; j--)
		{
			printf("%s", (*px)&(1 << j) ? "1" : "0");
		}
		printf("\n");
	}
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38620018
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДля double x=1 показывает не то.
Что не то? Я тебе ссылку выше давал
Читаем
Примеры чисел двойной точности0x 3ff0 0000 0000 0000 = 1
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38620019
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Туплю. Конечно то. Там фишка вся в мантиссе, забыл. Извиняюсь, не прав (
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38620023
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОкончательное значение числа равняется ±1,мантисса · 2^(порядок − 01111111111) старший бит мантиссы, всегда равный единице, опускается, а порядок 0 записывается как 2^10 - 1 = 1023
т.е. 1 = 1.00000 * 2^0
1. убираем, 0 заменяем на 01111111111 (=1023=0x3FF), получаем
Код: plaintext
1.
0 01111111111 000000...

или
Код: plaintext
1.
0x3FF0        000000...
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38620033
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury
Код: plaintext
1.
		for (int j = sizeof(unsigned char)* 8-1; j >=0; j--)


128 это (1 << (sizeof(unsigned char)* 8-1))
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38620044
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima_T128 это (1 << (sizeof(unsigned char)* 8-1))

У меня немного другой цикл. Я подумал, зачем вы приводите к unsigned char а не просто к char. Прочитал на хабре почему так, и решил что раз unsigned char является абстракцией машинного байта, то есть смысл сделать этот цикл для всех машин, и для тех где 1 байт занимает, например, 9 бит. А сейчас я смотрю на свой код, вижу *8 и понял что у меня не получилось то что я хотел
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38620064
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 байт везде 8 бит
Также принято значения байта считать беззнаковыми, т.е. 0...255, поэтому unsigned char
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38621868
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T1 байт везде 8 битСейчас.
А то есть у меня старенький справочник по це, так там и девятибитные системы упомянуты :-)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38621893
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovDima T1 байт везде 8 битСейчас.
А то есть у меня старенький справочник по це, так там и девятибитные системы упомянуты :-)
Там и биты с тремя состояниями наверно упоминаются
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38621899
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТам и биты с тремя состояниями наверно упоминаются А не угадали :-)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638264
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Начал читать раздел 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...дальше не понял
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638266
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
struct S;  // предварительное объявление, тип неполный, размер неизвестен
struct S* ptr; // так можно
struct S s; // так нельзя для неполных типов
struct S { int a;};  // окончательное объявление, после этого тип можно использовать без ограничений


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

Всё-таки про _Bool очень интересно, такое именование не просто так. Мне кажется, это связано с тем, что на этот тип хватит и бита, а выделяется байт, со всеми вытекающими
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638304
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несколько раз встретил "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.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638310
Фотография 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.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638320
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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. Да и вообще двусмысленность получается. Может быть я что-то не так понял..
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638410
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНесколько раз встретил "alignment requirements" . Забыл сразу спросить про то, как правильно это пониматьТребования к выравниванию.
Например, в x86 обращение к слову, которое расположено по нечётному адресу "штрафуется" (только) лишними циклами циклами обращения к памяти.
Есть архитектуры, где такие обращения запрещены и будет сгенерировано аппаратное исключение.
В x86 начиная, если правильно помню, с i486 есть специальный "бит выравнивания" в слове состояния процессора - если установить, то невыровненные обращения будут вызывать аппаратное исключение.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638413
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryК чему это было смешивать. Было бы так char-символьный, u/s char -целый. А тут получается что u/s char принадлежит двум пространствам. Это мне не нравится. Тогда какой смысл в этом выделении plain char. Да и вообще двусмысленность получается. Может быть я что-то не так понял..Исторически сложилось.
US-ASCII - семибитный код. В асинхронных коммуникация размер символа можно было регулировать. В частности, можно было передавать семибитный код и, дополнительно, бит чётности, который использовала аппаратура.
На прикладном уровне получался "свободный" старший бит и вопрос его интерпретации отдавался на откуп разработчиков системы.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638684
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё-равно, не понятно, почему в стандарте в одном абзаце char обзывают целочисленным, а в другом символьным
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638702
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВсё-равно, не понятно, почему в стандарте в одном абзаце char обзывают целочисленным, а в другом символьнымПотому, что все кодируют символы целыми числами.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638715
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, это логично, это я понимаю. Но что мне выводить с этих 8 бит ? Выводить число, или выводить символ соотвествующий этому числу ? Да, в printf, у меня есть спецификатор, и я укажу что я хочу лицезреть. И всё ?
И в чём тогда разница между char и unsigned char ? Меня спросят-какой тип у char, Саша ? Что я отвечу ? у неё нет строгого типа ?

PS
Теперь я могу не спрашивать даже, очевидно что в Си слабая типизация. Мне кажется это гибко.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638722
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryИ в чём тогда разница между char и unsigned char ? Меня спросят-какой
тип у char, Саша ? Что я отвечу ? у неё нет строгого типа ?
Отвечай, что существует три разных типа: char, signed char и unsigned char.
Правильные кодеры используют первый для симоволов, а два остальных - для чисел.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638728
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

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

Я хочу только тебе заметить, что таким образом ты не изучаешь язык, а изучаешь стандарт языка.
Я бы не рекомендовал изучать язык по тексту стандарта.

Это всё равно, что новичку-скалолазу изучать скалолазание сразу на маршруте 5-ой категории сложности.
Да, если влезешь, то будешь наверное знать всё скалолазание, но вот только не факт, что влезешь.

Начинай с простого.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638736
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Правильные кодеры используют первый для симоволов"- только я хочу, чтобы это было закреплено в стандарте :( Он получается несовершенным (
Объясните пожалуйста подробней эту историческую особенность.

Basil A. Sidorov Исторически сложилось.
US-ASCII - семибитный код. В асинхронных коммуникация размер символа можно было регулировать. В частности, можно было передавать семибитный код и, дополнительно, бит чётности, который использовала аппаратура.
На прикладном уровне получался "свободный" старший бит и вопрос его интерпретации отдавался на откуп разработчиков системы.

не смог сделать вывод:"char должен быть и символьным и целым". Наверное вы всё корректно объяснили, но мне хватает каких-то фундаментальных знаний для понимания того, что вы хотите донести до меня. Что он ASCII 7-битный был, знал
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638751
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryне смог сделать вывод:"char должен быть и символьным и целым".

char - символьный. Остальные - целые. НО! Между ними разрешено неявное преобразование.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638801
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, правильнее думать, что в С нет вообще символьных типов.
И в принципе так оно и есть -- специальных символьных операций в языке нет, а с char допустимы все арифметические операции.

символьный тип же введён видимо в стандарт только для обозначения char-а.

SashaMercury, есть такая книга:

http://www.ozon.ru/context/detail/id/5637788/

Это по сути пересказ стандарта языка С на нормальном языке. Если уж так серьёзно погружаться хочешь в язык, рекомендую её читать.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638827
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я учту все мнения, спасибо :) Думаю, в дальнейшем некоторые вещи прояснятся сами.

MasterZiv, пытался пользоваться функцией fopen, пришлось искать её в стандарте, наткнулся на незнакомый идентификатор в её прототипе-restrict, потому пришлось сначала изучить типы данных, затем разберусь с restrict, затем с fopen, а затем уже поcчитаю пробелы и знаки табуляции в 1.txt.

PS Мне думается что любой тип данных, по сути, числовой, в любом языке программирования
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38638889
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryPS Мне думается что любой тип данных, по сути, числовой, в любом языке программирования

Ты глубоко неправ.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38639078
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
struct A {
  char c;
  int i;
};
struct B {
  int i;
  char c;
};
sizeof(struct A) != sizeof(struct B)

Компилятор сам следит за alignment и старается не резать много-байтовые типы между физическими словами. Это одна из причин почему для каждого типа компьютеров нужен свой компилятор - компилятор должен знать размеры слова. И обозначение 32-bit, 64-bit это как раз и есть размеры слова.
И кстати, если ты пишешь под Винды и привык к типу двух-байтовому типу WORD или четырех-байтовому DWORD - это страшное наследие далекого прошлого, когда Винды были версии 1.0 и работали на 16-и битном процессоре, там действительно слова были по 16 бит. А потом, микрософты просто поленились обновить эти обозначения.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38639083
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury6.int=unsigned int
int=signed int
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38639085
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
char может быть как знаковым так и нет в зависимости от настроек компилятора. Поэтому
правильнее считать его отличающимся от обоих и никогда не смешивать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38639088
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
void test(char c)
{
    cout << "char" << endl;
}
void test(signed char c)
{
    cout << "signed char" << endl;
}
void test(unsigned char c)
{
    cout << "unsigned char" << endl;
}

int main()
{
    test((char)'1');
    test((signed char)'1');
    test((unsigned char)'1');
    return 0;
}



ЗЫ. Для SashaMercury - это С++ если чо :)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38639097
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот пример демонстрирующий что и в С char и signed/unsigned char тоже разные типы:

Код: plaintext
1.
2.
3.
4.
void tt(char c); 
void tt(signed char c)
{
}


compitererror: conflicting types for 'tt'
void tt(signed char c)
^
note: previous declaration of 'tt' was here
void tt(char c);

Аналогично и с unsigned char
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38639344
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	struct A {
		char c;
		int i;
	};
	struct B {
		int i;
		char c;
	};

	printf("%i ", sizeof(struct A)==sizeof(struct B));


На выходе 1, но видимо это не обязательно ?
Размер 8 Байт, значит для хранения структуры используется одно слово(у меня 64битная ОС).


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
void test(char c)
{
    cout << "char" << endl;
}
void test(signed char c)
{
    cout << "signed char" << endl;
}
void test(unsigned char c)
{
    cout << "unsigned char" << endl;
}

int main()
{
    test((char)'1');
    test((signed char)'1');
    test((unsigned char)'1');
    return 0;
}



Что показывает этот пример ? Что я могу делать явное приведение типов к p/s/u char ?


Код: plaintext
1.
void tt(char c); void tt(signed char c){}


Хороший пример с прототипом)), действительно компилятор ругается.

White Owl , я конечно не идеально понял, но общее представление о том что вы рассказывали иметь буду )
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38639692
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЧто показывает этот пример ? Что я могу делать явное приведение типов к p/s/u char ?
Нет. Пример показывает что так как это 3 разных типа, то можно перегрузить функцию test каждым из них. Если бы какие-то из типов совпадали, то была бы ошибка дублирования определения функции.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38640004
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделай:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	struct A {
		char c;
		int i;
	};
	struct B {
		int i;
		char c;
	};

	printf("%i %i", sizeof(struct A), sizeof(struct B));
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38640054
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	struct A {
		char c;
		int i;
	};
	struct B {
		int i;
		char c;
	};

	printf("%i ", sizeof(struct A)==sizeof(struct B));



На выходе 1, но видимо это не обязательно ?
Размер 8 Байт, значит для хранения структуры используется одно слово(у меня 64битная ОС).
С двумя полями порядок не меняет размер.
А вот с 3 и более полями размер зависит от порядка, как раз из-за выравнивания.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	struct A {
		char c;
		int i;
		char c2;
	};
	struct B {
		int i;
		char c;
		char c2;
	};
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38641677
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, Anatoly Moskovsky, на выходе 12 8 для примера предложенного последним. Последний вопрос по этой теме.
Дана структура с n количеством полей int, char перемешанных в любом порядке. Можем ли мы утверждать какой объём будет занимать эта структура только исходя из логических выкладок ? Какая информация для этого нужна о процессоре и ОС ?(разрядность вероятно). Либо мы не можем делать 100% предположения.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38641678
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VS Express ругается на _Bool кстати
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38641680
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryVS Express ругается на _Bool кстати
_Bool - из стандартного С, а VS никакие версии стандарта С не поддерживает.
В VS развивали только С++.
(Впрочем обещали исправиться и допилить С)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38641682
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryWhite Owl, Anatoly Moskovsky, на выходе 12 8 для примера предложенного последним. Последний вопрос по этой теме.
Дана структура с n количеством полей int, char перемешанных в любом порядке. Можем ли мы утверждать какой объём будет занимать эта структура только исходя из логических выкладок ? Какая информация для этого нужна о процессоре и ОС ?(разрядность вероятно). Либо мы не можем делать 100% предположения.
В общем случае - зависит от компилятора и платформы.
Точнее - зависит от параметра packing по умолчанию.
В VS это 8 для 32-битных процессоров, 16 для 64-битных. (Для GCC - не помню)
packing - это предельное выравнивание, которое применяется даже если у типа больший размер.
Зная только этот параметр и выравнивания отдельных типов можно точно рассчитать размеры структур.

В частном случае - для int и char - выравнивания не превышают packing почти на любой платформе, поэтому для всех основных платформ и компиляторов размер структуры с этими типами будет одинаковым, т.е. его можно посчитать не привязываясь к платформе.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38641728
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. В общем понятно
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38641751
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению не могу в нормальном качестве выложить
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38645845
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Появилось немного времени(скоро предстоит одно событие, потому сейчас в основном занимаюсь математикой, не думайте что я ленюсь и так долго это изучаю), и я продолжил читать. Подскажите пожалуйста по некоторым вопросам

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.
struct S;  // предварительное объявление, тип неполный, размер неизвестен
struct S* ptr; // так можно
struct S s; // так нельзя для неполных типов
struct S { int a;};  // окончательное объявление, после этого тип можно использовать без ограничений




Понял когда писал :) Правильно ?

Вероятно при объявлении массива где-то должна сохраняться информация о массиве, чтобы знать сколько выделять памяти на каждый элемент.
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.
struct 
{
int a;
} 
array[100];


В данном случае, array[100], по функционалу будет отличаться от int a[100]?

4.Вообще, в более широком смысле, можно утверждать что массив массивов есть частный случай массива структур. А можно ли сказать, что массив есть частный случай структуры ?

C union type не очень понятно, надо поработать с ними сначала. Но что в данном контексте значит overlapping ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38645846
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SSВообще, в более широком смысле, можно утверждать что массив массивов есть частный случай массива структур. А можно ли сказать, что массив есть частный случай структуры ?
наверное можно всё-же
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38645850
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
struct S;  // предварительное объявление, тип неполный, размер неизвестен
struct S* ptr; // так можно
struct S s; // так нельзя для неполных типов
struct S { int a;};  // окончательное объявление, после этого тип можно использовать без ограничений





Понял когда писал :) Правильно ?
Да

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.
struct S {
   int len;
   char data[];
};


В конце структуры допускается указание массива без размера, который будет в памяти физически расположен за структурой, а его размер будет вычисляться самой программой в рантайме, а не компилятором при объявлении.

SashaMercury4.Вообще, в более широком смысле, можно утверждать что массив массивов есть частный случай массива структур. А можно ли сказать, что массив есть частный случай структуры ?
Нет, ни то ни то не является частным случаем другого.
Но оба являются частным случаем коллекции.
Массив - коллекция однотипных объектов, структура - коллекция произвольных объектов.


SashaMercuryC union type не очень понятно, надо поработать с ними сначала. Но что в данном контексте значит overlapping ?
Означает - перекрывающиеся, т.е. имеющие общую память.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38645877
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, в целом я понял.

Anatoly Moskovsky В конце структуры допускается указание массива без размера, который будет в памяти физически расположен за структурой, а его размер будет вычисляться самой программой в рантайме, а не компилятором при объявлении.

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

©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.
int f(int a, int b)
{
	int c = a + b;
	return c;
}

int main(int argc,char** argv)
{
	f(1, 2);
	return 0;
}


Посмотрел ассемблерный код. Вот что я увидел:
01. Перед вызовом функции выполняется операция push столько раз, сколько у нас аргументов, то есть в стек помещаются аргументы функции
02. Выполняется операции call f(smth_MemoryAddress)
03. происходит операция add esp,8, изменяется адрес стека на вес параметров функции помещённых в стек ?

Вот что я предполагаю:
В.1. f- возможно, имеет схожий смысл с именем массива.
Код: plaintext
1.
int a[10];


То есть я делаю вывод что f что-то схожее с константным указателем(только его нельзя прочитать как например *f). Возможно я сильно не прав.
В.2. call, программа начинает выполнять инструкции расположенные с адреса smth_MemoryAddress до того как не встретит инструкцию ret.
В.3 А как функция получила входные параметры ? Видимо первые строчки кода функции буду обращаться к вершине стека eax ?(rасм код функции я не нашёл.) А как функция узнает сколько значений ей нужно читать с вершины стека ?
В.4 Куда будет записан результат ? В вершину стека ?
В.5 Параметры ранее помещённые в стек дальше будут затираться ? Они уже не нужны ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38652693
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 Параметры ранее помещённые в стек дальше будут затираться ? Они уже не нужны ?ээээ... дальше это когда? Но в общем да, когда функция завершена, все что выделялось для нее на стеке больше не нужно.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38652872
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlSashaMercuryБ."T type derivation" встречаю не первый раз, подскажи как правильно переводить ?"приведение типа".
"приведение" это casting.

Type derivation - это порождение нового типа из данного.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38653762
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyWhite Owlпропущено...
"приведение типа".
"приведение" это casting.

Type derivation - это порождение нового типа из данного.Да, но... Нету в нашем традиционном арго такого слова как "порождение типа". Поэтому я и предпочитаю переводить type derivation как "приведение типа". Хотя знать разницу между casting и derivation конечно надо.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38653789
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНету в нашем традиционном арго такого слова как "порождение типа". Поэтому я и предпочитаю переводить type derivation как "приведение типа". Хотя знать разницу между casting и derivation конечно надо.
Да мало ли чего нет. Нет устоявшейся терминологии - переводите по словарю. Зачем приплетать совершенно посторонний термин?
Термин приведение здесь вообще неуместен, т.к. он устоявшийся и означает преобразование значения из одного существующего типа в другой существующий тип.
А тут значений нет, а есть создание нового типа на основе существующего.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38653967
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
White Owl SashaMercury В.4 Куда будет записан результат ? В вершину стека ? В одном из регистров процессора. В x86 это будет в [?]AX, в MIPS'ах $v0.

1.то есть фраза - "функция возвращает значение", несёт в себе смысл "функция записывает значение в выделенный(или в один из выделенных) регистр(ов) процессора" ?

2.
Код: plaintext
1.
int a=f(1,2);


кусок кода на который ссылается константный указатель f отработает, и запишет результат в регистр ax. Далее в переменную a будет записан результат из этого регистра.
Код: plaintext
1.
f(1,2);


Кусок кода на который ссылается f отработает, и запишет результат в ax ?
2.1 Как мне прочитать что туда записала функция, если я не сделаю это сразу ?
2.2 Если ниже я выполню:
Код: plaintext
1.
g(2,3);


куда будет записан результат ?

2.3Вообще, как-то отмечается что возвращённое значение уже использовано(прочитано из регистра) ?
2.4 Функция явно(на уровне регистров), может возвращать (записывать в регистр) только одно значение ? Или она может записывать в два регистра, fe.
2.5 Если это так(2.4), то во всех языках программирования, при спуске на уровень регистров, мы увидим что функция возвращает только одно значение ?

ps понимаю про неявный возврат через указатель(на начало строки например)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38653971
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1.то есть фраза - "функция возвращает значение", несёт в себе смысл "функция записывает значение в выделенный(или в один из выделенных) регистр(ов) процессора" ?
Стандарт ничего про регистры и стек не говорит.
Так что это зависит от платформы.
На многих платформах например параметры часто передаются не через стек, а через регистры.
Точно так же возвращаемое значение может передаваться через стек (хотя обычно используется регистр).

SashaMercury2.2 Если ниже я выполню:
Код: plaintext
1.
g(2,3);



куда будет записан результат ?
С точки зрения С, результат никуда не будет записан.
С точки зрения машинного кода, например на платформе x86 результат будет записан функцией в регистр EAX, а вызывающий код его проигнорирует. Т.е. он будет утерян.

ЗЫ. Раз вас такие вопросы интересуют, то лучше параллельно поизучайте ассемблер, чем гадать на форуме
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38653973
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury2.4 Функция явно(на уровне регистров), может возвращать (записывать в регистр) только одно значение ? Или она может записывать в два регистра, fe.
Например на 32-битных платформах при возврате 64-битного значения может быть использовано 2 регистра.
Но я вас уверяю, при программировании на С/С++ вам должно быть все равно сколько и какие регистры будут задействованы.
Компилятор сгенерирует наиболее эффективный код для передачи значения.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38653977
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky Стандарт ничего про регистры и стек не говорит.
Так что это зависит от платформы.
На многих платформах например параметры часто передаются не через стек, а через регистры.
Точно так же возвращаемое значение может передаваться через стек (хотя обычно используется регистр).

Как тогда с точки зрения С понимать фразу "функция возвращает значение" ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38653985
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryКак тогда с точки зрения С понимать фразу "функция возвращает значение" ?
Буквально понимать :)

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

Как тогда с точки зрения С понимать фразу "функция возвращает значение" ?Это значит, что если у тебя есть в программе:
Код: plaintext
1.
2.
3.
int foo();

int a = foo();

То в переменную запишется результат функции вне зависимости от используемого компилятора и используемой платформы.
Как это происходит на уровне процессора - зависит от компилятора и используемой платформы.


В общем, тебе явно пора браться за ассемблер и теорию компиляторов.
По ассемблеру ищи Питера Абеля "Ассемблер". Он довольно старенький, но все что нужно рассказывает.
По теории компиляторов лучшая книга: Альфред Ахо "Компиляторы".
Как это все работает вместе (и многом другом) ищи Эндрю Таненбаума "Современные операционные системы".
Их все переводили и издавали на русском. Но лучше купи оригиналы на Амазоне, меньше будет терминологической путаницы. Термины переводить занятие сложное и неблагодарное. Лучше понять что они означают и просто использовать.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38655219
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky Тип void ведет себя как неполный, т.е. имеет те же ограничения (неизвестен размер, объявлять можно только указатель ..). При этом его нельзя сделать полным, т.е. это его изначальное и окончательное состояние.

если я напишу
авторvoid smth_f()
{...}

f(...)


1.Никакого значения никуда записано не будет по выходу из функции ?
2.
Код: plaintext
1.
2.
f1()
{...}



и

Код: plaintext
1.
2.
f2(void)
{...}



аналогичны ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38656113
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1.Никакого значения никуда записано не будет по выходу из функции ?
Если ты сделаешь:
Код: plaintext
1.
2.
void f();
int a = f();


то компилятор выругается.


SashaMercury2.
Код: plaintext
1.
2.
f1()
{...}



и

Код: plaintext
1.
2.
f2(void)
{...}



аналогичны ?Нет.
Ты можешь задавать параметры для f1() , но совсем не можешь задавать для f2().
Код: plaintext
1.
2.
int f1();
int f3(...);

Вот эти два определения аналогичны.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38656135
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Код: plaintext
1.
2.
int f1();
int f3(...);

Вот эти два определения аналогичны.стоит, наверное, отметить, что в С++ аналогии обратные, т.е. f1() и f2( void ) имеют одинаковые сигнатуры.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38656254
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite Owl
Код: plaintext
1.
2.
int f1();
int f3(...);

Вот эти два определения аналогичны.стоит, наверное, отметить, что в С++ аналогии обратные, т.е. f1() и f2( void ) имеют одинаковые сигнатуры.
Да, это одна из разниц между С и С++.
Код: plaintext
1.
2.
3.
int f1();
int f2(void);   == f1() в С++
int f3(...);    == f1() в С
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38656283
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owlegorychпропущено...
стоит, наверное, отметить, что в С++ аналогии обратные, т.е. f1() и f2( void ) имеют одинаковые сигнатуры.
Да, это одна из разниц между С и С++.
Код: plaintext
1.
2.
3.
int f1();
int f2(void);   == f1() в С++
int f3(...);    == f1() в С


В смысле, что имелось ввиду?
http://ideone.com/SHVTqA
На C вообще выдает ошибку на int f3(...);
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38656284
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маленькая поправка.

() не совсем то же самое что и (...) в С.
В С простой (...) не разрешен - нужен хотя бы один именованный аргумент перед ...
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38656436
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyМаленькая поправка.

() не совсем то же самое что и (...) в С.
В С простой (...) не разрешен - нужен хотя бы один именованный аргумент перед ...В С? Разрешен.
Ключик -fallow-parameterless-variadic-functions и никаких запретов :)
А в С++ и ключиков не нужно...
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38656487
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВ С? Разрешен.
Ключик
В стандартном С это UB.
А ключиков можно изобрести много, это не делает код стандартным.
...
Рейтинг: 0 / 0
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
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38692645
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
©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),...

Дальше не очень с пониманием, видимо выше что-то пропустил.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38702481
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё. Мне кажется основное я понял верно. И в целом разобрался с переводом. Чтобы это нормально понять, нужно ввести такие понятия как пространство указателей



вот так.

Каким то образом мы именуем память, но доступ к этой памяти может получить кто угодно. С помощью этого квалификатора на каждый участок памяти можно поставить замок и т.д.

Как часто вы используете его в жизни ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38703247
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВсё. Мне кажется основное я понял верно. И в целом разобрался с переводом. Чтобы это нормально понять, нужно ввести такие понятия как пространство указателей



вот так.ээээ.. ты сейчас с кем разговаривал?

Не, с одной стороны, если тебе проще подходить к пониманию многоуровневых указателей через теорию пространств, то ура. Но с другой стороны, никто так не делает. Для подавляющего большинства людей намного проще вспомнить ассемблер и косвенный доступ, а потом уже понять что такое указатель.
Вообще, мне кажется что это один из тех случаев когда хорошее знание математики мешает реальному пониманию. Ты привык думать что: "вот есть такая штука которую можно использовать так-то". А сейчас надо думать: "есть возможность сделать это, какую штуку мы можем изобразить?" В математике первичны абстракции, здесь первичны действия.

SashaMercuryКаким то образом мы именуем память, но доступ к этой памяти может получить кто угодно. С помощью этого квалификатора на каждый участок памяти можно поставить замок и т.д.

Как часто вы используете его в жизни ?Никогда! Потому что это совсем не замок.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38703437
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Подскажите пожалуйста по возникшим вопросам
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.
	char a[10];
	char* b = (char*)malloc(10);
	printf("%i %i \n", sizeof(a), sizeof(b));


, ну и вы знаете что я увидел.
Насколько я знаю, имя массива является константным указательным выражением, или константным указателем. А указатель это переменная, или просто указатель. То есть к имени массив а я не могу сделать операцию ++, например. Тогда, я решил проверить

Код: plaintext
1.
2.
3.
4.
	char a[10];
	char* b = (char*)malloc(10);
	char* const c = (char* const)malloc(10);
	printf("%i %i %i\n", sizeof(a), sizeof(b), sizeof(c)); 



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

SashaMercuryИ почему size_t знаковый ?
size_t - беззнаковый, извините если разочаровал :)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38703444
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryНасколько я знаю, имя массива является константным указательным выражением, или константным указателем.
Нет. Имя массива неявно приводится к константному указателю на первый элемент в тех контекстах, где ожидается указатель.
А в остальном массив это совершенно по другому устроенная сущность.

SashaMercuryИ почему size_t знаковый ?
size_t - беззнаковый, извините если разочаровал :)

беззнаковый, точно ! Я прочитал написано unsigned, а подумал почему то что signed. Спасибо!
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38704478
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Подскажите пожалуйста по следующим вопросам.

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.

Разве это не ошибки ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38704712
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 здесь указан в контексте подстановки макросов.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38705564
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, спасибо!
У меня на секунду мелькала такая мысль, честно. Но я почему-то на ней не остановился. Здорово понимать это, когда знаешь что это макрос, и понимать в каком контексте к нему применяется слово расширять/разворачивать. Приятно C:
А на вики всё-таки ошибки ? Я оказался прав ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38705571
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

Я не вижу никакого противоречия в вики и стандарте.

"can contain" и "is large enough to store" это по смыслу одно и то же.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38705575
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм. Ну всё таки в первом случае, утверждение не несёт такого сильного значения. Это как can и must. Вроде похоже, но не то.
А по размерам типов данных ? Разве тут нет явных противоречий со стандартом ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38706241
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryРазве тут нет явных противоречий со стандартом ?
Нет.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38735641
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
if
else if
else if



У меня возникли кое-какие вопросы по её работе. Вот что нашёл

©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.
else if


а
Код: plaintext
1.
2.
else
  if


(не говорю что так нужно писать)

Я правильно понял ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38736753
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЯ правильно понял ?Нет.

Правильно будет знать что есть конструкция
if ( expression ) statement else statement
и знать что эта конструкция сама по себе является statement.
Короче говоря, почитай про Context Free Grammar. Это очень нужная вещь для понимания структур языков.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38736776
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Так он так и написал )
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38736990
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо )

Anatoly Moskovsky , сегодня между делом думал.
Для чего нужен limits.h ? Вероятно для поддержки переносимости языка. В нём указаны диапазоны для целых типов данных. И если исходить из того, что программа собирается в двоичной системе счисления, то действительно описание на википедии верно, но я не встретил нигде в стандарте того факта, что программы на Си можно(и нужно) писать исходя из того, что основание системы счисления окружения должно быть равным 2. То есть, теоретически, можно написать программу на Си в окружении с основанием системы счисления равным 4 например. Тогда, типы данных будут занимать в два раза меньше бит.
Эти мысли правильные, или я заблуждаюсь ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38736999
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДля чего нужен limits.h ? Вероятно для поддержки переносимости языка. В нём указаны диапазоны для целых типов данных.Не только целых. Там по традиции указываются все параметры платформы.

SashaMercury И если исходить из того, что программа собирается в двоичной системе счисления, то действительно описание на википедии верно, но я не встретил нигде в стандарте того факта, что программы на Си можно(и нужно) писать исходя из того, что основание системы счисления окружения должно быть равным 2. То есть, теоретически, можно написать программу на Си в окружении с основанием системы счисления равным 4 например.Да можно. Никаких проблем.

SashaMercury Тогда, типы данных будут занимать в два раза меньше бит. Ну с чего это вдруг? Типы данных будут такими какими их назначат разработчики платформы. Скажут что в целом восемь бит - будет восемь бит. Скажут что на платформе 11 бит в троичной системе счисления - будут 11 бит в троичной системе.
Все зависит от CPU, памяти и левой задней ноги человека их сконструировавшего.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38737000
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, таким образом, в стандарте указывается только диапазон значений в 10 сс, а не количество бит необходимых для хранения типа ? Значит на википедии всё-таки ошибка?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38737009
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SSТогда, типы данных будут занимать в два раза меньше бит

имел ввиду, что для хранения одного и того-же диапазона значений потребуется в два раза меньше бит.В общем случае, если a- это 1 сс, b-2cc, получим число характеризующее отношение числа бит необходимых для хранения одинакового диапазона 1сс ко 2 сс через формулу


Возможно есть какие-то частные случаи, но по-моему формула верна. Поправьте, если не так.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38737600
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели эти вопросы такие глупые и очевидные ( Так и не понял, правильно ли я рассуждаю, или нет.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38737621
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНеужели эти вопросы такие глупые и очевидные ( Так и не понял, правильно ли я рассуждаю, или нет.
Стандарт это практика, а не теория. У него нет цели описать все теоретически возможные случаи, только реально возможные с небольшим запасом. В реале есть только процессоры работающие с двоичной логикой, т.е. у бита два состояния 0,1. Других процессоров нет, поэтому троичные, четверичные и т.д. биты могут быть реализованы только надстройкой над двоичной. Такая надстройка - это уже будет другой язык, со своими правилами и стандартами.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38737872
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryWhite Owl, таким образом, в стандарте указывается только диапазон значений в 10 сс, а не количество бит необходимых для хранения типа ? Значит на википедии всё-таки ошибка?
Еще раз: В Си диапазон значений записываемых в элементарный тип определяется возможностями платформы на которой программа собирается.
Сейчас у нас абсолютное доминирование платформ основанных на двоичной арифметике с 8-и битными байтами. Поэтому, мы и можем указывать диапазон значений в системе счисления отличной от реальности. В статьях и стандартах десятичная система используется исключительно для удобства восприятия человеком привыкшим к десятичной системе.
Но на самом деле диапазон значений целого беззнакового числа всегда , где c система счисления а n количество бит обрабатываемых в CPU за один раз.


Dima TSashaMercuryНеужели эти вопросы такие глупые и очевидные ( Так и не понял, правильно ли я рассуждаю, или нет.
Стандарт это практика, а не теория. У него нет цели описать все теоретически возможные случаи, только реально возможные с небольшим запасом. В реале есть только процессоры работающие с двоичной логикой, т.е. у бита два состояния 0,1. Других процессоров нет, поэтому троичные, четверичные и т.д. биты могут быть реализованы только надстройкой над двоичной. Такая надстройка - это уже будет другой язык, со своими правилами и стандартами.Ты не прав. Существуют процессоры основанные на не двоичных системах счисления. В них один бит (один физический провод) может содержать ток разного номинала, каждый номинал соответствует разному числу внутри системы счисления.
Другое дело что экономически такие процессоры сейчас изготовлять не выгодно. Транзисторы и диоды основанные на "есть сигнал или нету сигнала" намного дешевле чем транзисторы и диоды различающие уровень сигнала. "Намного" это значит на несколько порядков.
И да, Саша прав, если суметь оправдать экономическую целесообразность изготовления таких процессоров, то в то-же самое количество бит можно будет записать намного большее число.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38737875
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну появилась многоуровневая флэш-память и что? Наружу-то она всё равно "торчит двоичным битом".
Плотность выше, да.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38737956
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТы не прав. Существуют процессоры основанные на не двоичных системах счисления. В них один бит (один физический провод) может содержать ток разного номинала, каждый номинал соответствует разному числу внутри системы счисления.
Думаешь еще существуют? Разрабатывали аналоговые процы (если так можно назвать) в период рассвета СССР, в 50-60е, насколько историю знаю - тогда и забросили. Тогда же были разработки компов с троичной логикой (один вроде даже не сдан на драгметаллы), но потом занялись пародированием разработок IBM и все стало окончательно двоичным. Поправь если ошибаюсь.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38737964
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДумаешь еще существуют? Разрабатывали аналоговые процы (если так можно назвать) в период рассвета СССР, в 50-60е, насколько историю знаю - тогда и забросили.
Сразу вспомнил: электромеханический аналоговый счетно-решающий прибор для расчета упреждения цели на Шилках ЗСУ-23-4М. Легко переносится четырьмя членами экипажа
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38738076
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TWhite OwlТы не прав. Существуют процессоры основанные на не двоичных системах счисления. В них один бит (один физический провод) может содержать ток разного номинала, каждый номинал соответствует разному числу внутри системы счисления.
Думаешь еще существуют? Разрабатывали аналоговые процы (если так можно назвать) в период рассвета СССР, в 50-60е, насколько историю знаю - тогда и забросили. Тогда же были разработки компов с троичной логикой (один вроде даже не сдан на драгметаллы), но потом занялись пародированием разработок IBM и все стало окончательно двоичным. Поправь если ошибаюсь.
Я не думаю что они существуют, я знаю что они существуют. Но из лабораторий пока не выходят...
Из коммерчески успешных проектов не знаю ни одного. Но то что их нету сейчас, не значит что их не будет никогда.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38738099
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"И тут Остапа понесло" :D Ну ясно, я как чувствовал, что вы спорить все начнёте, а ответа я не получу ;) Ладно. В любом случае узнал что-то новое, это хорошо. Всем спасибо :)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38744903
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Сегодня мне нужно было считать несколько значений по маске. Сначала я хотел нарисовать для этого блоксхему, а потому подумал, что с большой долей вероятности, для этого можно использовать функцию из стандартной библиотеки ввода вывода stdio.h
Код: plaintext
1.
int fscanf(FILE * restrict stream, const char * restrict format, ...);


Я думаю, что она вам всем знакома. Ранее я ей пользовался, но не углублялся в детали её работы. Решил её изучить, и для этого конечно открыл стандарт. У меня возникло несколько вопросов, подскажите пожалуйста.

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.
int n = fscanf(in, "%d %c %d %c %d", &x1, &op1, &x2, &op2, &x3);


все ок.(хотя я не хочу чтобы тут было все ок)
А вот так input = "2++3==5", считывание не происходит корректно(хотя n=4,а не 2 как нужно).
Почему так ?

7. Пользуетесь ли вы в своей работе этой функцией ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38744906
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощение, весь код, с типами данных
Код: plaintext
1.
2.
3.
4.
int x1, x2, x3;
	char op1, op2;
	int n = fscanf(in, "%d %c %d %c %d", &x1, &op1, &x2, &op2, &x3);
	printf("%i %c %i %c %i\n %d\n", x1, op1, x2, op2, x3, n);
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38745006
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryРешил её изучить, и для этого конечно открыл стандарт.для изучения функций стандартной библиотеки полезней читать хэлп к используемому компилятору, а не стандарт. Потому что разработчики компилятора могут от стандарта отойти по каким либо причинам.
Стандарт говорит о том, как должно быть, хэлп говорит как есть на самом деле. К сожалению, это не всегда одно и то же
SashaMercuryПользуетесь ли вы в своей работе этой функцией ?нет. Слишком уж она требовательна к качеству входящих данных ( замечание относится ко всему семейству scanf, естественно ).
Но и на С я не пишу, а в плюсах нет необходимости использовать функции из <cstdio> ))
PS прошу прощения за оффтоп
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38745218
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
int n = fscanf(in, "%d %c %d %c %d", &x1, &op1, &x2, &op2, &x3);



все ок.(хотя я не хочу чтобы тут было все ок)
А вот так input = "2++3==5", считывание не происходит корректно(хотя n=4,а не 2 как нужно).
Почему так ?
%d читает число со знаком, а %c читает ровно один символ - поэтому все правильно.
SashaMercury7. Пользуетесь ли вы в своей работе этой функцией ?
Да.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38745263
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,
1. Почему-то подумал что while в том контексте читается как but.

По остальным вопросам разберусь на свежую голову. Ещё раз перечитаю и разберу.

Всем спасибо.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38745307
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1. Почему-то подумал что while в том контексте читается как but.
Можно подумать это меняет смысл предложения :)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38745961
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C праздником вас, Сообщество :)
Желаю всем здоровья. Также, надеюсь вы будете читать код, такой-же прекрасный, как "Идиот" Достоевского, интересных решений и идей в творчестве.
Софья Васильевна КовалевскаяСтоит мне только коснуться математики, как я опять забуду всё на свете.
PS Отмечу, что я не стал бы выделять настоящих программистов от математиков. Настоящие программисты несомненно тоже математики.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38746052
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryPS Отмечу, что я не стал бы выделять настоящих программистов от математиков.
Программирование это больше логика чем математика, я бы даже сказал что математики мало в программировании. Говорят из философов хорошие программисты получаются.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38746158
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНастоящие программисты несомненно тоже математики.
С точки зрения математики мой текущий проект был закончен в июне.
А с точки зрения программирования я до сих пор отлаживаю его.
Так что позвольте не согласиться :)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38783573
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Сегодня читал стандарт, и встретил следующее

©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.
#include <stdio.h>
void myfunc(void)
{
printf("%s\n", _ _func_ _);
/* ... */
}

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.
static const char __func__[] = "myfunc";
void myfunc(void)
{
	printf("%s\n", __func__);
}



Зачем это нужно ? С квалификаторами const и static я согласен, но зачем именно такое именование переменной ? И зачем нужно добавлять "[]" ? И не очень понял почему привели именно этот пример, это настолько актуально ? Чем так важен идентификатор(токен) _ _func_ _ ? Подскажите пожалуйста.

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

Predefined означает заранее определенный.
Т.е. в данном случае определенный не в программе, а компилятором, автоматически.
Поэтому
SashaMercuryВ программе это будет выглядеть вот так :
Код: plaintext
1.
2.
3.
4.
void myfunc(void)
{
	printf("%s\n", __func__);
}


как если бы функция выглядела так
Код: plaintext
1.
2.
3.
4.
5.
void myfunc(void)
{
	static const char __func__[] = "myfunc";
	printf("%s\n", __func__);
}



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

Смутило имя переменной, с двумя _ в начале и в конце.

И более привычна такая запись
Код: plaintext
1.
static const char* __func__ = "myfunc";
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38783593
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё равно не понял зачем это нужно.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38783598
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всмысле не зачем [] нужно, а зачем нужен этот механизм. И почему именно такое именование переменной __func__
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38783679
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

Всё, что начинается с двух подчёркиваний, зарезервировано стандартом под компилятороспецифичные идентификаторы.
s[] — не то же самое, что *s, различия в размещении переменной в памяти и в её размере.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38783719
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfSashaMercury,
s[] — не то же самое, что *s, различия в размещении переменной в памяти и в её размере.

Различие в том, что
Код: plaintext
1.
char s[]="abc";



есть определение массива на 4 элемента, s-имя массива, константа если хотите и адрес его первого элемента.

Код: plaintext
1.
char* s1="abc";



А s1 это переменная. К ней соответственно применимы s1++,s=new_p ; etc

Потому фраза выделенная красным некорректна. Или не до конца корректна, если кто придерётся.



Спасибо. Эти вещи мне были понятны(и я объяснил по какой причине я ошибся)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38783757
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryвсмысле не зачем [] нужно, а зачем нужен этот механизм.
для вызова деструкторов
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38783825
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSashaMercuryвсмысле не зачем [] нужно, а зачем нужен этот механизм.
для вызова деструкторовв С? откуда бы им там взяться, интересно?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38783856
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychИзопропилпропущено...

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

ИзопропилSashaMercuryзачем нужен этот механизм.
для вызова деструкторов
А причем деструкторы к __func__ вообще непонятно. Можете объяснить? (Предположим, что мы говорим про С++)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38784118
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyА причем деструкторы к __func__ вообще непонятно. Можете объяснить? (Предположим, что мы говорим про С++)

там два вопросв было - один насчёт []
второй насчёт идентификаторов с подчерками
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38784153
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилтам два вопросв было - один насчёт []
второй насчёт идентификаторов с подчерками
Так. И какая связь деструкторов с любым из этих вопросов?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800184
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
static int zlast = -1;
static void islogin(void);
static void reexecute(struct command *);



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.
#include "libz/zutil.h"
#include "libc/regex/utils.h"



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.
void rnd_attach_source(rndsource_element_t *,char*,u_int32_t);
void rnd_detach_source(rndsource_element_t *);
[...]
#define RND_MAXSTATCOUNT 10 /* 10 sources at once max */
[...]
typedef struct {
u_int32_t start;
u_int32_t count;
rndsource_t source[RND_MAXSTATCOUNT];
}rndstat_t;




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.
struct –––sbuf {
unsigned char *_base;
int _size;
};



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


Код: plaintext
1.
2.
3.
4.
struct __sbuf {
unsigned char *_base;
int _size;
};
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800188
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryТаким образом, это искусственный элемент. Используете ли вы префиксы в своей работе ?
Вы все не так поняли.
Программистам запрещено объявлять имена с префиксом из "_".
Только создатели компилятора имеют право это делать при реализации стандартных библиотек.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800189
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryТаким образом, это искусственный элемент. Используете ли вы префиксы в своей работе ?
Вы все не так поняли.
Программистам запрещено объявлять имена с префиксом из "_".
Только создатели компилятора имеют право это делать при реализации стандартных библиотек.

сейчас я выполнил вот такой код

Код: plaintext
1.
2.
3.
4.
5.
6.
int _c = 100;

int main(int argc, char** argv)
{
		printf("%i", _c);
}



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

Код: plaintext
1.
2.
3.
4.
5.
6.
int _c = 100;

int main(int argc, char** argv)
{
		printf("%i", _c);
}


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

понял что это юридические правила. Спасибо :)

Об этом действительно написано в стандарте? Поищу. Вы используете префиксы ради ODR в своих программах ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800203
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryТаким образом, это искусственный элемент. Используете ли вы префиксы в своей работе ?
Вы все не так поняли.
Программистам запрещено объявлять имена с префиксом из "_".
Только создатели компилятора имеют право это делать при реализации стандартных библиотек.

Теперь я полностью понял вашу мысль.

Вот как я понял, то что там написано. "Для того чтобы ограничить область видимости некоторых идентификаторов(для исключения конфликтов в части ODR) существует квалификатор static. Однако, он не помогает, когда программист использует директиву препроцессора #include и включает один файл в другой. По этой причине был искусственно введена префиксная система к идентификаторам каждого конкретного файла. Для встроенных библиотек, например, используется префикс _ или __(для структур). Для других файлов, префикс устанавливается на усмотрение программиста(желательно не использовать _ и __)".


Вы, как мне теперь понятно, говорите что я всё не так понял, и нужно лишь знать то, что _ и __ префиксы идентификаторов во встроенных библиотеках языка. И про проблему ODR (т.е. то для чего нужны эти префиксы), вы не говорите. Т.е. вы не связываете эти префиксы с ODR. Раз у вас различное мнение с автором книги, то с большой долей вероятности, у меня есть ошибка в рассуждениях и понимании вас и автора, где она ? Объясните пожалуйста
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800204
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поискал в стандарте, и не нашёл где было бы написано о каких-либо соглашениях касаемо имён. Плохо искал ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800206
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryПоискал в стандарте, и не нашёл где было бы написано о каких-либо соглашениях касаемо имён. Плохо искал ?

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

По стандартам С и С++ в юзерской программе не может быть двойных подчеркиваний и одиночных подчеркиваний перед заглавными буквами. Других ограничений на подчеркивания нет.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800209
Фотография 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.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800210
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В вот в С++
С++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
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800211
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В С и С++ хоть по разному записано, но означает одно и то же.
Префиксы "_" и "__" - зарезервированы для компилятора, и не дозволяются в юзерских именах.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800212
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 их не выполняет(реализовал компилятор Си, не выполнив все требования стандарта), правильно ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800213
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЗначит это не юридические правила, а физические правила
Физические законы не требуют формулирования, они выполняются в любом случае.
А тут именно юридически запрещено.
Как например запрещено воровство законами УК, и даже если сейф закрыт на замок и воровство из него невозможно, то это не значит что воровать запрещено физическими законами. Просто пока не удалось взломать сейф :)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800215
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

вот смотрите , я напишу такой код

Код: plaintext
1.
2.
char* a;
int* a;



у нас будет redefinition, и это написано в стандарте. Программа не запустится. Стандарт это свод законов описывающих язык. Значит это невозможно физически. Аналогично и с underscore.

А вот законы негласные, касаемо читабельности кода, именованию переменных, организации полуоткрытых справа интервалов,etc это уже юридические законы грамотного Си-программиста. Вот как я больше понимаю разницу между физическими и юридическими законами в части программирования на Си. Потому, мне кажется, тут недоработка разработчиков VS. Они не до конца реализовали естественную физическую среду Си.


Хотя ваш подход, также уместен, и я его принимаю. Можно рассуждать что это свод законов, юридических. А то что VS их не выполняет, это наши проблемы. Мы всё равно не должны брать деньги из открытого сейфа. А физическими законами тогда что будет ? Или будут только юридические
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800217
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryИли будут только юридические
Конечно. Ведь стандарт - это юридический документ.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800218
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

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

То что компилятор пропускает _ в юзерской программе имеет вполне разумное объяснение.
Для компилятора нет четкой грани между кодом программы, где запрещено, и кодом стандартной библиотеки, где разрешено.
Поэтому проконтролировать выполнение правила нельзя.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800222
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

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

Си имеет фиксированное стандартом количество встроенных библиотек с фиксированными именами?

Думаю, да. Однако вывод который я хотел ранее сказать-"почему бы не проверять имена компилируемых файлов, и исходя из этого либо разрешать либо запрещать префиксы _ и __ ".
Но этот вывод будет неправильным, ибо задача компилятора не проверять имена компилируемых файлов, а компилировать исходный код.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800270
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercury,

То что компилятор пропускает _ в юзерской программе имеет вполне разумное объяснение.
Для компилятора нет четкой грани между кодом программы, где запрещено, и кодом стандартной библиотеки, где разрешено.
Поэтому проконтролировать выполнение правила нельзя.

а это значит, что данный вывод правильный. Спасибо :)
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38800654
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
/*++ BUILD Version: 0001    // Increment this if a change has global effects

Copyright (c) 1993-1999, Microsoft Corporation

Module Name:

    aclapi.h

Abstract:

    Public
    Structure/constant definitions and typedefines for the Win32 Access
    Control APIs

--*/
#ifndef __ACCESS_CONTROL_API__
#define __ACCESS_CONTROL_API__

#include <windows.h>
#include <accctrl.h>

#ifdef __cplusplus
extern "C" {
#endif

//
// Progress Function:
// Caller of tree operation implements this Progress function, then
// passes its function pointer to tree operation.
// Tree operation invokes Progress function to provide progress and error
// information to the caller during the potentially long execution
// of the tree operation.  Tree operation provides the name of the object
// last processed and the error status of the operation on that object.
// Tree operation also passes the current InvokeSetting value.
// Caller may change the InvokeSetting value, for example, from "Always"
// to "Only On Error."
//

typedef VOID (*FN_PROGRESS) (
    __in LPWSTR                     pObjectName,    // name of object just processed
    __in DWORD                      Status,         // status of operation on object
    __inout PPROG_INVOKE_SETTING    pInvokeSetting, // Never, always,
    __in PVOID                      Args,           // Caller specific data
    __in BOOL                       SecuritySet     // Whether security was set
    );


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.
/*===---- cpuid.h - X86 cpu model detection --------------------------------===
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 *===-----------------------------------------------------------------------===
 */

#if !(__x86_64__ || __i386__)
#error this header is for x86 only
#endif

/* Features in %ecx for level 1 */
#define bit_SSE3        0x00000001
#define bit_PCLMULQDQ   0x00000002
#define bit_DTES64      0x00000004
#define bit_MONITOR     0x00000008
#define bit_DSCPL       0x00000010
#define bit_VMX         0x00000020
#define bit_SMX         0x00000040
#define bit_EIST        0x00000080
#define bit_TM2         0x00000100
#define bit_SSSE3       0x00000200
#define bit_CNXTID      0x00000400
#define bit_FMA         0x00001000
#define bit_CMPXCHG16B  0x00002000
#define bit_xTPR        0x00004000
#define bit_PDCM        0x00008000
#define bit_PCID        0x00020000
#define bit_DCA         0x00040000
#define bit_SSE41       0x00080000
#define bit_SSE42       0x00100000
#define bit_x2APIC      0x00200000
#define bit_MOVBE       0x00400000
#define bit_POPCNT      0x00800000
#define bit_TSCDeadline 0x01000000
#define bit_AESNI       0x02000000
#define bit_XSAVE       0x04000000
#define bit_OSXSAVE     0x08000000
#define bit_AVX         0x10000000
#define bit_RDRAND      0x40000000

/* Features in %edx for level 1 */
#define bit_FPU         0x00000001
#define bit_VME         0x00000002
#define bit_DE          0x00000004
#define bit_PSE         0x00000008
#define bit_TSC         0x00000010
#define bit_MSR         0x00000020
#define bit_PAE         0x00000040
#define bit_MCE         0x00000080
#define bit_CX8         0x00000100
#define bit_APIC        0x00000200
#define bit_SEP         0x00000800
#define bit_MTRR        0x00001000
#define bit_PGE         0x00002000
#define bit_MCA         0x00004000
#define bit_CMOV        0x00008000
#define bit_PAT         0x00010000
#define bit_PSE36       0x00020000
#define bit_PSN         0x00040000
#define bit_CLFSH       0x00080000
#define bit_DS          0x00200000
#define bit_ACPI        0x00400000
#define bit_MMX         0x00800000
#define bit_FXSR        0x01000000
#define bit_FXSAVE      bit_FXSR    /* for gcc compat */
#define bit_SSE         0x02000000
#define bit_SSE2        0x04000000
#define bit_SS          0x08000000
#define bit_HTT         0x10000000
#define bit_TM          0x20000000
#define bit_PBE         0x80000000

/* Features in %ebx for level 7 sub-leaf 0 */
#define bit_FSGSBASE    0x00000001
#define bit_SMEP        0x00000080
#define bit_ENH_MOVSB   0x00000200

/* PIC on i386 uses %ebx, so preserve it. */
#if __i386__
#define __cpuid(__level, __eax, __ebx, __ecx, __edx) \
    __asm("  pushl  %%ebx\n" \
          "  cpuid\n" \
          "  mov    %%ebx,%1\n" \
          "  popl   %%ebx" \
        : "=a"(__eax), "=r" (__ebx), "=c"(__ecx), "=d"(__edx) \
        : "0"(__level))

#define __cpuid_count(__level, __count, __eax, __ebx, __ecx, __edx) \
    __asm("  pushl  %%ebx\n" \
          "  cpuid\n" \
          "  mov    %%ebx,%1\n" \
          "  popl   %%ebx" \
        : "=a"(__eax), "=r" (__ebx), "=c"(__ecx), "=d"(__edx) \
        : "0"(__level), "2"(__count))
#else
#define __cpuid(__level, __eax, __ebx, __ecx, __edx) \
    __asm("cpuid" : "=a"(__eax), "=b" (__ebx), "=c"(__ecx), "=d"(__edx) \
                  : "0"(__level))

#define __cpuid_count(__level, __count, __eax, __ebx, __ecx, __edx) \
    __asm("cpuid" : "=a"(__eax), "=b" (__ebx), "=c"(__ecx), "=d"(__edx) \
                  : "0"(__level), "2"(__count))
#endif

static __inline int __get_cpuid (unsigned int __level, unsigned int *__eax,
                                 unsigned int *__ebx, unsigned int *__ecx,
                                 unsigned int *__edx) {
    __cpuid(__level, *__eax, *__ebx, *__ecx, *__edx);
    return 1;
}

static __inline int __get_cpuid_max (unsigned int __level, unsigned int *__sig)
{
    unsigned int __eax, __ebx, __ecx, __edx;
#if __i386__
    int __cpuid_supported;

    __asm("  pushfl\n"
          "  popl   %%eax\n"
          "  movl   %%eax,%%ecx\n"
          "  xorl   $0x00200000,%%eax\n"
          "  pushl  %%eax\n"
          "  popfl\n"
          "  pushfl\n"
          "  popl   %%eax\n"
          "  movl   $0,%0\n"
          "  cmpl   %%eax,%%ecx\n"
          "  je     1f\n"
          "  movl   $1,%0\n"
          "1:"
        : "=r" (__cpuid_supported) : : "eax", "ecx");
    if (!__cpuid_supported)
        return 0;
#endif

    __cpuid(__level, __eax, __ebx, __ecx, __edx);
    if (__sig)
        *__sig = __ebx;
    return __eax;
}

...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801032
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

не могли бы вы объяснить, что вы хотите сказать, для "особо одарённых"
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801054
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryBasil A. Sidorov,

не могли бы вы объяснить, что вы хотите сказатьон хочет сказать, что, хотя WinSDK и не является частью стандартной библиотеки С, там всё же используются идентификаторы, начинающиеся с __ и с _Большая-буква. Равно, как и в некоторых других библиотеках.
Вывод: в прикладном коде лучше не использовать такие идентификаторы в глобальном пространстве имён, а вот в общеупотребительных библиотеках - это наоборот, вполне допустимая практика, и более того, желательная
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801057
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, а почему тебя вообще так "парит" этот вопрос?
Так и хочется тебе сказать - "не парься!"
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801062
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychВывод: в прикладном коде лучше не использовать такие идентификаторы в глобальном пространстве имён, а вот в общеупотребительных библиотеках - это наоборот, вполне допустимая практика, и более того, желательная
Это как правила хорошего тона в обществе джетльменов. Тоесть ты конечно-же
можешь "запилить" code-style аля obfuscation. Но рано или поздно посмотрят
как на дебила. Кому плохо сделал? Себе наверное. Или что, латиницы
не хватило? Малобукв?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801064
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Я бы сказал, что "математика учит обращать внимание на самое важное", но не буду
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801078
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТоесть ты конечно-же можешь "запилить" code-style аля obfuscation. Но рано или поздно посмотрят
как на дебила. Кому плохо сделал? Себе наверное. Или что, латиницы не хватило? Малобукв?Многабукав.
А теперь смотрим включаемые файлы компиляторов и (g)clib/SDK - обфускация на марше.
А всё потому, что в этих включаемых файлах - не всегда тривиальные косвенные определения.
И подчерки служат той же цели, что и красный сигнал световора: "Не лезь сюда! Здесь опасно".
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801420
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Это не мои выводы. Это говорит стандарт языка Си.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801421
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonSashaMercury, а почему тебя вообще так "парит" этот вопрос?
Так и хочется тебе сказать - "не парься!"

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

Я бы сказал, что "математика учит обращать внимание на самое важное", но не буду

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

PS
Это не мои выводы. Это говорит стандарт языка Си.
Это не совсем так. Стандарт описывает что и с какими именами должна содержать реализация языка.
При этом реализация вполне может содержать и другие возможности, не описанные в стандарте, и вот они должны подчиняться именованию с подчеркиванием.
WinSDK это часть реализации языка С/С++ на платформе Windows в VS (без нее невозможно писать программы под винду).
Поэтому она не считается какой-то там пользовательской библиотекой и имеет право на использование префиксов __ для огораживания своих внутренностей от пользовательского кода.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801455
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryКаждая деталь важна
и умение отличать первостепенное от второстепенного
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801461
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryВывод: в прикладном коде и в общеупотребительных библиотеках нельзя использовать такие префиксы.

PS
Это не мои выводы. Это говорит стандарт языка Си.
Это не совсем так. Стандарт описывает что и с какими именами должна содержать реализация языка.
При этом реализация вполне может содержать и другие возможности, не описанные в стандарте, и вот они должны подчиняться именованию с подчеркиванием.
WinSDK это часть реализации языка С/С++ на платформе Windows в VS (без нее невозможно писать программы под винду).
Поэтому она не считается какой-то там пользовательской библиотекой и имеет право на использование префиксов __ для огораживания своих внутренностей от пользовательского кода.

Понимаю вас. Тем не менее у меня остались противоречия по этому вопросу, но они связаны с тем, что я не вижу всю картину. Потому, я запомню это, и в будущем ещё подумаю над этим вопросом. Спасибо.

PS
Использует ли кто-нибудь свои префиксы для предотвращения нарушения ODR в своих программах ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801569
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryИспользует ли кто-нибудь свои префиксы для предотвращения нарушения ODR в своих программах ? тынц , и тынц
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801588
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
static int zlast = -1;
static void islogin(void);
static void reexecute(struct command *);



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.
#include "libz/zutil.h"
#include "libc/regex/utils.h"



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.
void rnd_attach_source(rndsource_element_t *,char*,u_int32_t);
void rnd_detach_source(rndsource_element_t *);
[...]
#define RND_MAXSTATCOUNT 10 /* 10 sources at once max */
[...]
typedef struct {
u_int32_t start;
u_int32_t count;
rndsource_t source[RND_MAXSTATCOUNT];
}rndstat_t;




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.
struct –––sbuf {
unsigned char *_base;
int _size;
};



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


имеется ввиду, используете ли вы префиксы в своей работе для того, о чём говорит Спинеллис
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801620
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryиспользуете ли вы префиксы в своей работе для того, о чём говорит Спинеллися живу в мире С++, у меня там для этого есть пространства имён )))
хотя использую при именовании исходных файлов и элементов перечисления, а также иногда пользуюсь в смысле второй моей ссылки от Спольски в языках, где нет подходящих языковых конструкций. Имеется ввиду вот что:
Код: sql
1.
2.
-- код на T-SQL
DECLARE @c_constant INT = 3; -- @c_ - префикс для констант
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38801835
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymaytonSashaMercury, а почему тебя вообще так "парит" этот вопрос?
Так и хочется тебе сказать - "не парься!"

Дело в том, что мне нравится этот язык, и я не могу закрыть на что-то глаза. Каждая деталь важна
ОКИ. Не потони в деталях. Особенно когда будешь изучать различные API.
Это уже за рамками стандарта С.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38802907
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych,
т.е. вы используете пространства имён, как и говорит далее Спинеллис(последняя строчка процитированного). Спасибо, что поделились опытом :)

mayton, оки-доки-артишоки :D хорошо
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38895375
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня мне понадобилась функция 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. У меня не получилось
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38895558
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

файл пустой, например.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38896715
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, сработало. Странно, ранее, я читал все что было в файле, доходил до конца. И снова делал fscanf, однако -1 почему-то не возвращалось. Например файл содержал 100 temp EOF

Делал так
Код: plaintext
1.
2.
t1=fscanf(in,"%i %s",...);//2
t2=fscanf(in,"%i",...);//ожидаю увидеть -1, вижу 0
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38914310
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Достаточно часто в целочисленных алгоритмах встречается деление целых чисел, и в частности, часто необходимо найти как остаток от деления, так и целую часть. Приходится использовать два мультипликативных оператора:
Код: plaintext
1.
2.
   z=a/b;
   rem=a%b;



Аналогичные результаты можно получить после нахождения целой части с помощью элементарных арифметических операций, например.

Предполагаю, что реализация операторов % и / может позволить получить оба значения за одно действие. Возможно потребуются ассемблерные вставки. Правильно ли я предполагаю ? Как вы поступаете в таком случае ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38914311
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В стандарте не нашел ничего об этом,жаль
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38914323
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВозможно потребуются ассемблерные вставки. Правильно ли я предполагаю ? Как вы поступаете в таком случае ?
Поступаем так:
Код: plaintext
1.
2.
   z=a/b;
   rem=a%b;



Ассемблерные вставки не требуются.
Это забота компилятора использовать возможности процессора для вычисления выражений за одну операцию.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38914332
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryВозможно потребуются ассемблерные вставки. Правильно ли я предполагаю ? Как вы поступаете в таком случае ?
Поступаем так:
Код: plaintext
1.
2.
   z=a/b;
   rem=a%b;



Ассемблерные вставки не требуются.
Это забота компилятора использовать возможности процессора для вычисления выражений за одну операцию.

т.е. по факту деление будет происходить один раз ? Вторая операция потребует время только на доступ к ячейке памяти, а не на вычисление ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38914336
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryт.е. по факту деление будет происходить один раз ? Вторая операция потребует время только на доступ к ячейке памяти, а не на вычисление ?
Стандарт не обязывает компиляторы делать оптимизации.
Поэтому что будет по факту, зависит от компилятора.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38914339
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЗдравствуйте.
Достаточно часто в целочисленных алгоритмах встречается деление целых чисел, и в частности, часто необходимо найти как остаток от деления, так и целую часть. Приходится использовать два мультипликативных оператора:
Код: plaintext
1.
2.
   z=a/b;
   rem=a%b;



Аналогичные результаты можно получить после нахождения целой части с помощью элементарных арифметических операций, например.

Предполагаю, что реализация операторов % и / может позволить получить оба значения за одно действие. Возможно потребуются ассемблерные вставки. Правильно ли я предполагаю ? Как вы поступаете в таком случае ?

Если очень хочется работать "без потери точности", можно использовать <ratio> .

За деление и остаток от него можно не беспокоиться. Пересылка регистр-память стоит всё равно гораздо дороже.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38914353
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury
Код: plaintext
1.
2.
   z=a/b;
   rem=a%b;


Предполагаю, что реализация операторов % и / может позволить получить оба значения за одно действие. Возможно потребуются ассемблерные вставки. Правильно ли я предполагаю ? Как вы поступаете в таком случае ?
Правильно предполагаешь. Процессор может посчитать одной командой http://www.kolasc.net.ru/cdo/programmes/assembler/div.html

ИМХУ писать надо как ты написал. Думаю компилятор сам догадается что этот код одной командой можно выполнить. Даже если не догадается - процессор при вычислении может это параллельно посчитать и разницы не будет.

По большому счету нет смысла заморачиваться, как выше подмечено: пересылка результата в память гораздо медленнее.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38914368
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
int divmod(int a,int b,int &remainder){
    // .... 
}
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38914955
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

div, ldiv, lldiv
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38915109
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю что пожелание Саши по поводу оптимизации деления и расчёта остатка
имеет смысл в крито-системах где длина операндов может достигать 4096 bit
и где расчёт и пересылка имеют конкретную стоимость в единицах времени.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38915309
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBaga
За деление и остаток от него можно не беспокоиться. Пересылка регистр-память стоит всё равно гораздо дороже.
Если какое-либо действие избыточно, то сколько бы оно не стоило, от него нужно избавиться
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38915324
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДумаю что пожелание Саши по поводу оптимизации деления и расчёта остатка
имеет смысл в крито-системах где длина операндов может достигать 4096 bit
и где расчёт и пересылка имеют конкретную стоимость в единицах времени.

Может быть :)
А вообще, этот вопрос возник ровно по одной причине. Построил схему для целочисленного алгоритма, и вдруг мне стало некомфортно смотреть на неё, как будто забыл указать константный квалификатор к источнику копирования(такой же дискомфорт), и я решил что нужно попытаться избавиться от этого "двойного деления".
Спасибо всем за советы :)

PS
RWolf, это видимо функции стандартной библиотеки С++? завтра посмотрю внимательно
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38915327
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В стандарте С++ посмотрю.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38915341
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryэто видимо функции стандартной библиотеки С++? завтра посмотрю внимательно
Нет. Скорее всего Wolf давал тебе ссылку на инструкции языка ассемблер.
Впрочем... С++ дружит с ассемблером на уровне специальных директив.

Если тебе такое по душе конечно.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38915379
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38915385
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ого. Вона как.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38915551
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЕсли какое-либо действие избыточно, то сколько бы оно не стоило, от него нужно избавиться
Нет, если это ухудшит читаемость кода, при том что компилятор сам умеет оптимизировать это.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #38915555
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryЕсли какое-либо действие избыточно, то сколько бы оно не стоило, от него нужно избавиться
Нет, если это ухудшит читаемость кода, при том что компилятор сам умеет оптимизировать это.
+1
SashaMercury, программирование на 99% это ремесло и на 1% исскуство. Ремесло требует оптимизации совсем в другом, например в читабельности кода.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39001102
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

1. Подскажите пожалуйста, как правильно переводить слово statement из стандарта на русский язык. Не могу хорошее слово подобрать.
declaration - объявление,
expresson - выражение,
а statement не знаю.

2. Может ли expression содержать ; ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39001109
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оператор
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39001472
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно. Почему так ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39001483
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot SashaMercury

а statement не знаю.

Тут надо аккуратно очень. Обычно переводят "оператор". Но в С и operator тоже есть -- + - * / и так далее.
Как тогда его переводить ?
Книг русских по С/С++ я уже давно не читал, как переводят -- не знаю. Ну или забыл.

Можно "оператор"/"операция", но чревато путаницей.

Потом посмотрю, как переводили Хабрисона/Стила.

2. Может ли expression содержать ; ?


Как бы ';' именно expression и завершает.
Как выражение может содержать его ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39001522
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКак бы ';' именно expression и завершает.
Как выражение может содержать его ?пустой оператор?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39001630
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В математической логике "statement" может еще использоваться как утверждение.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39001667
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychMasterZivКак бы ';' именно expression и завершает.
Как выражение может содержать его ?пустой оператор?

Точка с запятой завершает оператор (statement) вычисления выражения.
Как она может быть частью выражения ?
Она его просто завершит, и начнётся новый оператор.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39001691
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТочка с запятой завершает оператор (statement) вычисления выражения.
Как она может быть частью выражения ?
Она его просто завершит, и начнётся новый оператор.частью быть не может, но может быть самим выражением.
Код: plaintext
1.
2.
int i = 10;
while( i-- ) ; // сюда то ведь нужно чё-то поставить - пустой оператор
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39001698
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychпустой оператор
"У тебя должно быть очень хорошее зрение, если ты видишь ничего." (с) ЛК
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39032057
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Искал в стандарте Си, и в стандарте С++ макрозамену для Pi. Не нашёл. Плохо искал ? Или её просто нет в этих стандартах ?
Пробовал "гуглить", как советует Анатолий, нашёл аналогичный вопрос . Однако не помог совет предложенный на той странице

PS
понимаю что могу самостоятельно определить эту константу используя макрозамену.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39032062
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury, #include <math.h> , не?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39032101
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSashaMercury, #include <math.h> , не?
Должно быть так. Но как в этой библиотеке называется эта константа ?
PI и M_PI там не нашёл
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39032106
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По ссылке примеры почитал?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#define _USE_MATH_DEFINES // for C
#include <math.h>

int main() 
{
	printf("%f\n", M_PI);
}
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39032111
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПо ссылке примеры почитал?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
#define _USE_MATH_DEFINES // for C
#include <math.h>

int main() 
{
	printf("%f\n", M_PI);
}



конечно почитал. Не помогло. MVS 2013
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39032124
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryконечно почитал. Не помогло. MVS 2013
По заявлениям MS должно работать в 2013.
Убедись что ранее (в других *.h) нет #include <math.h>
Попробуй поставить #define перед всеми #include
Код: plaintext
1.
2.
3.
4.
#define _USE_MATH_DEFINES // for C
#include ...
#include ...
#include <math.h>
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39032177
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
// math.h

#if defined(_USE_MATH_DEFINES) && !defined(_MATH_DEFINES_DEFINED)
#define _MATH_DEFINES_DEFINED

/* Define _USE_MATH_DEFINES before including math.h to expose these macro
 * definitions for common math constants.  These are placed under an #ifdef
 * since these commonly-defined names are not part of the C/C++ standards.
 */

/* Definitions of useful mathematical constants
 * M_E        - e
 * M_LOG2E    - log2(e)
 * M_LOG10E   - log10(e)
 * M_LN2      - ln(2)
 * M_LN10     - ln(10)
 * M_PI       - pi
 * M_PI_2     - pi/2
 * M_PI_4     - pi/4
 * M_1_PI     - 1/pi
 * M_2_PI     - 2/pi
 * M_2_SQRTPI - 2/sqrt(pi)
 * M_SQRT2    - sqrt(2)
 * M_SQRT1_2  - 1/sqrt(2)
 */

#define M_E        2.71828182845904523536
#define M_LOG2E    1.44269504088896340736
#define M_LOG10E   0.434294481903251827651
#define M_LN2      0.693147180559945309417
#define M_LN10     2.30258509299404568402
#define M_PI       3.14159265358979323846
#define M_PI_2     1.57079632679489661923
#define M_PI_4     0.785398163397448309616
#define M_1_PI     0.318309886183790671538
#define M_2_PI     0.636619772367581343076
#define M_2_SQRTPI 1.12837916709551257390
#define M_SQRT2    1.41421356237309504880
#define M_SQRT1_2  0.707106781186547524401

#endif  /* _USE_MATH_DEFINES */
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39032810
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На стационарном компьютере работает. На ноутбуке нет. Сам файл библиотеки не открывал, на ноутбуке. Просто пытался подключить эти макросы как говорил Дмитрий.

Зачем эти константы запрятаны в условной компиляции ? И почему в стандарте о них ни слова ?
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39033539
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

ну вот , например, пища для размышлений.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39050284
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему удалили тему с программой-поздравлением ?(
Саша старался, а вы удаляете :(
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39050287
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь идёт о разборе действий модератора - то возможно стиль ее оформления не соответствовал
действующим правилам форума.

В любом случае здесь обсуждать действия модера не стоит. Лучше сюда http://www.sql.ru/forum/sqlru.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39050298
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Жаловаться на кого-то в Сообществе и выносить сор из избы я не буду. Потому задал этот вопрос тут. Кто бы это ни сделал, это некрасиво. Пусть тогда отправит свое подравление-программу, если ему моя не понравилась. Или объяснил бы хотя бы в чем дело.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39050314
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymayton,
Жаловаться на кого-то в Сообществе и выносить сор из избы я не буду. Потому задал этот вопрос тут. Кто бы это ни сделал, это некрасиво. Пусть тогда отправит свое подравление-программу, если ему моя не понравилась. Или объяснил бы хотя бы в чем дело.А это было поздравление? Выглядело как обфусцированная фигня.
В следующий раз дай своей программе хоть описание нормальное. Вдруг кто поверит и запустит?

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

Ну ты дал джазу! Первая моя мысль - что это какой-то развод. И извини бро... на поздравление
это вообще ни разу не канает

Давай лучше кодь тяпничный бенчмарк.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39050376
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно было запустить программу
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39050416
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не обижайся. Если начистоту... без "цеховой солидарности" - я-бы точно также
"грохнул" твой топик как и другой модератор.

Ну просто... тема вопроса не обозначена. И выглядит как издёвка.

Ну будь здоров.
...
Рейтинг: 0 / 0
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
    #39050501
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не обижаюсь. Просто расстроен что никто не догадался запустить. Уже ладно. И вы будьте здоровы
...
Рейтинг: 0 / 0
262 сообщений из 262, показаны все 11 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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