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

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

4
Чи є void * function () вказівник на функцію або функція, що повертає порожнечу *?
Мене плутає сенс void *function(). Це вказівник на функцію чи функція, що повертається void*? Я завжди використовував це в структурах даних як рекурсивну функцію, що повертає вказівник, але коли я побачив код у багатопотоковому читанні ( pthread), є однакове оголошення функції. Тепер я розгублений, в чому різниця між ними.

3
Чи має еквівалент std :: менше від C ++?
Нещодавно я відповідав на запитання щодо невизначеної поведінки p < qв C pі коли qвказують на різні об'єкти / масиви. Це змусило мене задуматися: C ++ має таку саму (невизначену) поведінку <в цьому випадку, але також пропонує стандартний шаблон бібліотеки, std::lessякий гарантовано повертає те саме, що і <тоді, коли покажчики …

1
Яка семантика об'єктів, що перекриваються в С?
Розглянемо таку структуру: struct s { int a, b; }; Зазвичай 1 , ця структура матиме розмір 8 та вирівнювання 4. Що робити, якщо ми створимо два struct sоб'єкти (точніше, запишемо у виділене сховище два такі об’єкти), причому другий об’єкт перекриє перший? char *storage = malloc(3 * sizeof(struct s)); struct …

5
Послідовна операція призводить до несподіваних змінних розмірів
Контекст Ми переносимо код C, який спочатку був складений за допомогою 8-бітного компілятора С для мікроконтролера PIC. Загальна ідіома, яка використовувалася для того, щоб запобігти непідписаним глобальним змінним (наприклад, лічильникам помилок) перекидання назад на нуль, є наступним: if(~counter) counter++; Бітовий оператор тут інвертує всі біти, і твердження вірно, лише якщо …

2
Швидше випробування на роздільність, ніж оператор%?
Я помітив цікаву річ на своєму комп’ютері. * Рукописний тест на роздільність значно швидше, ніж %оператор. Розглянемо мінімальний приклад: * AMD Ryzen Threadripper 2990WX, GCC 9.2.0 static int divisible_ui_p(unsigned int m, unsigned int a) { if (m <= a) { if (m == a) { return 1; } return 0; …

1
gcc-10.0.1
У мене є пакет R зі скомпільованим кодом C, який був досить стабільним протягом досить тривалого часу і часто перевіряється на широкому спектрі платформ і компіляторів (windows / osx / debian / fedora gcc / clang). Зовсім недавно була додана нова платформа для тестування пакету: Logs from checks with gcc …

4
Чому функції абсолютного значення в С не приймають введення const?
В C прототипом функції абсолютного значення (що приймає поплавок) є float fabsf( float ); Чому цей прототип не приймає постійне значення, як це: float fabsf( float const ); fabsf не змінить значення вводу, чи не так? Якщо у мене є функція, яка приймає вхід і викликає fabsf, чи змушений я …

9
'\ 0' і printf () в C
У вступному курсі C я дізнався, що під час зберігання рядків зберігаються з нульовим символом \0в кінці. Але що робити, якщо я хотів надрукувати рядок, скажіть, printf("hello")хоча я виявив, що це не закінчується \0наступним твердженням printf("%d", printf("hello")); Output: 5 але це здається непослідовним, наскільки я знаю, що такі змінні, як …
21 c  printf  stdout  c-strings 



3
статична адреса пам'яті int arr [10] завжди закінчується 060
У мене є програма змінного струму, яка виглядає приблизно так main.c #include <stdio.h> #define SOME_VAR 10 static int heap[SOME_VAR]; int main(void) { printf("%p", heap); return 0; } і виводить це, коли я кілька разів запускаю компільовану програму 0x58aa7c49060 0x56555644060 0x2f8d1f8e060 0x92f58280060 0x59551c53060 0xd474ed6e060 0x767c4561060 0xf515aeda060 0xbe62367e060 Чому це завжди закінчується …
17 c  arrays  memory 

1
Чому адреса __libc_start_main завжди однакова всередині GDB, навіть якщо ввімкнено ASLR?
Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6 (gdb) r The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /home/firstlove/projects/org-ioslide/example/a.out Breakpoint 1, 0x00007ffff7de8060 in __libc_start_main () from /usr/lib/libc.so.6 (gdb) r The program being debugged has been started already. Start it …
16 c  linux  gdb  libc  aslr 

3
Чому розмір типу даних відрізняється, коли значення безпосередньо передається оператору sizeof?
#include <stdio.h> int main() { char a = 'A'; int b = 90000; float c = 6.5; printf("%d ",sizeof(6.5)); printf("%d ",sizeof(90000)); printf("%d ",sizeof('A')); printf("%d ",sizeof(c)); printf("%d ",sizeof(b)); printf("%d",sizeof(a)); return 0; } Вихід: 8 4 4 4 4 1 Чому вихід відрізняється для одних і тих же значень?
15 c  int  sizeof 

1
Чому np.dot неточний? (n-затемнені масиви)
Припустимо, ми беремо np.dotдва 'float32'2D масиви: res = np.dot(a, b) # see CASE 1 print(list(res[0])) # list shows more digits [-0.90448684, -1.1708503, 0.907136, 3.5594249, 1.1374011, -1.3826287] Числа. Крім того, вони можуть змінювати: СЛУЧАЙ 1 : скибочкаa np.random.seed(1) a = np.random.randn(9, 6).astype('float32') b = np.random.randn(6, 6).astype('float32') for i in range(1, len(a)): …
15 python  c  arrays  numpy  precision 

3
Виклик функції з покажчиком на non-const і вказівником на const аргументи однієї адреси
Я хочу написати функцію, яка вводить масив даних і виводить інший масив даних за допомогою покажчиків. Мені цікаво, що це результат, якщо обидва srcі dstвказали на одну і ту ж адресу, тому що я знаю, що компілятор може оптимізувати const. Це невизначена поведінка? (Я позначив як C, так і C …

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