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

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

16
Я чув, що i ++ не є потокобезпечним, чи є я безпечним для потоків?
Я чув, що i ++ не є потокозахищеним твердженням, оскільки при складанні він зводиться до зберігання вихідного значення десь як тимчасового, збільшуючи його, а потім замінюючи, що може бути перервано контекстним перемикачем. Однак мені цікаво про ++ i. Наскільки я можу зрозуміти, це призведе до однієї інструкції збірки, наприклад, "додати …
90 c++  c  multithreading 

17
Оператор перемикача з поверненнями - правильність коду
Скажімо, у мене є код на мові приблизно такою структурою: switch (something) { case 0: return "blah"; break; case 1: case 4: return "foo"; break; case 2: case 3: return "bar"; break; default: return "foobar"; break; } Зараз очевидно, що breaks не є необхідними для правильної роботи коду, але це …

5
Як змусити backtrace () / backtrace_symbols () надрукувати імена функцій?
Специфічна для Linux backtrace()і backtrace_symbols()дозволяє створювати трасування викликів програми. Однак він друкує лише адреси функцій, а не їх імена для моєї програми. Як я можу змусити їх також надрукувати імена функцій? Я спробував скласти програму -g, а також -ggdb. Тестовий приклад нижче просто друкує це: ЗВЕРНЕННЯ ------------ ./a.out () [0x8048616] …
90 c  linux  debugging  backtrace 

12
C Управління пам'яттю
Я завжди чув, що на мові С потрібно реально спостерігати за тим, як ти керуєш пам’яттю. І я все ще починаю вивчати C, але поки що мені взагалі не доводилось робити жодної пам'яті, що керує пов'язаними з ними діями .. Я завжди уявляв, що маю звільняти змінні і робити всілякі …
90 c  memory 

4
PTHREAD_MUTEX_INITIALIZER проти pthread_mutex_init (& mutex, param)
Чи є якась різниця між pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; Або pthread_mutex_t lock; pthread_mutex_init ( &lock, NULL); Чи достатньо я безпечний, якщо використовую лише перший метод? ПРИМІТКА. Моє запитання здебільшого стосується дуже маленьких програм, де щонайбільше я буду підключати декілька клієнтів до сервера та вирішувати їх запити за допомогою робочих потоків.
90 c  ubuntu  pthreads  mutex 


5
gdb: “Не завантажена таблиця символів”
Я постійно отримую це повідомлення про помилку при спробі додати точку зупинки в gdb. Я використовував ці команди для компіляції: gcc -g main.c utmpib2.c -o main.o and: cc -g main.c utmpib2.c -o main.o and also: g++ -g main.c utmpib2.c -o main.o Я також спробував "-ggdb" замість "-g", і все ще …
90 c  gdb 

3
Об’єднайте int у рядок за допомогою C-попередника
Я намагаюся зрозуміти, як я можу об'єднати #define'd int у #define' d рядок, використовуючи C- препроцесор. Мій компілятор - GCC 4.1 на CentOS 5. Рішення також має працювати для MinGW. Я хотів би додати номер версії до рядка, але єдиний спосіб, яким я можу змусити його працювати, - зробити копію …

6
Чи справді парсери GCC та Clang написані від руки?
Здається, GCC та LLVM-Clang використовують рукописні парсери рекурсивного спуску , а ні машинний, розроблений на основі Bison-Flex, синтаксичний аналіз знизу вгору. Хтось тут може підтвердити, що це так? І якщо так, то чому основні фреймворки компілятора використовують рукописні парсери? Оновлення : цікавий блог на цю тему тут

7
Складіть 2D-масив на 1D-масив
Я хочу представити 2D-масив з 1D-масивом. Функція передаватиме два індекси (x, y) та значення, яке потрібно зберегти. Ці два індикатори представляли б окремий елемент 1D-масиву та встановлювали його відповідно. Я знаю, що 1D-масив повинен мати розмір arrayWidth × arrayHeight, але я не знаю, як встановити кожен елемент. Наприклад, як я …

4
Виклик функції C із коду C ++
У мене є функція C, яку я хотів би викликати з C ++. Я не міг використати " extern "C" void foo()" підхід, оскільки "" функцію C не вдалося скомпілювати за допомогою g ++. Але він чудово компілюється за допомогою gcc. Будь-які ідеї, як викликати функцію з C ++?
90 c++  c  linux  extern-c 

4
Простий приклад C, який робить HTTP POST і споживає відповідь
Я хотів би створити дуже просту C-програму, яка робить повідомлення HTTP. Це займе кілька параметрів і використовувати їх для побудови URL-адреси. Я просто хотів би зробити простий HTTP POST і отримати відповідь без використання curl (бібліотеки не встановлюються і не будуть встановлені на машині, яку потрібно запустити). Псевдокод: Опрацюйте 2 …
90 c  http  http-post 

5
Фатальна помилка GCC: stdio.h: Немає такого файлу чи каталогу
Я намагаюся скомпілювати програму на мові C на OS X 10.9 з GCC 4.9 (експериментальна). З якоїсь причини під час компіляції я отримую таку помилку: gcc: fatal error: stdio.h: No such file or directory Потім я спробував просту програму Hello World: #include <stdio.h> int main(int argc, const char *argv[]) { …
90 c  gcc  stdio 

6
Чи створюють компілятори кращий код для циклів виконуваної роботи порівняно з циклами інших типів?
У бібліотеці стиснення zlib (яка серед багатьох інших використовується в проекті Chromium) є коментар, який передбачає, що цикл виконуваної роботи в C генерує "кращий" код для більшості компіляторів. Ось фрагмент коду, де він з’являється. do { } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && …

8
Отримання ширини терміналу в С?
Я шукав спосіб отримати ширину терміналу в моїй програмі C. Я постійно придумую щось на зразок: #include <sys/ioctl.h> #include <stdio.h> int main (void) { struct ttysize ts; ioctl(0, TIOCGSIZE, &ts); printf ("lines %d\n", ts.ts_lines); printf ("columns %d\n", ts.ts_cols); } Але щоразу, коли я намагаюся, що отримую austin@:~$ gcc test.c -o …
89 c  linux  terminal  width 

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