LINUX.ORG.RU

Опубликован новый стандарт языка C: C11

 , ,


0

8

Международная Огранизация по Стандартизации (ISO) опубликовала новый международный стандарт языка программирования C: ISO/IEC 9899:2011, ранее известный как C1X. Основные изменения:

  • поддержка многопоточности;
  • улучшенная поддержка юникода;
  • обобщенные макросы (type-generic expressions, позволяют статичную перегрузку);
  • анонимные структуры и объединения (упрощают обращение ко вложенным конструкциям);
  • управление выравниванием объектов;
  • статичные утверждения (static assertions);
  • удаление опасной функции gets (в пользу безопасной gets_s);
  • функция quick_exit;
  • спецификатор функции _Noreturn;
  • новый режим эксклюзивного открытия файла.

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

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

Последний черновик стандарта

>>> Подробности

★★★★

Проверено: Shaman007 ()
Последнее исправление: unsigned (всего исправлений: 4)

This new version mainly standardizes features that have already been supported by common contemporary compilers

Нет повода не выпить.

Nebuchadnezzar ★★★★
()
Ответ на: комментарий от true_admin

Иу так используйте нормальную систему контроля версий, например git. Раз уж так пошло, пора бы и язык программирования сменить на какой-нибудь адекватный, например C++. И табы уничтожить как класс чтобы у всех нормально читалось, кроме тех жалующихся упырей которые программируют в редакторах с переменной шириной символа. И тогда всё получится. Ваш, К.О.

alx_me ★★☆
()
Ответ на: комментарий от anonymous

Шаблонами мило разруливается со всей оптимизацией при компиляции.

Очнись уже от C++, какие шаблоны?

Я конкретно говорил про С++. Ты настолько тупой, что этого еще не понял?

Pavval ★★★★★
()
Ответ на: комментарий от alx_me

ора бы и язык программирования сменить на какой-нибудь адекватный, например C++

Эталон адекватности в треде, все в машину!

tailgunner ★★★★★
()
Ответ на: комментарий от true_admin

какая все таки мерзость этот питон с его табами и блокнотом

anonymous
()
Ответ на: комментарий от tailgunner

Во, хоть один прозрел от питоньих выкидышей. Народ начинает понимать что с ростом возможностей языка сложность синтаксиса растёт и это не избежно. Хуже когда этим процессом управляет параноидальных шизофреник как в питоне. Так что Страуструп рулит.

alx_me ★★☆
()
Ответ на: комментарий от anonymous

Еще хоть какую-нибудь поддержку RAII запилили бы, было бы вообще шикарно. Все-таки плюсовый автоматический вызов деструктора при выходе из скоупа — чертовски удобная вещь.

Use attribute cleanup, Luke!

anonymous
()
Ответ на: комментарий от anonymous

Он вроде только C++ курочит и не один, а в компании других комитетчиков.

alx_me ★★☆
()
Ответ на: комментарий от tailgunner

Узрите новобращённого праведника C++! Он отринул скверну змия злощастного и принял свет истинного языка! Особенно в свете нового стандарта.

alx_me ★★☆
()
Ответ на: комментарий от Pavval

Я конкретно говорил про С++. Ты настолько тупой, что этого еще не понял?

Ты настолько туп, что C++ от С не отличаешь. Прочитай название темы и ответь, какого хера ты мне тут про C++ зачесываешь?

anonymous
()
Ответ на: комментарий от alx_me

Иу так используйте нормальную систему контроля версий, например git.
Раз уж так пошло, пора бы и язык программирования сменить на какой-нибудь адекватный, например C++.

CL-USER 3 > (/ 0)

Error: Division-by-zero caused by / of (1 0).
1 (continue) Return a value to use.
2 Supply new arguments to use.
3 (abort) Return to level 0.
4 Return to top-level loop.
5 Return from multiprocessing.

Type :b for backtrace or :c <option number> to proceed.
Type :bug-form «<subject>» for a bug report template or :? for other options.

gensym ★★
()
Ответ на: комментарий от anonymous

Ты настолько туп, что C++ от С не отличаешь. Прочитай название темы и ответь, какого хера ты мне тут про C++ зачесываешь?

Для идиотов: фраза

З.Ы. Надо на С++ запилить классы uint32_be_t и uint32_le_t. Будет то же самое и с той же производительностью, но без необходимости делать поддержку со стороны языка:)

была написана как постскриптум. Как можно понять, её прочитав - она была написана про С++. Онтопиком была часть фразы до постскриптума.

Pavval ★★★★★
()
Ответ на: комментарий от northerner

Изменениями доволен. Одно печалит - курс переделывать :)

Вы про gets()? Использовал, использую, и буду использовать.

liberte
()

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

странные какие стандарты у вас. зачем они нужны, если никто их не придерживается? «В подъезде сидел комендант. У всех входящих он строго требовал пропуск, но если ему пропуска не давал, он пускал и так.»

anonymous
()
Ответ на: комментарий от alx_me

Узрите новобращённого праведника C++! Он отринул скверну змия злощастного и принял свет истинного языка! Особенно в свете нового стандарта.

Дураков, то, оказывается, полно. Питон существенно проще C++ и более строен, особенно 3-тий. И потому глюков и багов в программах на Питоне гораздо меньше, чем в C++, несмотря на более низкий в целом уровень квалификации.

Vudod ★★★★★
()
Ответ на: комментарий от Vudod

