Запитання з тегом «gcc»

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

1
Чому ініціалізація масиву GCC у масиві спочатку заповнює всю нуль, включаючи ненульові елементи?
Чому gcc заповнює весь масив нулями замість лише 96 цілих чисел? Ненульові ініціалізатори знаходяться на початку масиву. void *sink; void bar() { int a[100]{1,2,3,4}; sink = a; // a escapes the function asm("":::"memory"); // and compiler memory barrier // forces the compiler to materialize a[] in memory instead of optimizing …


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>> : …

1
Чому GCC не може припустити, що розмір std :: vector :: не зміниться в цьому циклі?
Я заявляв колезі, який 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 i …
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)); …

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; return …

1
Реалізація кутових дужок GCC включає в себе. Чому це має бути таким, як описано нижче?
Цей документ у розділі 2.6 Computed Includes має такий параграф: Якщо рядок розширюється до потоку токенів, що починається з <лексеми і включає> маркер, то лексеми між <і першим> об'єднуються, щоб утворювати ім'я файлу, яке потрібно включити. Будь-який пробіл між маркерами зводиться до одного простору; то будь-який простір після початкового <зберігається, …
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 ідентичний за винятком вибору rbxзамість …
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 Тепер розглянемо наступну функцію …
10 c++  templates  gcc  clang  c++17 

1
Витік пам’яті під час unorряд_map :: вставити виняток 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, …

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 *) є одним із двох типів даних?
Я пишу функцію, де я хотів би прийняти 2 types параметрів. A string(char *) A, structureде буде n кількість елементів. І для досягнення цього я думаю використовувати простий void *тип параметра. Але я не знаю, як перевірити, чи є параметр того чи іншого типу безпечно.
10 c  gcc  types  clang 

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.