|
|
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
RWolfSashaMercury, Всё, что начинается с двух подчёркиваний, зарезервировано стандартом под компилятороспецифичные идентификаторы. Наконец-то я прочитал что-то про эти подчёркивания в литературе. Diomidis SpinellisCode Reading: The Open Source Perspective 9.3.2 Namespaces An important concept of a module is the principle of information hiding, prescribing that all information related to a module should be private to it unless it is specifically declared to be public. In C modules implemented as a single file you will find that global identifiers are declared with the static keyword to limit their visibility to a single compilation unit (file). Код: plaintext 1. 2. 3. However, this technique does not prevent identifiers used in header files from leaking to the files that include them. As an example, in the C and C++ language a typedef or a preprocessor macro definition in a header file may result in a clash when another file defines a global function or variable with the same name. Although some cases can be solved by renaming the offending identifier in the program being developed, others, where two different existing modules clash with each other, can be difficult to solve since they may not fall under the developer's control. Consider the (contrived) example of compiling the following code. Код: plaintext 1. 2. The two header files included both define a uch identifier, thus creating the following error. libc/regex/utils.h:46: redefinition of `uch' libz/zutil.h:36: `uch' previously declared here This problem of namespace pollution is solved in a number of ad hoc ways in the C language; other languages like Ada, C++, Eiffel, Java, Perl, and the Modula family provide specific constructs for combatting this problem. A common solution for curbing the namespace pollution, without the need for additional language-provided facilities, involves prefixing identifiers with a certain unique prefix. Notice how in the example below all type, function, and macro identifiers of the rnd.h header file are prefixed with an rnd prefix. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. In fact, the prefix method of identifier isolation is officially sanctioned by the ANSI C standard by reserving all identifiers starting with an underscore character (_) for use by the language implementation. When reading a library header you will notice that all identifiers start with an underscore, thus being kept separated from any identifiers a user might define. Код: plaintext 1. 2. 3. 4. Although in the above example the _base and _size structure tags belong—according to ANSI C—in a separate namespace (that of the __sbuf structure tags), they still need to be prefixed with an underscore since they might clash with macro definitions. To avoid the problems we described above you will find that modern C++ programs often make use of the namespace functionality. Таким образом, это искусственный элемент. Используете ли вы префиксы в своей работе ? (провёл аналогию с БД, мне например не нравится когда к атрибутам отношения добавляют префикс, не вижу в этом смыла, хотя возможно просто чего-то не знаю) Хотя, в данном случае, дело не в нравится/не нравится, а в необходимости связанной с ODR(One Definiton Rule). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 02:45:07 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Последний участок кода неккоректен Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 02:46:23 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryТаким образом, это искусственный элемент. Используете ли вы префиксы в своей работе ? Вы все не так поняли. Программистам запрещено объявлять имена с префиксом из "_". Только создатели компилятора имеют право это делать при реализации стандартных библиотек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 03:21:32 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryТаким образом, это искусственный элемент. Используете ли вы префиксы в своей работе ? Вы все не так поняли. Программистам запрещено объявлять имена с префиксом из "_". Только создатели компилятора имеют право это делать при реализации стандартных библиотек. сейчас я выполнил вот такой код Код: plaintext 1. 2. 3. 4. 5. 6. Хотя то, о чём вы говорите, я прочитал DSIn fact, the prefix method of identifier isolation is officially sanctioned by the ANSI C standard by reserving all identifiers starting with an underscore character (_) for use by the language implementation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 03:27:38 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryсейчас я выполнил вот такой код Код: plaintext 1. 2. 3. 4. 5. 6. Вы должны уже понимать разницу между юридическими законами и законами физики. Здесь речь про первые :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 04:41:57 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, понял что это юридические правила. Спасибо :) Об этом действительно написано в стандарте? Поищу. Вы используете префиксы ради ODR в своих программах ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 04:59:37 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryТаким образом, это искусственный элемент. Используете ли вы префиксы в своей работе ? Вы все не так поняли. Программистам запрещено объявлять имена с префиксом из "_". Только создатели компилятора имеют право это делать при реализации стандартных библиотек. Теперь я полностью понял вашу мысль. Вот как я понял, то что там написано. "Для того чтобы ограничить область видимости некоторых идентификаторов(для исключения конфликтов в части ODR) существует квалификатор static. Однако, он не помогает, когда программист использует директиву препроцессора #include и включает один файл в другой. По этой причине был искусственно введена префиксная система к идентификаторам каждого конкретного файла. Для встроенных библиотек, например, используется префикс _ или __(для структур). Для других файлов, префикс устанавливается на усмотрение программиста(желательно не использовать _ и __)". Вы, как мне теперь понятно, говорите что я всё не так понял, и нужно лишь знать то, что _ и __ префиксы идентификаторов во встроенных библиотеках языка. И про проблему ODR (т.е. то для чего нужны эти префиксы), вы не говорите. Т.е. вы не связываете эти префиксы с ODR. Раз у вас различное мнение с автором книги, то с большой долей вероятности, у меня есть ошибка в рассуждениях и понимании вас и автора, где она ? Объясните пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:13:45 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Поискал в стандарте, и не нашёл где было бы написано о каких-либо соглашениях касаемо имён. Плохо искал ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:20:36 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПоискал в стандарте, и не нашёл где было бы написано о каких-либо соглашениях касаемо имён. Плохо искал ? соглашения то есть конечно, а вот конкретно про _ и __ ничего не нашёл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:30:25 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, По стандартам С и С++ в юзерской программе не может быть двойных подчеркиваний и одиночных подчеркиваний перед заглавными буквами. Других ограничений на подчеркивания нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:37:53 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Про другие ограничения я поторопился. С117.1.3 Reserved identifiers ... — All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use. — All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:42:56 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
В вот в С++ С++1117.6.4.3.3 Global names Certain sets of names and function signatures are always reserved to the implementation: — Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use. — Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.175 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:46:11 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
В С и С++ хоть по разному записано, но означает одно и то же. Префиксы "_" и "__" - зарезервированы для компилятора, и не дозволяются в юзерских именах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:48:47 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyПро другие ограничения я поторопился. С117.1.3 Reserved identifiers ... — All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use. — All identifiers that begin with an underscore are always reserved for use as identifiers with file scope in both the ordinary and tag name spaces. нашёл. Значит это не юридические правила, а физические правила. Просто VS их не выполняет(реализовал компилятор Си, не выполнив все требования стандарта), правильно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:48:59 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗначит это не юридические правила, а физические правила Физические законы не требуют формулирования, они выполняются в любом случае. А тут именно юридически запрещено. Как например запрещено воровство законами УК, и даже если сейф закрыт на замок и воровство из него невозможно, то это не значит что воровать запрещено физическими законами. Просто пока не удалось взломать сейф :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 06:53:31 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, вот смотрите , я напишу такой код Код: plaintext 1. 2. у нас будет redefinition, и это написано в стандарте. Программа не запустится. Стандарт это свод законов описывающих язык. Значит это невозможно физически. Аналогично и с underscore. А вот законы негласные, касаемо читабельности кода, именованию переменных, организации полуоткрытых справа интервалов,etc это уже юридические законы грамотного Си-программиста. Вот как я больше понимаю разницу между физическими и юридическими законами в части программирования на Си. Потому, мне кажется, тут недоработка разработчиков VS. Они не до конца реализовали естественную физическую среду Си. Хотя ваш подход, также уместен, и я его принимаю. Можно рассуждать что это свод законов, юридических. А то что VS их не выполняет, это наши проблемы. Мы всё равно не должны брать деньги из открытого сейфа. А физическими законами тогда что будет ? Или будут только юридические ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 07:03:39 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИли будут только юридические Конечно. Ведь стандарт - это юридический документ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 07:16:13 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, хорошо. Это я тоже принимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 07:18:09 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercury, То что компилятор пропускает _ в юзерской программе имеет вполне разумное объяснение. Для компилятора нет четкой грани между кодом программы, где запрещено, и кодом стандартной библиотеки, где разрешено. Поэтому проконтролировать выполнение правила нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 07:18:46 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Си имеет фиксированное стандартом количество встроенных библиотек с фиксированными именами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 07:34:00 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SSAnatoly Moskovsky, Си имеет фиксированное стандартом количество встроенных библиотек с фиксированными именами? Думаю, да. Однако вывод который я хотел ранее сказать-"почему бы не проверять имена компилируемых файлов, и исходя из этого либо разрешать либо запрещать префиксы _ и __ ". Но этот вывод будет неправильным, ибо задача компилятора не проверять имена компилируемых файлов, а компилировать исходный код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 09:14:04 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercury, То что компилятор пропускает _ в юзерской программе имеет вполне разумное объяснение. Для компилятора нет четкой грани между кодом программы, где запрещено, и кодом стандартной библиотеки, где разрешено. Поэтому проконтролировать выполнение правила нельзя. а это значит, что данный вывод правильный. Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 09:15:17 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercurySSAnatoly Moskovsky, Си имеет фиксированное стандартом количество встроенных библиотек с фиксированными именами?Думаю, да.Не надо думать. Надо смотреть вокруг, а не просто втыкать текст стандарта: Windows SDK Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. llvm clang Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 12:54:08 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, не могли бы вы объяснить, что вы хотите сказать, для "особо одарённых" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 16:16:21 |
|
||
|
INTERNATIONAL STANDARD ISO/IEC ISO/IEC 9899:201x Вопросы и комментарии
|
|||
|---|---|---|---|
|
#18+
SashaMercuryBasil A. Sidorov, не могли бы вы объяснить, что вы хотите сказатьон хочет сказать, что, хотя WinSDK и не является частью стандартной библиотеки С, там всё же используются идентификаторы, начинающиеся с __ и с _Большая-буква. Равно, как и в некоторых других библиотеках. Вывод: в прикладном коде лучше не использовать такие идентификаторы в глобальном пространстве имён, а вот в общеупотребительных библиотеках - это наоборот, вполне допустимая практика, и более того, желательная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2014, 16:26:58 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38800189&tid=2018847]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
184ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 568ms |

| 0 / 0 |
