c — вопросы с ответами

22 ответа
Мы собираем встроенное приложение C/С++, которое развертывается в экранированном устройстве в среде, облученной ионизирующим излучением . Мы используем GCC и кросс-компиляцию для ARM. При развертывании наше приложение генерирует некоторые ошибочные данные и чаще всего падает, что нам хотелось бы. Ап...
gcc
embedded
fault-tolerance
24 апр. 2016, в 19:34
16 ответов
C и С++ имеют много отличий, и не все допустимые C-коды являются действительными С++-кодом. (Под "действительным" я подразумеваю стандартный код с определенным поведением, т.е. Не специфичный для реализации/ undefined/и т.д.) Есть ли какой-либо сценарий, в котором часть кода, действительная в C и С...
15 окт. 2012, в 01:44
10 ответов
Предположим, что a1, b1, c1 и d1 указывают на память кучи, и мой числовой код имеет следующий основной цикл. const int n = 100000; for (int j = 0; j < n; j++) { a1[j] += b1[j]; c1[j] += d1[j]; } Этот цикл выполняется 10000 раз через другой внешний цикл for. Чтобы ускорить его, я измен...
performance
vectorization
compiler-optimization
17 дек. 2011, в 19:00
4 ответа
Как теоретическая пиковая производительность четырех операций с плавающей запятой (двойная точность) за цикл будет достигнута на современном процессоре Intel x86-64? Насколько я понимаю, для большинства современных процессоров Intel требуется три цикла для SSE add и пять циклов для mul см., например...
optimization
architecture
assembly
05 дек. 2011, в 18:53
10 ответов
Оптимизация SQLite сложна. Производительность вложений в C-приложение может варьироваться от 85 вставок в секунду до более чем 96 000 вставок в секунду! Фон: Мы используем SQLite как часть настольного приложения. У нас есть большое количество данных конфигурации, хранящихся в XML файлах, которые а...
optimization
performance
10 нояб. 2009, в 20:29
15 ответов
Я всегда испортил, как правильно использовать const int*, const int * const и int const *. Существует ли набор правил, определяющих, что вы можете и чего не можете сделать? Я хочу знать все, что нужно делать, и все это не касается присвоений, передачи функций и т.д....
pointers
int
const
17 июль 2009, в 12:38
13 ответов
Что именно помещает extern "C" в код С++? Например: extern "C" { void foo(); }
linkage
name-mangling
extern-c
25 июнь 2009, в 03:17
20 ответов
Каков правильный (наиболее эффективный) способ определения функции main() в C и С++ - int main() или void main() - и почему? Если int main(), то return 1 или return 0? Существует множество дубликатов этого вопроса, в том числе: Каковы действительные сигнатуры для функции C main()? Возвращаемый тип...
return-value
return-type
main
15 окт. 2008, в 11:24
32 ответа
Я писал программу в C++, чтобы найти все решения a b= c, где a, b и c вместе используют все цифры 0-9 ровно один раз. Программа зациклилась на значениях a и b и каждый раз запускала процедуру подсчета цифр для a, b и a b, чтобы проверить, было ли выполнено условие цифр. Однако ложные решения могут...
integer-overflow
14 окт. 2008, в 00:42
11 ответов
Во многих макросах C/С++ я вижу код макроса, завернутый в то, что кажется бессмысленным циклом do while. Вот примеры. #define FOO(X) do { f(X); g(X); } while (0) #define FOO(X) if (1) { f(X); g(X); } else Я не вижу, что делает do while. Почему бы просто не написать это без него? #define FOO(X) f(X)...
c-preprocessor
c++-faq
30 сен. 2008, в 17:21
11 ответов
Почему оператор sizeof возвращает размер, более крупный для структуры, чем общие размеры элементов структуры?
struct
sizeof
c++-faq
23 сен. 2008, в 04:13
23 ответа
Я всегда задавался этим вопросом - почему вы не можете объявлять переменные после метки case в инструкции switch? В С++ вы можете объявить переменные почти везде (и объявить их близкими к первому использованию, очевидно, хорошо), но следующее все равно не будет работать: switch (val) { case VAL:...
switch-statement
18 сен. 2008, в 12:49
9 ответов
У меня когда-то была задача определить следующие параметры производительности внутри запущенного приложения: Доступная общая виртуальная память Используемая виртуальная память Виртуальная память, используемая в настоящее время моим процессом Доступная общая оперативная память Используемая опер...
memory
cpu
15 сен. 2008, в 13:55
27 ответов
Как вы устанавливаете, очищаете и переключаете бит в C/С++?
bit-manipulation
bitwise-operators
07 сен. 2008, в 01:08
32 ответа
В языках программирования C и С++ в чем разница между использованием угловых скобок и использованием кавычек в инструкции include следующим образом? #include <filename> #include "filename"
c-preprocessor
include
header-files
22 авг. 2008, в 03:23

Подробнее о c

C – это язык программирования, который позволяет разработчику программного обеспечения эффективно взаимодействовать с компьютером. C – очень гибкий и адаптируемый язык. С момента своего создания в 1970 году он использовался для самых разных программ, включая микропрограммы для микроконтроллеров, операционных систем, приложений и графического программирования.

C является одним из наиболее широко используемых языков в мире благодаря своей стабильности. Также был изобретен улучшенный язык C под названием C++, но он все еще находится в разработке, и над его определением все еще работают. C++, первоначально известный как C with Classes, добавляет ряд новых возможностей в язык C, наиболее важной из которых является класс. Классы облегчают повторное использование кода посредством объектно-ориентированного проектирования (OOD).

C или C++?

Что лучше, C или C++? Ответ зависит от того, что именно вы хотите получить. C++ отлично работает для вас, например, автоматически вызывая конструкторы и деструкторы для переменных. Эта обработка упрощает некоторые типы программирования, но затрудняет статическую проверку программ. Поэтому вы должны иметь возможность точно сказать, что делает ваша программа, если работаете со встроенными управляющими приложениями. Некоторые люди считают C++ лучшим языком, потому что он делает вещи автоматически, а C – нет. Другие люди считают С лучше по той же причине.

Кроме того, C++ является относительно новым языком, который все еще меняется. Существует гораздо больше кода C, чем кода C++, и этот код C необходимо поддерживать и обновлять. Так что С будет с нами еще очень долго.

Структура программы C

Программа на C может состоять из одного или нескольких файлов, называемых «исходными файлами». Существует тип исходного файла, который используется для определения констант, макросов, прототипов функций, определений типов и т. д., называемый «заголовочный файл». Заголовочные файлы в основном используются для обмена данными между другими исходными файлами. По соглашению имена исходных файлов имеют расширение ".c", а имена заголовочных файлов имеют расширение ".h".

То, как вы вводите операторы C в один или несколько файлов, как вы запускаете компилятор для этих файлов и как запускаете полученный исполняемый файл, полностью зависит от того, какую систему вы используете и какие инструменты у вас есть. Большинство систем имеют своего рода текстовый редактор для создания и изменения файлов.

Как работает C

C разработан как мост между программистом и необработанным компьютером. Идея состоит в том, чтобы позволить программисту организовать программу так, чтобы он мог ее легко понять. Затем компилятор переводит язык в то, что машина уже может использовать.

Компьютерные программы состоят из двух основных частей: данных и инструкций. Компьютер почти не навязывает организацию этим двум частям. В конце концов, компьютеры спроектированы как можно более общими. Программист должен навязывать свою структуру компьютеру, а не наоборот.

Данные в компьютере хранятся в виде серии байтов. C организует эти байты в полезные данные. Декларации данных используются программистом для описания информации, с которой он работает. Например:

говорит C, что мы хотим использовать часть памяти компьютера для хранения целого числа с именем total. Мы позволяем компилятору решить, какие именно байты памяти использовать; это решение – мелкая бухгалтерия, о которой мы не хотим беспокоиться.

Наша общая переменная является простой переменной. Она может содержать только одно целое число и описывать только одну сумму. Последовательность целых чисел может быть организована в массив следующим образом:

Опять же, C будет обрабатывать детали навязывания этой структуры в памяти компьютера. Наконец, есть более сложные типы данных. Например, прямоугольник может иметь ширину, высоту, цвет и шаблон заливки. C позволяет нам организовать эти четыре элемента в одну группу, называемую структурой.

Дело в том, что структуры позволяют программисту упорядочивать данные в соответствии со своими потребностями, независимо от того, насколько они просты или сложны. Перевод этого описания данных в то, что может использовать компьютер, является задачей компилятора, а не программиста.

Но данные – это только одна часть программы. Нам также нужны инструкции. Что касается компьютера, то он ничего не знает о компоновке инструкций. Он знает, что он делает для текущей инструкции и где взять следующую, но не более того.

Высокий уровень программирования

С – язык высокого уровня. Это позволяет нам написать высокоуровневое утверждение вроде:

Компилятор переведет это утверждение в серию загадочных низкоуровневых машинных инструкций. Этот вид оператора называется оператором присваивания. Он используется для вычисления и сохранения значения арифметического выражения.

Мы также можем использовать операторы управления для контроля порядка обработки. Такие операторы, как if и switch, позволяют компьютеру принимать простые решения. Утверждения могут повторяться снова и снова с помощью циклических операторов, таких как while и for.

Группы операторов могут быть обернуты для образования формы. Таким образом, нам нужно всего лишь написать функцию общего назначения, чтобы нарисовать прямоугольник один раз, а затем мы сможем использовать его всякий раз, когда захотим нарисовать новый прямоугольник.

C предоставляет программе богатый набор стандартных функций, которые выполняют общие функции, такие как поиск, сортировка, ввод и вывод.

Набор связанных функций может быть сгруппирован в один исходный файл. Многие исходные файлы могут быть скомпилированы и связаны вместе, чтобы сформировать программу.

Элементы языка

Одна из основных целей языка C состоит в том, чтобы организовать инструкции в повторно используемые компоненты. В конце концов, вы можете писать программы намного быстрее, если вы можете «позаимствовать» большую часть кода из другого места. Группы многократно используемых функций могут быть объединены в библиотеку. Таким образом, когда вам нужна, например, процедура сортировки, вы можете взять стандартную функцию qsort из библиотеки и связать ее с вашей программой.

Декларации данных, структуры и операторы управления, а также другие элементы языка C не предназначены для компьютера. Компьютер не может определить разницу между миллионом случайных байтов и реальной программой. Все элементы языка C предназначены для того, чтобы программист мог четко выражать и систематизировать свои идеи с учетом его потребностей, а не компьютера.

Язык C позволяет вам организовать ваши программы, используя простой, но мощный синтаксис. Комбинируя мощный синтаксис с хорошим стилем программирования, вы можете создавать мощные программы, которые выполняют сложные и замечательные операции, но которые также организованы таким образом, чтобы вам было легко их понять, когда наступит время перемен.

Лучшие IDE для работы с C

Языки программирования высокого уровня по-прежнему остаются основным объектом вычислений. C и C++ – это те уникальные языки, которые должен знать каждый программист, потому что они образуют основу для популярных языков программирования, таких как Python, PHP, Pearl, Java, C# и многих других. Кроме того, эти языки программирования широко используются даже опытными программистами для работы с оборудованием.

Среды IDE – это идеальное место для упрощения программирования, поскольку в них есть встроенные функции, такие как отладка, завершение кода, компиляция, подсветка синтаксиса и т. д.

Основное назначение IDE заключается в предоставлении различных компонентов программных приложений при разработке программы. Что делает их наиболее популярными среди разработчиков, так это их привлекательный пользовательский интерфейс.

Eclipse

Eclipse – одна из самых популярных и мощных сред разработки для C/C ++, которая предлагает утилиту с открытым исходным кодом и функциональность для программистов на C и C++. Новые пользователи могут найти эту IDE как простую в использовании и освоении.

Особенности:

  • Программное обеспечение с открытым исходным кодом, т. е. доступно бесплатно;
  • Поддерживает все платформы: Windows, Linux, Mac OS X;
  • Поддерживает отладку, компиляцию, профилирование, автозаполнение кода и рефакторинг, т. е. Реструктуризация кода может выполняться без изменения внешнего поведения;
  • Имеет отличный графический интерфейс пользователя (GUI) для упорядочивания элементов с помощью функции перетаскивания;
  • Также поддерживает статический анализ кода.

Code::Blocks

Code::Blocks – это бесплатная среда разработки C, C++, созданная для удовлетворения самых требовательных потребностей разработчиков. Это IDE поставляется со всеми функциями, необходимыми для разработки на C и C++.

Особенности:

  • Работает на Windows, Linux и Mac OS X;
  • Разработан, чтобы быть полностью настраиваемым и расширяемым с помощью своих плагинов;
  • Поддерживает компиляцию, отладку, покрытие кода, профилирование, автозаполнение кода;
  • Это браузер классов, т.е. он может визуализировать объектно-ориентированное программирование;
  • Как и Eclipse, он также имеет (GUI) для упорядочивания элементов, используя функцию перетаскивания, а также поддерживает анализ кода.

CodeLite

CodeLite – это еще одна отличная, бесплатная и кроссплатформенная IDE для языков программирования C/C++ , с открытым исходным кодом, которая работает на всех основных платформах (Windows, Linux и OSX).

Особенности:

  • Общая поддержка для компиляторов и ошибок доступна через Buildtab;
  • Поддерживает отладчик следующего поколения;
  • Имеет удивительно быстрый и мощный инструмент завершения кода, основанный на собственном парсере;
  • Также имеется собственный инструмент RAD для создания приложений на основе виджетов;
  • Поддерживает статический анализ кода, рефакторинг, класс браузера и профилирование.
Наверх
Меню