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

C - мова програмування загального призначення, що використовується для системного програмування (ОС та вбудованих), бібліотек, ігор та крос-платформ. Цей тег слід використовувати із загальними питаннями, що стосуються мови C, визначеної стандартом ISO 9899 (остання версія, 9899: 2018, якщо інше не зазначено - також запити, пов’язані з версією тегів c89, c99, c11 тощо). C відрізняється від C ++, і він не повинен поєднуватися з тегом C ++ без раціональної причини.

4
Чому memmove швидший, ніж memcpy?
Я досліджую гарячі точки продуктивності в додатку, який проводить 50% свого часу в memmove (3). Додаток вставляє мільйони 4-байтових цілих чисел у відсортовані масиви та використовує memmove для зсуву даних "вправо", щоб звільнити місце для вставленого значення. Я сподівався, що копіювання пам'яті відбувається надзвичайно швидко, і я був здивований тим, …
89 c++  c  performance  memory 

9
Чому не працює +++++ b?
int main () { int a = 5,b = 2; printf("%d",a+++++b); return 0; } Цей код видає таку помилку: помилка: потрібне значення l як операнд збільшення Але якщо я розставляю пробіли a++ +і ++b, то це чудово працює. int main () { int a = 5,b = 2; printf("%d",a++ + …
89 c  lvalue 

7
Як ядро ​​Linux може скомпілювати себе?
Я не зовсім розумію процес компіляції ядра Linux, коли я встановлюю систему Linux на свою машину. Ось кілька речей, які мене збентежили: Ядро написано на мові C, проте як ядро ​​скомпілювалось без встановленого компілятора? Якщо компілятор C встановлений на моїй машині до компіляції ядра, як сам компілятор може бути скомпільований …

3
Що саме є правилом “як би”?
Як сказано в назві, Що саме є правилом "як би"? Типова відповідь, яку можна отримати: Правило, яке допускає будь-які перетворення коду, які не змінюють спостережувану поведінку програми Час від часу ми постійно отримуємо поведінку від певних реалізацій, які приписуються цьому правилу. Багато разів помилково. Отже, яке саме це правило. Стандарт …
89 c++  c  optimization  c++-faq  as-if 


4
GDB: перерва, якщо змінна дорівнює значенню
Мені подобається змушувати GDB встановлювати точку розриву, коли змінна дорівнює деякому значенню, яке я встановив, я спробував цей приклад: #include <stdio.h> main() { int i = 0; for(i=0;i<7;++i) printf("%d\n", i); return 0; } Вихід з GDB: (gdb) break if ((int)i == 5) No default breakpoint address now. (gdb) run Starting …
89 c  gdb 

4
Визначення поняття «нестабільне» є цим нестійким, або GCC має деякі стандартні проблеми відповідності?
Мені потрібна функція, яка (наприклад, SecureZeroMemory з WinAPI) завжди нульову пам’ять і не оптимізується, навіть якщо компілятор вважає, що пам’ять після цього більше ніколи не буде доступна. Здається, ідеальний кандидат на нестабільність. Але у мене є деякі проблеми, насправді змушуючи це працювати з GCC. Ось приклад функції: void volatileZeroMemory(volatile void* …
89 c++  c  gcc  standards 

3
Threadsafe проти повторного вступу
Нещодавно я задав запитання із заголовком "Чи безпечна нитка malloc?" , і всередині цього я запитав: "Malloc є повторним учасником?" У мене склалося враження, що всі учасники, які повторно вступають, захищені від потоків. Чи є це припущення помилковим?


10
Різниця між const і const volatile
Якщо ми оголошуємо змінну як volatileкожен раз, коли оновляється свіже значення Якщо ми оголошуємо змінну як, constтоді значення цієї змінної не буде змінено Тоді const volatile int temp; яка користь від оголошення змінної tempяк вище? Що станеться, якщо ми оголосимо як const int temp?
89 c  embedded 

9
Як використовувати nan та inf у C?
У мене є числовий метод, який може повернути nan або inf, якщо сталася помилка, і для тестування, яке я призначив, я хотів би тимчасово змусити його повернути nan або inf, щоб переконатися, що ситуація правильно обробляється. Чи існує надійний, незалежний від компілятора спосіб створення значень nan та inf у C? …
89 c  math 

2
Що таке vdso та vsyscall?
я зробив sudo cat /proc/1/maps -vv Я намагаюся зрозуміти вихідні дані. Я бачу, як багато спільних бібліотек відображаються в сегменті відображення пам'яті, як очікувалося. 7f3c00137000-7f3c00179000 r-xp 00000000 08:01 21233923 /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8 7f3c00179000-7f3c00379000 ---p 00042000 08:01 21233923 /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8 7f3c00379000-7f3c0037a000 r--p 00042000 08:01 21233923 /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8 7f3c0037a000-7f3c0037b000 rw-p 00043000 08:01 21233923 /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8 7f3c0037b000-7f3c00383000 r-xp …
89 c  linux  linux-kernel  kernel  vdso 

10
CMake не може визначити мову компонування за допомогою C ++
Я намагаюся запустити програму cmake hello world у Windows 7 x64 як з Visual Studio 2010, так і з Cygwin, але, здається, не можу змусити працювати. Моя структура каталогів така: HelloWorld -- CMakeLists.txt -- src/ -- -- CMakeLists.txt -- -- main.cpp -- build/ Я роблю a, cd buildпісля чого a …
89 c++  c  cmake 

7
Використання continue у операторі switch
Я хочу перейти від середини switchоператора до оператора циклу в наступному коді: while (something = get_something()) { switch (something) { case A: case B: break; default: // get another something and try again continue; } // do something for a handled something do_something(); } Чи це дійсний спосіб використання continue? …

13
Як працює ця програма?
#include <stdio.h> int main() { float a = 1234.5f; printf("%d\n", a); return 0; } Він відображає 0!! Як це можливо? Що таке міркування? Я навмисно дав %dу printfзаяві знак вивчення поведінки printf.
88 c++  c  memory  printf  endianness 

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