Вопросы с тегом «gcc»

12
Сравнение немного с логическим

Скажем, у меня есть набор флагов, закодированных в uint16_t flags. Например, AMAZING_FLAG = 0x02. Теперь у меня есть функция. Эта функция должна проверить, хочу ли я изменить флаг, потому что, если я хочу это сделать, мне нужно записать на флэш-память. И это дорого. Поэтому я хочу чек, который...

11
Пример кода IBM, не входящие функции не работают в моей системе

Я изучал повторный вход в программирование. На этом сайте IBM (действительно хороший). Я основал код, скопированный ниже. Это первый код, который катится по сайту. Код пытается показать проблемы, связанные с общим доступом к переменной при нелинейной разработке текстовой программы (асинхронность),...

11
Существует ли фрагмент кода C, который эффективно вычисляет безопасное переполнение без использования встроенных компиляторов?

Вот функция C, которая добавляет intк другому, терпя неудачу, если переполнение произойдет: int safe_add(int *value, int delta) { if (*value >= 0) { if (delta > INT_MAX - *value) { return -1; } } else { if (delta < INT_MIN - *value) { return -1; } } *value += delta; return 0; } К...

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

Этот документ в разделе 2.6 «Вычисленные включения» имеет следующий параграф: Если строка расширяется до потока токенов, начинающегося с токена <и включающего токен>, то токены между <и первым> объединяются, чтобы сформировать имя файла для включения. Любой пробел между токенами...

10
Как проверить, является ли указатель void (void *) одним из двух типов данных?

Я пишу функцию, где я хотел бы принять 2 typeс параметров. A string(символ *) А structureгде будет n элементов. И чтобы достичь этого, я думаю об использовании простого void *типа параметра. Но я не знаю, как проверить, является ли параметр того или иного типа,...

10
Несоответствующий вывод авто типов между различными компиляторами c ++

Итак, я пытаюсь реализовать точечный продукт ( https://en.wikipedia.org/wiki/Dot_product ) в какой-то разновидности современного C ++ и придумал следующий код: #include <iostream> template<class... Args> auto dot(Args... args) { auto a = [args...](Args...) { return [=](auto... brgs) {...

10
Утечка памяти во время исключения unordered_map :: insert KeyEqual с GCC - нарушение строгой гарантии безопасности исключения?

Я использую GCC 7.3.1, но также протестирован на coliru, который я считаю версией 9.2.0. Сборка со следующим: g++ -fsanitize=address -fno-omit-frame-pointer rai.cpp Вот rai.cpp: #include <iostream> #include <unordered_map> int main() { try { struct MyComp { bool operator()(const...

10
Почему компиляторы настаивают на том, чтобы использовать регистр, сохраненный вызываемым пользователем?

Рассмотрим этот код C: void foo(void); long bar(long x) { foo(); return x; } Когда я компилирую его в GCC 9.3 с помощью -O3или -Os, я получаю это: bar: push r12 mov r12, rdi call foo mov rax, r12 pop r12 ret Выходные данные из clang идентичны, за исключением того, что они выбраны rbxвместо...

9
Почему компиляторы C оптимизируют переключение и если по-другому

Недавно я работал над личным проектом, когда наткнулся на странную проблему. В очень узком цикле у меня есть целое число со значением от 0 до 15. Мне нужно получить -1 для значений 0, 1, 8 и 9 и 1 для значений 4, 5, 12 и 13. Я повернулся к Godbolt, чтобы проверить несколько вариантов, и был...

9
CHAR_WIDTH необъявленный

Я получаю сообщение об ошибке ‘CHAR_WIDTH’ undeclared при попытке скомпилировать эту простую программу: #include <stdio.h> #include <limits.h> int main() { printf("CHAR_BIT = %d\n", CHAR_BIT); printf("CHAR_WIDTH = %d\n", CHAR_WIDTH); return (0); } с gcc ./show_char_width.c -o...

9
GCC не может сообщить о неправильно сформированном лямбда-вызове constexpr

Ниже приведены два тестовых примера для неопределенного поведения, выраженного как IIFE (немедленное название лямбда-экспрессии): constexpr auto test3 = []{ int* p{}; { int x{}; p = &x; } return *p; // Undefined Behaviour }(); // IIFE constexpr auto test4 = []{ int x =...