глюков и багов в программах на Питоне гораздо меньше, чем в C++

где можно посмотреть статистику? или это ваше субъективное мнение?

anonymous
()
Ответ на: комментарий от anonymous

Где можно посмотреть статистику? или это ваше субъективное мнение?

Любая статистика в таком вопросе субъективна. Просто во многих случаях скорость реализации идеи и надёжность результата всущественно превышают требования к скорости исполнения. Тем более, что критичные куски как правило переписываются на C или Fortran.

Vudod ★★★★★
()

А как там в плане совместимости с C++11?

reserved
()

Есть где полный список изменений?

з.ы. Си - я с тобой навсегда!

Deleted
()

Тред про самый культовый язык, и всего 4 страницы. Позор тебе, лор!

anonymous
()
Ответ на: комментарий от Pavval

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

Их просто программерским предметам не обучают. А на программерских специальностях электронике уделяется мало внимания

Harald ★★★★★
()

Может кто курсе - там по работе с памятью добавили чего интересного?... ну кроме проверки на выход за границы массива.

lv ★★
()

# поддержка многопоточности;

Вендопроблемы. В линуксе стандарт - POSIX Threads

# улучшенная поддержка юникода;

Неплохо

# обобщенные макросы (type-generic expressions, позволяют статичную перегрузку);

Как рыбе зонтик

# анонимные структуры и объединения (упрощают обращение ко вложенным конструкциям);

Неплохо, в целом.

# функция quick_exit;

Что это?

different_thing
()
Ответ на: комментарий от different_thing

Вендопроблемы. В линуксе стандарт - POSIX Threads

Ога, а в венде стандарт — win32 threads. И винда стоит на 99% десктопов, а линух на 1%, поэтому знаешь куда идет твой линуксовый «стандарт» ?

Reset ★★★★★
()

Про замену pthreads говорят. Ну-ну. Новый API как обертку вокруг него напишут и всего делов

different_thing
()
Ответ на: комментарий от liberte

Изменениями доволен. Одно печалит - курс переделывать :)

Вы про gets()? Использовал, использую, и буду использовать.

Нет, я не про него.

northerner ★★★
()
Ответ на: комментарий от stack_protector

Пусть первой лабой студенты пишут свою реализацию gets.

Где я написал про gets???

northerner ★★★
()
Ответ на: комментарий от Reset

Ога, а в венде стандарт — win32 threads. И винда стоит на 99% десктопов, а линух на 1%, поэтому знаешь куда идет твой линуксовый «стандарт» ?

А Linux стоит на половине серверов мира и почти на всех суперкомпьютерах. Так что знаешь куда идёт твой мелкомягкий форточный «стандарт»?

anonymous
()
Ответ на: комментарий от anonymous

Пруфлинк: https://www.varnish-cache.org/docs/trunk/phk/thetoolsweworkwith.html

The book which defined the C langauge had a list af reserved identifiers, all of them lower-case words. The UNIX libraries defined a lot of functions, all of them lower-case words.

When compiled, the assembler saw all of these words prefixed with an underscore, which made it easy to mix assembler and C code.

All the macros for the C-preprocessor on the other hand, were UPPERCASE, making them easy to spot.

Which meant that if you mixed upper and lower case, in your identifiers, you were safe: That wouldn't collide with anything.

First the ISO-C standards people got confused about the leading underscore, and I'll leave you guessing as to what the current text actually means:

All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use.

Feel free to guess, there's more such on pdf page 200 of the draft.

Next, they broke the upper/lower rule, by adding special keywords in mixed case, probably because they thought it looked nicer:

_Atomic, _Bool, _Noreturn &c

Then, presumably, somebody pointed out that this looked ugly:

void _Noreturn foo(int bar);

So they have come up with a #include file called <stdnoreturn.h> so that instead you can write:

#include <nostdreturn.h> void noreturn foo(int bar);

The <nostdreturn.h> file according to the standard shall have exactly this content:

#define noreturn _Noreturn

Are you crying or laughing yet ? You should be.

Вообще-то, по-другому они сделать не могли, не поломав совместимость.

Yareg ★★★
()
Ответ на: комментарий от alx_me

По-моему, он троллил. Не представляю, как такое можно всерьез писать.

И табы уничтожить как класс

Кстати, согласен. Табы - рудимент, нужно их депрекейтить.

grusha
()
Ответ на: комментарий от anonymous

странные какие стандарты у вас. зачем они нужны, если никто их не придерживается?

Не только у нас, но и у тебя тоже. That affect everyone. Такие вот стандарты, что никто не придерживается (потому что смысла нет - попробуй их прочесть хотя бы до конца, не то что реализовать), но _почти_ придерживаются, стандартизация ж какая-то нужна. И все довольны. Ништяк.

grusha
()
Ответ на: комментарий от Reset

И винда стоит на 99% десктопов, а линух на 1%, поэтому знаешь куда идет твой линуксовый «стандарт» ?

Твои «десктопы» идут туда же. Понятно, что на хомячках держится современная экономика, но экономика != цивилизация.

grusha
()
Ответ на: комментарий от different_thing

Хомячки! Хомячки! Их мнение никого не интересует. Так и запишите

Ты прав, твое мнение никого не интересует. Записал.

anonymous
()
Ответ на: комментарий от grusha

Твои «десктопы» идут туда же. Понятно, что на хомячках держится современная экономика, но экономика != цивилизация.

Не все такие, как ты, и живут в серверной.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.