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

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

1
Что упрощает синтаксический анализ Java, чем C?
Я знаком с тем фактом, что грамматики C и C ++ контекстно-зависимы , и, в частности, вам понадобится «взлом лексера» в C. С другой стороны, у меня сложилось впечатление, что вы можете анализировать Java только с 2 токена предвидения, несмотря на значительное сходство между двумя языками. Что бы вам нужно …
90 java  c  parsing  grammar 

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

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[]) { printf("Hello, …
90 c  gcc  stdio 

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

4
Почему memmove быстрее, чем memcpy?
Я исследую «горячие точки» производительности в приложении, которое 50% времени проводит в memmove (3). Приложение вставляет миллионы 4-байтовых целых чисел в отсортированные массивы и использует memmove для смещения данных «вправо», чтобы освободить место для вставленного значения. Я ожидал, что копирование памяти происходит очень быстро, и был удивлен, что в memmove …
90 c++  c  performance  memory 

12
C Управление памятью
Я всегда слышал, что в C нужно действительно следить за тем, как вы управляете памятью. И я все еще начинаю изучать C, но до сих пор мне вообще не приходилось выполнять какие-либо действия, связанные с управлением памятью ... Я всегда представлял, что мне придется выпускать переменные и делать разные уродливые …
90 c  memory 


6
Действительно ли парсеры GCC и Clang написаны от руки?
Похоже, что GCC и LLVM-Clang используют рукописные рекурсивные анализаторы спуска , а не машинно-сгенерированные, восходящие парсеры на основе Bison-Flex. Может ли кто-нибудь здесь подтвердить, что это так? И если да, то почему основные среды компиляторов используют рукописные синтаксические анализаторы? Обновление : интересный блог на эту тему здесь

9
Почему не работает a +++++ b?
int main () { int a = 5,b = 2; printf("%d",a+++++b); return 0; } Этот код дает следующую ошибку: ошибка: lvalue требуется как операнд приращения Но если я поставлю пробелы a++ +и ++b, тогда все будет нормально. int main () { int a = 5,b = 2; printf("%d",a++ + ++b); …
89 c  lvalue 

7
Как ядро ​​Linux может скомпилироваться?
Я не совсем понимаю процесс компиляции ядра Linux, когда устанавливаю систему Linux на свой компьютер. Вот что меня смутило: Ядро написано на C, однако как ядро ​​было скомпилировано без установленного компилятора? Если компилятор C установлен на моем компьютере до компиляции ядра, как компилятор может быть скомпилирован без установленного компилятора? Пару …

3
Что такое правило «как если бы»?
Как сказано в названии, Что такое правило «как если бы»? Типичный ответ, который можно получить: Правило, разрешающее любые преобразования кода, которые не изменяют наблюдаемое поведение программы. Время от времени мы получаем поведение от определенных реализаций, которые приписываются этому правилу. Много раз ошибочно. Итак, что же это за правило. В стандарте …
89 c++  c  optimization  c++-faq  as-if 

4
GDB: прервать, если переменная равна значению
Мне нравится заставлять GDB устанавливать точку останова, когда переменная равна некоторому установленному мной значению, я пробовал этот пример: #include <stdio.h> main() { int i = 0; for(i=0;i<7;++i) printf("%d\n", i); return 0; } Вывод из GDB: (gdb) break if ((int)i == 5) No default breakpoint address now. (gdb) run Starting program: …
89 c  gdb 

4
Является ли определение «изменчивого» таким изменчивым, или у GCC есть некоторые стандартные проблемы совместимости?
Мне нужна функция, которая (например, SecureZeroMemory из WinAPI) всегда обнуляет память и не оптимизируется, даже если компилятор считает, что после этого к памяти больше не будет доступа. Похоже, идеальный кандидат на волатильность. Но у меня возникли проблемы с тем, чтобы заставить это работать с GCC. Вот пример функции: void volatileZeroMemory(volatile …
89 c++  c  gcc  standards 

3
Threadsafe vs повторно въезжающий
Недавно я задал вопрос с заголовком «Является ли malloc потокобезопасным?» , и внутри я спросил: «Маллок возвращается?» У меня создалось впечатление, что все реентерабельные являются потокобезопасными. Это предположение неверно?

7
Приведение указателя функции к другому типу
Скажем, у меня есть функция, которая принимает void (*)(void*)указатель на функцию для использования в качестве обратного вызова: void do_stuff(void (*callback_fp)(void*), void* callback_arg); Теперь, если у меня есть такая функция: void my_callback_function(struct my_struct* arg); Могу ли я сделать это безопасно? do_stuff((void (*)(void*)) &my_callback_function, NULL); Я рассмотрел этот вопрос, и я просмотрел …

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