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

GCC - это коллекция компиляторов GNU. Это де-факто стандартный компилятор для C, C ++, Go, Fortran и Ada в Linux, а также поддерживает многие другие языки и платформы. Помимо компилятора GCC имеет набор инструментов (libc, libstdc ++, objdump, nm и т. Д.), Которые широко используются на нескольких платформах и системах.


1
Clang не компилирует код, но gcc и msvc скомпилировали его
Я не понимаю, в чем проблема: в моем коде или в компиляторе (менее возможно). Вот такой кусок кода: #include <iostream> #include <type_traits> #include <set> template<typename T, typename = void> struct TestA: std::false_type {}; template<typename T> struct TestA<T, std::void_t<typename T::reverse_iterator>> : std::true_type {}; template<typename T> struct TestA<T, std::void_t<typename T::dummy_iterator>> : std::true_type …

1
Почему GCC не может предположить, что std :: vector :: size не изменится в этом цикле?
Я обратился к коллеге, который if (i < input.size() - 1) print(0);будет оптимизирован в этом цикле, чтобы input.size()он не читался на каждой итерации, но оказалось, что это не так! void print(int x) { std::cout << x << std::endl; } void print_list(const std::vector<int>& input) { int i = 0; for (size_t …
14 c++  gcc  assembly 

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

1
Почему этот код так долго компилируется с g ++?
Рассмотрим следующий код: template<int i> class A { typedef A<i-1> B; B x, y; }; template<> class A<0> { char m; }; int main() { A<LEVEL> a; } При тестировании его компиляции с помощью g ++ с помощью следующей команды Bash (с g ++ 8.3.0) for ((level=1; level<30; ++level)); do …

4
Существует ли фрагмент кода 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; …

1
GCC реализация угловых скобок включает в себя. Почему это должно быть так, как описано ниже?
Этот документ в разделе 2.6 «Вычисленные включения» имеет следующий параграф: Если строка расширяется до потока токенов, начинающегося с токена <и включающего токен>, то токены между <и первым> объединяются, чтобы сформировать имя файла для включения. Любой пробел между токенами сводится к одному пробелу; тогда любой пробел после начального <сохраняется, но завершающий …
11 c++  c  gcc  language-lawyer 

2
Пример кода IBM, не входящие функции не работают в моей системе
Я изучал повторный вход в программирование. На этом сайте IBM (действительно хороший). Я основал код, скопированный ниже. Это первый код, который катится по сайту. Код пытается показать проблемы, связанные с общим доступом к переменной при нелинейной разработке текстовой программы (асинхронность), печатая два значения, которые постоянно меняются в «опасном контексте». #include …
11 c  gcc  signals  x86-64  data-race 

1
Почему компиляторы настаивают на том, чтобы использовать регистр, сохраненный вызываемым пользователем?
Рассмотрим этот код 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 идентичны, за исключением того, …
10 c  gcc  assembly  clang  x86-64 

3
Можно ли преобразовать nullptr в uintptr_t? Разные компиляторы не согласны
Рассмотрим эту программу: #include <cstdint> using my_time_t = uintptr_t; int main() { const my_time_t t = my_time_t(nullptr); } Не удалось скомпилировать с msvc v19.24: <source>(5): error C2440: '<function-style-cast>': cannot convert from 'nullptr' to 'my_time_t' <source>(5): note: A native nullptr can only be converted to bool or, using reinterpret_cast, to an …
10 c++  c++11  gcc  visual-c++  clang 

1
Проблема в GCC / C ++ 17 с шаблоном шаблона класса
Рассмотрим 2 следующие перегрузки template<typename T> bool test() { return true; } template<template<typename ...> class T> bool test() { return false; } Первый работает для обычных классов, второй - для шаблонов, которые не создаются. Например: std::cout<<test<int>()<<std::endl; <-- this yields 1 std::cout<<test<std::list>()<<std::endl; <--this yields 0 Теперь рассмотрим следующую функцию шаблона: template<typename …
10 c++  templates  gcc  clang  c++17 

1
Утечка памяти во время исключения 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 std::string&, const std::string&) const { throw std::runtime_error("Nonono"); } }; std::unordered_map<std::string, std::string, std::hash<std::string>, MyComp> …

2
Несоответствующий вывод авто типов между различными компиляторами 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) { static_assert(sizeof...(args) == sizeof...(brgs)); auto v1 = {args...}, i1 = v1.begin(); auto v2 = {brgs...}, …

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

1
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 show_char_width и gcc: GNU C17 (Ubuntu 8.3.0-6ubuntu1) версии 8.3.0 (x86_64-linux-gnu), скомпилированная GNU C версии 8.3.0, …
9 c  gcc 

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.