Вопросы с тегом «c»

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

1
Почему время, сообщаемое функцией time (), иногда составляет 1 секунду после секундного компонента timespec_get () в коде C?
Следующий фрагмент кода: struct timespec ts; for (int x = 0; x < 100000000; x++) { timespec_get(&ts, TIME_UTC); long cTime = (long) time(NULL); if (cTime != ts.tv_sec && ts.tv_nsec < 3000000) { printf("cTime: %ld\n", cTime); printf("ts.tv_sec: %ld\n", ts.tv_sec); printf("ts.tv_nsec: %ld\n", ts.tv_nsec); } } производит этот вывод: ... cTime: 1579268059 ts.tv_sec: …
12 c  time  posix  timespec 

4
Почему эта функция возвращает правильную длину строки? (Увеличение указателя на символ)
Это функция, которая считает количество символов в строке: int str_len(const char* s) { int i = 0; while(*(s++)) { i++; } return i; } Почему это возвращает правильную длину? Допустим, я вызываю эту функцию с простой строкой "a". Затем sувеличивается в цикле while, поэтому значения sи iравны 0.
12 c  while-loop  strlen  c89 

1
Зачем определять макрос для функции с тем же именем?
Я нашел код ниже в https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/atomic.h static __always_inline bool arch_atomic_sub_and_test(int i, atomic_t *v) { return GEN_BINARY_RMWcc(LOCK_PREFIX "subl", v->counter, e, "er", i); } #define arch_atomic_sub_and_test arch_atomic_sub_and_test что на #defineсамом деле делает? Когда это необходимо?
12 c  linux-kernel 

3
Гарантирует ли «volatile» что-либо вообще в переносимом коде C для многоядерных систем?
После глядя на кучу из других вопросов и их ответов , я получаю впечатление , что не существует никакого широко распространенного соглашения о том , что «летучий» ключевое слово в C означает точно. Даже сам стандарт не достаточно ясен для того, чтобы все могли понять, что это значит . Среди …

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

1
GCC реализация угловых скобок включает в себя. Почему это должно быть так, как описано ниже?
Этот документ в разделе 2.6 «Вычисленные включения» имеет следующий параграф: Если строка расширяется до потока токенов, начинающегося с токена <и включающего токен>, то токены между <и первым> объединяются, чтобы сформировать имя файла для включения. Любой пробел между токенами сводится к одному пробелу; тогда любой пробел после начального <сохраняется, но завершающий …
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 идентичны, за исключением того, …
10 c  gcc  assembly  clang  x86-64 

3
Несовместимое усечение беззнаковых целочисленных выражений битового поля между C ++ и C в разных компиляторах
Изменить 2 : Я отлаживал странный тестовый сбой, когда функция, ранее находившаяся в исходном файле C ++, но дословно перемещенная в файл C, начала возвращать неверные результаты. MVE ниже позволяет воспроизвести проблему с GCC. Однако, когда я по прихоти скомпилировал пример с Clang (а позже с VS), я получил другой …

1
Значение char, установленное в CHAR_MAX, гарантированно обернуто в CHAR_MIN?
Мой код: #include <stdio.h> #include <limits.h> int main() { char c = CHAR_MAX; c += 1; printf("CHAR_MIN=%d CHAR_MAX=%d c=%d (%c)\n", CHAR_MIN, CHAR_MAX, c, c); } Вывод: CHAR_MIN=-128 CHAR_MAX=127 c=-128 () Мы видим, что когда мы увеличиваем charпеременную, установленную в CHAR_MAX, она оборачивается в CHAR_MIN. Это поведение гарантировано? Или это будет …


1
C11 Atomic Acquire / Release и x86_64 отсутствие согласованности загрузки / хранения?
Я борюсь с разделом 5.1.2.4 стандарта C11, в частности с семантикой Release / Acquire. Я отмечаю, что https://preshing.com/20120913/acquire-and-release-semantics/ (среди прочих) заявляет, что: ... Семантика релиза предотвращает переупорядочение памяти релиз-релиза с любой предшествующей ему операцией чтения или записи в программном порядке. Итак, для следующего: typedef struct test_struct { _Atomic(bool) ready ; …

3
Каковы особенности определения строки в C?
Я должен ответить на домашнее задание для одного из моих занятий. В частности, я должен сказать, считаются ли определенные массивы в C строками или нет. Основываясь на этой статье ( https://www.geeksforgeeks.org/strings-in-c-2/ ), я знаю, что строки - это массив символов с нулевым терминатором в конце. Мое основное зависание является частью …

2
Действительно ли L2 HW prefetcher действительно полезен?
Я нахожусь на Whiskey Lake i7-8565U и анализирую счетчики перфектов и время для копирования 512 КБ данных (в два раза больше, чем размер кэша L2), и столкнулся с некоторым недоразумением относительно работы устройства предварительной выборки L2 HW. В Руководстве Intel Vol.4 MSR есть MSR, 0x1A4бит 0 которого предназначен для управления …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.