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

39
Почему переключатель не оптимизирован так же, как цепочка, если еще в c / c ++?

Следующая реализация square производит серию операторов cmp / je, как я и ожидал от цепочки if: int square(int num) { if (num == 0){ return 0; } else if (num == 1){ return 1; } else if (num == 2){ return 4; } else if (num == 3){ return 9; } else if (num == 4){ return 16; } else if (num == 5){...

38
Почему эта заявка на разыменование предупреждающего указателя типа зависит от компилятора?

Я читал различные сообщения о переполнении стека RE: ошибка разыменовывающего указателя типа. Насколько я понимаю, ошибка, по сути, является предупреждением компилятора об опасности доступа к объекту через указатель другого типа (хотя, похоже, для этого сделано исключение char*), что является...

36
Невозможно передать символ «#» в качестве аргумента командной строки

Я не могу передать строки, начинающиеся с #аргументов командной строки. Вот простой тест: #include <stdio.h> int main(int argc, char *argv[]) { for (int i = 1; i < argc; i++) printf("%s ", argv[i]); putchar('\n'); return 0; } Если я введу аргументы следующим образом: 2 4 # 5 6 Ценность...

35
Почему я не могу получить доступ к указателю на указатель для массива стека?

Пожалуйста, взгляните на следующий код. Он пытается передать массив как char**функцию: #include <stdio.h> #include <stdlib.h> static void printchar(char **x) { printf("Test: %c\n", (*x)[0]); } int main(int argc, char *argv[]) { char test[256]; char *test2 = malloc(256); test[0] = 'B';...

34
Является ли алгоритм strcasecmp некорректным?

Я пытаюсь переопределить strcasecmpфункцию в C, и я заметил несоответствие в процессе сравнения. От man strcmp Функция strcmp () сравнивает две строки s1 и s2. Локаль не учитывается (сравнение с учетом локали смотрите в strcoll (3)). Он возвращает целое число, меньшее, равное или большее нуля, если...

33
Как работает сравнение указателей в C? Можно ли сравнивать указатели, которые не указывают на один и тот же массив?

В главе 5 K & R (язык программирования C, 2-е издание) я прочитал следующее: Во-первых, указатели могут сравниваться при определенных обстоятельствах. Если pи qуказывают на элементы одного и того же массива, то соотношения нравится ==, !=, <, >=и т.д. работать должным образом. Кажется,...

31
Как правильно преобразовать 2 байта в 16-разрядное целое число со знаком?

В этом ответе , zwol сделал это заявление: Правильный способ преобразования двух байтов данных из внешнего источника в 16-разрядное целое число со знаком - с помощью вспомогательных функций, таких как: #include <stdint.h> int16_t be16_to_cpu_signed(const uint8_t data[static 2]) { uint32_t val...

31
Копируются ли потоки при вызове fork?

Если у меня есть программа, работающая с потоками и вызывающая в системе fork()на основе Unix, скопированы ли потоки? Я знаю, что виртуальная память для текущего процесса копируется 1: 1, чтобы новый процесс порождался. Я знаю, что потоки имеют свой собственный стек в виртуальной памяти процесса....

30
Как называется (…) в C и C ++?

Одним из применений ...является обозначение переменных элементов в C и C ++. Как это называется? Это классифицируется как оператор или что-то еще, когда используется таким образом? Любые другие детали, касающиеся ...? Изменить: я знаю цель .... Я спрашиваю о его названии и классификации, которые, я...

30
Почему я получаю эту ошибку GRPC «ПРЕДУПРЕЖДЕНИЕ: EmulatorService.cpp: 448: Не удается найти файл сертификата» при запуске эмулятора?

Добрый вечер всем, я имею дело с Java и Android Studio всего несколько месяцев, может кто-нибудь помочь мне решить эту ошибку? Это происходит каждый раз, когда запускается эмулятор. Спасибо Эмулятор: сервер GRPC запущен с 127.0.0.1:8554 Эмулятор: эмулятор: ПРЕДУПРЕЖДЕНИЕ: EmulatorService.cpp: 448:...

30
Почему запись постоянно оставляет 4K байтов в буфере?

У меня есть по существу следующий код: int fileWrite(int file, void * pBuffer, size_t size) { size_t bytesWritten = (size_t)write( file, pBuffer, size ) ; if (bytesWritten != size) { return -1; } return 0; } Это работает, если размер составляет 1 ГБ, но когда размер составляет ~ 2 ГБ, он...

28
Почему грамматика BNF в C допускает объявления с пустой последовательностью init-деклараторов?

Просматривая грамматику BNF в C, я подумал, что странно, что производственное правило для объявления выглядит следующим образом (согласно https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of% 20C% 20in% 20Backus-Naur% 20form.htm ): <declaration> ::=...

26
Есть ли в C эквивалент std :: less из C ++?

Недавно я отвечал на вопрос о неопределенном поведении p < qв C, когда pи qесть указатели на разные объекты / массивы. Это заставило меня задуматься: <в этом случае C ++ имеет такое же (неопределенное) поведение , но также предлагает стандартный шаблон библиотеки, std::lessкоторый...

26
Является ли void * function () указателем на функцию или функцию, возвращающую void *?

Я запутался в значении void *function(). Это указатель на функцию или возвращаемую функцию void*? Я всегда использовал его в структурах данных как рекурсивную функцию, возвращающую указатель, но когда я увидел код в многопоточности ( pthread), было одно и то же объявление функции. Теперь я...

26
Как я могу предотвратить угадывание C ++ второго аргумента шаблона?

Я использую библиотеку C ++ ( strf ), которая где-то внутри имеет следующий код: namespace strf { template <typename ForwardIt> inline auto range(ForwardIt begin, ForwardIt end) { /* ... */ } template <typename Range, typename CharT> inline auto range(const Range& range, const...

25
Какова семантика перекрывающихся объектов в C?

Рассмотрим следующую структуру: struct s { int a, b; }; Обычно 1 , эта структура будет иметь размер 8 и выравнивание 4. Что если мы создадим два struct sобъекта (точнее, мы запишем в выделенное хранилище два таких объекта), причем второй объект будет перекрывать первый? char *storage = malloc(3 *...

24
Побитовая операция приводит к неожиданному размеру переменной

контекст Мы переносим код C, который был изначально скомпилирован с использованием 8-битного компилятора C для микроконтроллера PIC. Обычная идиома, которая использовалась для того, чтобы не допустить повторения нуля беззнаковых глобальных переменных (например, счетчиков ошибок), заключается в...

23
Почему функции абсолютного значения в C не принимают константные входные данные?

В C прототипом функции абсолютного значения (которая принимает число с плавающей запятой) является float fabsf( float ); Почему этот прототип не принимает постоянное значение, например так: float fabsf( float const ); fabsf не изменит значение ввода, не так ли? Если у меня есть функция, которая...

23
gcc-10.0.1 специфический сегмент

У меня есть пакет R с скомпилированным кодом C, который довольно долго был относительно стабильным и часто тестировался на широком спектре платформ и компиляторов (windows / osx / debian / fedora gcc / clang). Совсем недавно была добавлена ​​новая платформа для тестирования пакета: Logs from checks...