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

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

6
Як форматуються багатовимірні масиви в пам'яті?
У C я знаю, що можу динамічно виділити двовимірний масив на купі, використовуючи наступний код: int** someNumbers = malloc(arrayRows*sizeof(int*)); for (i = 0; i < arrayRows; i++) { someNumbers[i] = malloc(arrayColumns*sizeof(int)); } Зрозуміло, що це фактично створює одновимірний масив покажчиків на купу окремих одновимірних масивів цілих чисел, і "Система" може …

3
Чому GCC генерує такі кардинально різні збірки майже для одного і того ж коду С?
Під час написання оптимізованої ftolфункції я виявив дуже дивну поведінку GCC 4.6.1. Дозвольте спочатку показати вам код (для наочності я позначив відмінності): fast_trunc_one, C: int fast_trunc_one(int i) { int mantissa, exponent, sign, r; mantissa = (i & 0x07fffff) | 0x800000; exponent = 150 - ((i >> 23) & 0xff); sign …

8
Що робить системний дзвінок brk ()?
Відповідно до посібника програмістів Linux: brk () та sbrk () змінюють місце перерви в програмі, що визначає кінець сегмента даних процесу. Що тут означає сегмент даних? Це просто сегмент даних або дані, BSS та купа разом? Згідно з wiki: Іноді ділянки даних, BSS та купи купу називають «сегментом даних». Я …
184 c  linux  unix  memory-management  brk 

16
C читайте файл за рядком
Я написав цю функцію, щоб прочитати рядок з файлу: const char *readLine(FILE *file) { if (file == NULL) { printf("Error: file pointer is null."); exit(1); } int maximumLineLength = 128; char *lineBuffer = (char *)malloc(sizeof(char) * maximumLineLength); if (lineBuffer == NULL) { printf("Error allocating memory for line buffer."); exit(1); } …
184 c  file-io  line  std 


8
Перевантаження макросу за кількістю аргументів
У мене є два макроси FOO2і FOO3: #define FOO2(x,y) ... #define FOO3(x,y,z) ... Я хочу визначити новий макрос FOOтак: #define FOO(x,y) FOO2(x,y) #define FOO(x,y,z) FOO3(x,y,z) Але це не працює, оскільки макроси не перевантажують кількість аргументів. Без зміни FOO2і FOO3, є якийсь - то спосіб визначити макрос FOO( з використанням __VA_ARGS__або …
183 c  macros  c-preprocessor 

22
Чи вбудована мова монтажу вбудована повільніше, ніж рідний код C ++?
Я спробував порівняти продуктивність вбудованої мови складання та коду C ++, тому я написав функцію, яка додає два масиви розміром 2000 за 100000 разів. Ось код: #define TIMES 100000 void calcuC(int *x,int *y,int length) { for(int i = 0; i < TIMES; i++) { for(int j = 0; j < …
183 c++  c  performance  assembly 

2
Реальне використання ключового слова "обмежити" C99?
Я переглядав деяку документацію та питання / відповіді і бачив, як це згадується. Я прочитав короткий опис, заявивши, що в основному це буде обіцянка програміста, що вказівник не буде використовуватися для вказівки деінде. Чи може хтось запропонувати реалістичні випадки, коли варто реально використовувати це?
183 c  gcc  c99  restrict-qualifier 


10
Чому для змінних функцій pthreads потрібна mutex?
Я читаю далі pthread.h; функції, пов'язані зі змінною умови (як pthread_cond_wait(3)), потребують mutex як аргумент. Чому? Наскільки я можу сказати, я буду створювати мютекс просто для використання в якості аргументу? Що це мутекс?

8
Як правильно порівнювати рядки?
Я намагаюся отримати програму, щоб дозволити користувачеві ввести слово чи символ, зберегти його та потім надрукувати, поки користувач не введе його знову, вийшовши з програми. Мій код виглядає приблизно так: #include <stdio.h> int main() { char input[40]; char check[40]; int i=0; printf("Hello!\nPlease enter a word or character:\n"); gets(input); printf("I will …
182 c  string  strcmp 

6
Як визначити та використовувати ENUM в Objective-C?
Я оголосив enum у моєму файлі реалізації, як показано нижче, і оголосив змінну цього типу в моєму інтерфейсі як PlayerState thePlayerState; і використовував змінну в своїх методах. Але я отримую помилки, вказуючи, що це незадекларовано. Як правильно оголосити та використовувати змінну типу PlayerState у своїх методах ?: У файлі .m …
180 iphone  objective-c  c 

16
Де зберігаються статичні змінні в C і C ++?
У якому сегменті (.BSS, .DATA, інших) виконуваного файлу зберігаються статичні змінні, щоб вони не мали зіткнення імен? Наприклад: foo.c: bar.c: static int foo = 1; static int foo = 10; void fooTest() { void barTest() { static int bar = 2; static int bar = 20; foo++; foo++; bar++; bar++; …



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