Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора2.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
90.62 Кб
Скачать

21. Приоритет операций и скобочная структура выражений

Приоритеты и порядок вычислений операций языка С влияют на способ группирования и вычисления операндов в выражениях. Приоритет операций имеет смысл только при наличии нескольких операций с разными приоритетами. Выражение с наивысшим приоритетом вычисляется первым.Ниже приведены операции в порядке убывания приоритета. Операции, приведённые на одной строчке, имеют одинаковый приоритет. Операции, помеченные как R→L, имеют правую ассоциативность (то есть при сочетании равноприоритетных операций без скобок они вычисляются справа налево; при этом порядок вычисления аргументов большинства операций не специфицирован и зависит от реализаций):

Постфиксные операции

[] () . -> ++ --

Унарные операции (R→L)

++ -- & * + - ~ ! sizeof (type)

Мультипликативные

* / %

Аддитивные

+ -

Сдвиговые

<< >>

Операции сравнения

< > <= >=

Операции проверки равенства

== !=

Побитовые

& ^ |

Логические

&& ||

Условная операция (R→L)

?:

Операции присваивания (R→L)

= *= /= %= += -= <<= >>= &= ^= |=

Последовательное вычисление

,

22. Структура программы на си

Программа на C++ обычно состоит из большого числа исходных файлов, каждый из которых содержит описания типов, функций, переменных и констант. Чтобы имя можно было использовать в разных исходных файлах для ссылки на один и тот же объект, оно должно быть описано как внешнее. Например: extern double sqrt(double); extern instream cin; Самый обычный способ обеспечить согласованность исходных файлов - это поместить такие описания в отдельные файлы, называемые заголовочными (или хэдер) файлами, а затем включить, то есть скопировать, эти заголовочные файлы во все файлы, где нужны эти описания. Например, если описание sqrt хранится в заголовочном файле для стандартных математических функций math.h, и вы хотите извлечь квадратный корень из 4, можно написать: #include //... x = sqrt(4); Поскольку обычные заголовочные файлы включаются во многие исходные файлы, они не содержат описаний, которые не должны повторяться. Например, тела функций даются только для inline-подставляемых функций  и инициализаторы даются только для констант. За исключением этих случаев, заголовочный файл является хранилищем информации о типах. Он обеспечивает интерфейс между отдельно компилируемыми частями программы. В команде включения include имя файла, заключенное в угловые скобки, например , относится к файлу с этим именем в стандартном каталоге (часто это /usr/include/CC); на файлы, находящиеся в каких-либо других местах ссылаются с помощью имен, заключенных в двойные кавычки. Например: #include \"math1.h\" #include \"/usr/bs/math2.h\" включит math1.h из текущего пользовательского каталога, а math2.h из каталога /usr/bs. Здесь приводится очень маленький законченный пример программы, в котором строка определяется в одном файле, а ее печать производится в другом. Файл header.h определяет необходимые типы: // header.h extern char* prog_name; extern void f(); В файле main.c находится главная программа:

// main.c #include \"header.h\" char* prog_name = \"дурацкий, но полный\"; main() { f(); }