Вышла книга об оформлении текстов программ

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

admin аватар

Соглашения как соглашения

Для меня было сюрпризом. что C++ вообще используется в коде gcc. В остальном соглашения как соглашения. Про RTTI и исключения я полностью согласен. как и про printf вместо iostream. Про разрешение на использование стандартной библиотеки C++ у меня сложилось ощущение, что авторам этих соглашений банально не хватило упрямства (или убеждённости) её запретить.

А в целом — это соглашения отдельно взятого проекта, обусловленные целями, историей, текущим положением и так далее, вряд ли они могут представлять серьёзный интерес за пределами проекта, пусть даже этот проект — аж "сам" gcc.

Здравствуйте. Х

Здравствуйте.
Хотел бы услышать ваше мнение по поводу этих соглашений
http://gcc.gnu.org/codingconventions.html

Строковые литералы и вложенные подпрограммы в C

Здравствуйте.
На 66 странице в ващей книге утверждается, что в чистом C нельзя сделать конкатенацию строковых литералов, аналогичную таковой в C++. Это неверно. В черновике стандарта C99 по этому поводу написано следующее:

6.4.5 String literals
...
In translation phase 6, the multibyte character sequences specified by any sequence of adjacent character and wide tring literal tokens are concatenated into a single multibyte character sequence. If any of the tokens are wide string literal tokens, the resulting multibyte character sequence is treated as a wide string literal; otherwise, it is treated as a character string literal.
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

Еще GCC поддерживает вложенные подпрограммы для C как нестандартное языковое расширение http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html

admin аватар

И что?

Ни C99, ни тем более GNU extensions не имеют никакого отношения к языку Си. C99 — это не Си, это бред, придуманный командой международных террористов, по недоразумению называемых стандартизационным комитетом. Ну а авторов GNU extensions следовало бы, полагаю, немножко полечить.

Кроме того, процитированный вами фрагмент относится к multibyte literals, то есть к "строкам", состоящим из элементов типа wchar_t. Моё отношение к non-ascii chars в тексте программы довольно подробно изложено в упоминаемой вами книжке.

Это относится

Это относится не только к multibyte literals и это есть не только в C99. В ANSI C это тоже есть. Можете найти текст черновика соответствующего стандарта и почитать.
Или проверить на этом примере:

#include <unistd.h>
#include <string.h>

int main(void)
{
  const char *n = 
  "test\n"
  "test\n";

  write(STDOUT_FILENO, n, strlen(n));  
  return 0;
}

GCC с параметрами -ansi -pedantic компилирует этот пример без всяких возражений

admin аватар

похоже на правду

По правде, gcc меня бы не убедил, но clang делает то же самое. Точно помню, что в начале моей карьеры не все компиляторы это умели, но тогда C89 только-только появился, соответствовали ему далеко не все, да и, на самом деле, не факт, что проприетарному стандарту (а ISO других не делает в силу её политики) так уж прямо следует соответствовать.

Ну, значит так тому и быть, в следующем издании исправлю, если оно когда-нибудь будет. Спасибо.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".