C23 — это неофициальное название следующего стандарта языка программирования C. Он заменяет C17 и вводит некоторые новые функции.
3 ответа

Есть ли в C char8_t?

Я искал на многих сайтах и ​​ничего не нашел. Я знаю, что char8_t - ключевое слово в C++, начиная с C++ 20. Я пытаюсь узнать в C, они набирают unsigned char к char8_tв C23 (с выпуском символьных литералов u8 ). Кто-нибудь может меня прояснить.
29 мар '21 в 08:36
1 ответ

Реализация эквивалента std :: bit_cast в C

Можно ли реализовать что-то похожее на C ++ 20? std::bit_cast в C? Это было бы намного удобнее, чем использовать union или приведение указателей к разным типам и разыменование. Если бы у вас был, тогда было бы проще реализовать некоторые функции с п…
23 дек '21 в 18:31
1 ответ

В чем смысл атрибута __unused в C?

У меня есть вопрос. Допустим, вы определяете функцию или переменную в C. Если вы ее не используете, компилятор выдает предупреждение о том, что эта переменная/функция не использовалась. Чтобы подавить предупреждение, вы используете атрибут перед объ…
07 янв '21 в 22:06
1 ответ

Ищем stdckdint.h в коллекции gcc 11.2

Я пытаюсь найти копию stdckdint.h, которая, как я полагаю, должна быть в коллекции gcc 11.2, но поиск не позволяет найти ее в загруженном tar-архиве с исходным кодом. Это еще не общедоступно, или мне нужно что-то распаковать/собрать, чтобы получить …
05 апр '22 в 08:36
2 ответа

Почему strnlen() не рассматривается для включения в C23?

Функции strdup()а также strndup()наконец-то попали в грядущий стандарт C23: 7.24.6.4 Функция Синопсис #include <string.h> char *strdup(const char *s); Функция создает копию строки, на которую указывает , в пространстве, выделенном как при вызо…
26 май '22 в 13:55
1 ответ

Как читать из сокета прямо в файл

В C (или C++) есть способ получать данные из сокета, но вместо того, чтобы читать их в буфер в памяти, он «получает» их в файл. Я знаю, что обычный способ сделать это — получить данные в буфер символов, а затем записать буфер в файл. Существует ли т…
03 июн '22 в 03:01
1 ответ

Почему стандарт C23 уменьшает максимальный размер объекта, который должна поддерживать реализация?

В настоящее время я читаю новый проект стандарта C23 (N3088) и заметил, что в §5.2.4.1 стандарта говорится: Реализация должна иметь возможность переводить и выполнять программу, которая использует, но не превышает следующие ограничения для этих конс…
05 фев '23 в 21:03
0 ответов

почему для C23 не выбран слабый атрибут?

Я вижу , что в C23 появился новый тип ключевого слова «атрибуты». Некоторые из них, как[[deprecated]]использовались в C11+GNU__attribute__((deprecated)). Я выгляжу как отличное обновление. Интересно, почему такое полезное ключевое слово, как__attrib…
03 ноя '22 в 16:09
0 ответов

Какова цель новой директивы C23 #embed?

Новая директива препроцессора доступна в грядущем стандарте C23:#embed Вот простой пример: // Placing a small image resource. #include <stddef.h> void show_icon(const unsigned char *, size_t); int main (int, char*[]) { static const unsigned ch…
30 ноя '22 в 00:17
1 ответ

Каковы требования к выравниванию malloc(1)

Я слышал, что успешный вызовmalloc()возвращает указатель, выровненный подходящим образом для любого типа. Тем не менее, кажется бесполезным и расточительным требовать возвращать указатель, выровненный по большему значению, чем1поскольку ни один объе…
05 июл '23 в 09:17
1 ответ

Как избежать упоминания аргументов указателя функции внутри определения функции, которая принимает его в качестве аргумента?

Я пишу этот код C, который предполагает передачу множества указателей на функции, а иногда запись всех аргументов, которые принимает указатель на функцию при определении функции, которая принимает его в качестве аргумента, может значительно увеличит…
27 июн '23 в 08:56
2 ответа

gcc: функции constexpr в C23?

Поигравшись с GCC v14.0 (который должен быть близок к выпуску GCC v13.1), я скомпилировал следующий модуль: constexpr int f (int x) { return x + 2; } constexpr const int x[] = { f(1) }; сgcc -std=c2x -c foo.c -O2но GCC выдает: foo.c:1:1: error: 'con…
22 апр '23 в 13:20
1 ответ

Что такое предлагаемый тип C23 `_Either`?

Предложения C23 n3003 и n2366 вскользь упоминают предлагаемый тип на первой и седьмой страницах соответственно, и мне пока не удалось найти никаких других упоминаний о нем. Насколько я могу судить, он не упоминается ни в рабочем проекте C23 , ни в к…
16 май '23 в 13:20
5 ответов

Как использовать typeof_unqual, чтобы избежать предупреждений компилятора об отмене квалификатора const

В следующем кодеcopyThing()записывается так, что возвращаемое значение имеет тот же тип, что и значение аргумента: extern void *copyThingImpl(const void *x); #define copyThing(x) ((typeof(x)) copyThingImpl(x)) void foo(void); void foo(void) { char *…
15 авг '23 в 15:23
1 ответ

Что такое атрибуты [[reproducible]] и [[unsequenced]] в C23 и когда мне следует их использовать?

C23 представил атрибуты[[reproducible]]и[[unsequenced]]. Какова их мотивация? Как они определяются и какое влияние они оказывают на функцию? К каким функциям мне следует их применять?
06 авг '23 в 21:51
2 ответа

Что касается основных компиляторов и int main(){} в C23

Моя программа: int main(){} В предстоящем C23 удалены непрототипные функции и функции «стиля K&R». Я понимаю, что C23 еще официально не выпущен, но текущее поведение gcc и clang меня смущает. Компиляция вышеизложенного с помощью gcc (магистраль)…
20 апр '23 в 12:04
3 ответа

C23 авто против C++11 авто

В стандарте C23, по-видимому, введено использование ключевого слова «auto» для автоматического определения типа, см. здесь, как и в C++11. Однако, похоже, есть некоторые различия. Согласно здесь, https://en.cppreference.com/w/cpp/keyword/auto после …
14 май '23 в 17:33
1 ответ

В чем разница между float, _Float32, _Float32x и _Float32_t?

C23 представил ряд типов с плавающей запятой, включая, помимо прочего: _Float32x _Float32_t Я не уверен в различиях, таких как: Это ключевые слова, псевдонимы типов или что-то еще? Являются ли они разными типами или могут быть псевдонимами ? Какова …
05 июл '23 в 09:29
2 ответа

Инициализировать статическую константную переменную блочной области с указателем на составной литерал?

Следующий код отклонен GCC и Clang (ссылка godbolt): struct thing; typedef enum { THING_TYPE_A, THING_TYPE_B, } thing_type_t; typedef struct thing_a { int i; } thing_a_t; typedef struct thing_b { struct thing const *t; } thing_b_t; typedef struct th…
10 мар '23 в 04:10
3 ответа

В чем разница между constexpr в C++11 и [[reproducible]] в C23?

В C++11 добавлено ключевое слово constexpr, которое можно добавлять к функциям для указания постоянного поведения. C23 добавил, казалось бы, идентичную функциональность в виде тега [[reproducible]]. Чем отличаются эти два механизма?
05 июл '23 в 15:44