c- все статьи тега ➜ страница 12
C / C++ номер строки
в целях отладки, я могу получить номер строки C/C++ компиляторы? (стандартный способ или конкретные способы для определенных компиляторов) Эл.г if(!Logical) printf("Not logical value at line number %d n",LineNumber); // How to get LineNumber without writing it by my hand?(dynamic compilation) ...
Компиляторы создают лучший код для циклов do-while по сравнению с другими типами циклов?
есть комментарий библиотека сжатия zlib (который используется в проекте Chromium среди многих других), что означает, что цикл do-while в C генерирует "лучший" код на большинстве компиляторов. Вот фрагмент кода, где он появляется. do { } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && scan < stre ...
Это "инлайн", без "статического" или "Экстерн" когда-нибудь полезны в C99?
когда я пытаюсь построить этот код inline void f() {} int main() { f(); } С помощью командной строки gcc -std=c99 -o a a.c я получаю ошибку компоновщика (неопределенная ссылка на f). Ошибка исчезает, если я использую static inline или просто inline, или если я компиляции с -O (таким образом, функция фактически встроена). такое поведение, по-видимому, определено в пункте 6.7.4 (6) стандарта C99: если все объявления области действия файла для a функция в блоке перевода включает в ...
Как рассчитать загрузку процессора процесса PID в Linux из C?
Я хочу программно [в C] вычислить использование ЦП % для данного идентификатора процесса в Linux. Как мы можем получить использование процессора в реальном времени % для данного процесса? чтобы было еще яснее: Я должен быть в состоянии определить использование ЦП для предоставленного processid или процесса. процесс не обязательно должен быть дочерним процессом. Я хочу решение на языке' C'. ...
DESTDIR и префикс make
Я пытаюсь сделать установку программного обеспечения в определенный каталог. Я нашел несколько способов, но не уверен, в чем разница между ними. ./configure --prefix=*** make install --prefix=*** make install DESTDIR=*** make install prefix=*** Я запутался в функциях этих четырех. Достигают ли они той же цели? ...
Как предотвратить оптимизацию gcc некоторых операторов в C?
чтобы сделать страницу грязной (включение грязного бита в записи таблицы страниц), я касаюсь первых байтов страницы следующим образом: pageptr[0] = pageptr[0]; но на практике gcc будет игнорировать заявление о ликвидации мертвого хранилища. Чтобы предотвратить оптимизацию gcc, я переписываю заявление следующим образом: volatile int tmp; tmp = pageptr[0]; pageptr[0] = tmp; кажется, трюк работает, но несколько некрасиво. Я хотел бы знать, есть ли какие-либо директивы или синтаксис, который и ...
разница между #if defined (WIN32) и #ifdef (WIN32)
я компилирую свою программу, которая будет работать на linux gcc 4.4.1 C99. Я просто помещал свой #defines, чтобы отделить код, который будет скомпилирован на windows или linux. Однако, я получил эту ошибку. error: macro names must be identifiers. используя этот код #ifdef(WIN32) /* Do windows stuff #elif(UNIX) /* Do linux stuff */ #endif однако, когда я изменил это ошибка была исправлена: #if defined(WIN32) /* Do windows stuff #elif(UNIX) /* Do linux stuff */ #endif мне просто интере ...
печать стека вызовов на языке C или c++
есть ли способ сбросить стек вызовов в запущенном процессе в C или c++ каждый раз, когда вызывается определенная функция? Что я имею в виду что-то вроде этого: void foo() { print_stack_trace(); // foo's body return } здесь print_stack_trace работает аналогично caller в Perl. или что-то вроде этого: int main (void) { // will print out debug info every time foo() is called register_stack_trace_function(foo); // etc... } здесь register_stack_trace_function помещает ...
С/C++ максимальный размер стека программы
Я хочу сделать DFS на массиве 100 X 100. (Скажем, элементы массива представляют узлы графа) поэтому, предполагая наихудший случай, глубина рекурсивных вызовов функций может доходить до 10000 с каждым вызовом, занимающим до 20 байт. Так это осуществимые средства есть ли возможность stackoverflow? каков максимальный размер стека в C / C++? пожалуйста, укажите для gcc для обоих 1) cygwin на Windows 2) Unix Что такое общие ограничения? ...
Как передать аргумент командной строки при запуске GDB в Linux?
Я должен отладить программу, которая имеет ошибки в нем как часть моего задания. Однако я должен сначала передать аргументы командной строки, чтобы решить эту проблему. Я: gdb -tui InsertionSortWithErrors , который работает, но после этого я не знаю, как передать аргументы. Я использовал gdb -help и это говорит что-то про --args который я также пытался, и это не сработало. Я хочу иметь возможность получить отладчик+графический интерфейс и передать аргументы командной строки. ...
В C/C++ каков самый простой способ изменить порядок битов в байте?
Хотя существует несколько способов изменить порядок битов в байте, мне любопытно, что является "самым простым"для разработчика. И под обращением я имею в виду: 1110 -> 0111 0010 -> 0100 это похоже, но не дубликат этого вопроса PHP. это похоже, но не дубликат этого вопроса C. Этот вопрос задает самый простой метод для реализации разработчиком. "Лучший алгоритм" связан с производительностью памяти и процессора. ...
Системе, где 1 байт!= 8 бит? [дубликат]
этот вопрос уже есть ответ здесь: Какие платформы имеют что-то другое, чем 8-битный символ? 12 ответов все время я читаю такие предложения, как Не полагайтесь на 1 байт размером 8 бит использовать CHAR_BIT вместо 8 в качестве константы для преобразования между битами и байты и так далее. Какие системы реальной жизни существуют сегодня, где это справедливо? (я не уверен, есть ли различия между ...
Можно ли инициализировать указатель C на NULL?
я писал такие вещи, как char *x=NULL; исходя из предположения, что char *x=2; создать char указатель на адрес 2. а, в учебник по программированию GNU C он говорит, что int *my_int_ptr = 2; хранит целочисленное значение 2 на любой случайный адрес в my_int_ptr когда оно выделяется. это, казалось бы, означает, что мой собственный char *x=NULL присваивает любое значение NULL бросил в char это какой-то случайный адрес в памяти. пока #include <stdlib.h> #include <stdio.h> i ...
Перечислимые константы ведут себя по-разному в C и C++
почему это: #include <stdio.h> #include <limits.h> #include <inttypes.h> int main() { enum en_e { en_e_foo, en_e_bar = UINT64_MAX, }; enum en_e e = en_e_foo; printf("%zun", sizeof en_e_foo); printf("%zun", sizeof en_e_bar); printf("%zun", sizeof e); } print 4 8 8 в C и 8 8 8 в C++ (на платформе с 4 байтами ints)? у меня сложилось впечатление, что UINT64_MAX назначение заставило бы все константы перечислений по крайней мере 64 бит ...
Что означают квадратные скобки при инициализации массива в C?
static uint8_t togglecode[256] = { [0x3A] CAPSLOCK, [0x45] NUMLOCK, [0x46] SCROLLLOCK }; что значит [0x3A] здесь? Я только узнал заявления, как int a[2] = {1, 2}; ...
Чтение строки из ввода с пробелом?
Я использую Ubuntu, и я также использую Geany и CodeBlock в качестве моей IDE. То, что я пытаюсь сделать, это прочитать строку (например "Barack Obama") и поместить его в переменную: #include <stdio.h> int main(void) { char name[100]; printf("Enter your name: "); scanf("%s", name); printf("Your Name is: %s", name); return 0; } выход: Enter your name: Barack Obama Your Name is: Barack как я могу заставить программу прочитать название? ...
Указатели функций, замыкания и лямбда
Я только сейчас узнаю о указателях функций, и, когда я читал главу K&R по этому вопросу, первое, что меня поразило, было: "Эй, это похоже на закрытие."Я знал, что это предположение в корне неверно, и после поиска в Интернете я не нашел действительно никакого анализа этого сравнения. Итак, почему указатели функций C-стиля принципиально отличаются от замыканий или лямбд? Насколько я могу судить, это связано с тем, что указатель на функцию по-прежнему указывает на определенную (именованную) ф ...
Python: почему * и ** быстрее, чем / и sqrt()?
при оптимизации моего кода, я понял следующее: >>> from timeit import Timer as T >>> T(lambda : 1234567890 / 4.0).repeat() [0.22256922721862793, 0.20560789108276367, 0.20530295372009277] >>> from __future__ import division >>> T(lambda : 1234567890 / 4).repeat() [0.14969301223754883, 0.14155197143554688, 0.14141488075256348] >>> T(lambda : 1234567890 * 0.25).repeat() [0.13619112968444824, 0.1281130313873291, 0.12830305099487305] а также: >>& ...
Вычесть/добавить значение без переполнения и потери значимости
представьте, что у меня есть два байта без знака b и x. Мне нужно вычислить bsub как b - x и badd как b + x. Тем не менее, я не хочу, чтобы во время этих операций возникал underflow/overflow. Например (псевдокод): b = 3; x = 5; bsub = b - x; // bsub must be 0, not 254 и b = 250; x = 10; badd = b + x; // badd must be 255, not 4 очевидный способ сделать это включает в себя ветвление: bsub = b - min(b, x); badd = b + min(255 - b, x); мне просто интересно, есть ли какие-то лучшие способы сд ...
Макрос против функции в C
Я всегда видел примеры и случаи, когда использование макроса лучше, чем использование функции. может ли кто-нибудь объяснить мне на примере недостаток макроса по сравнению с функцией? ...