powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
25 сообщений из 262, страница 9 из 11
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
25 сообщений из 262, страница 9 из 11
Форумы / C++ [игнор отключен] [закрыт для гостей] / INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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