Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420

Препроцессор #pragma

18.10.2016, 10:55. Показов 1213. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как я понимаю, препроцессор #pragma используется, в частности, для выравнивания полей в структурах.
Например, в заголовочном файле перед объявлением структур пишут:
C++
1
#pragma pack(push, 2) //как я понимаю push - это начало, а 2 - шаг выравнивания
После окончания объявления структур пишут:
C++
1
#pragma pack(pop)   //наверное это говорит о окончании выравнивания полей структур по указанным выше параметрам
Но зачем пишут в cpp-файлах #pragma pack(4) ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.10.2016, 10:55
Ответы с готовыми решениями:

препроцессор с++
Задача: Сделать так, что бы при определённом условии класс "знал" что его тестируют в консоли, и выводил в неё всю необходимую...

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

препроцессор, #if
Создаю файл: #define PARAM ABC #if PARAM == ABC #warning warning passed #endif #if PARAM == XXX #error error reached #endif

9
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.10.2016, 17:41
Ну хотят выравнивать с параметром 4.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.10.2016, 19:47
Использование #pragma pack(push,1)... pack(pop)

Не по теме:

Не "препроцессор #pragma", а "директива #pragma"

0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
18.10.2016, 22:14  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Использование #pragma pack(push,1)... pack(pop)
То есть формат использования дерективы #pragma:
C++
1
2
3
4
5
6
#pragma pack(push, 1)
typedef struct
{
  ...
} XXX;
#pragma pack(pop)
А что за такой формат:
C++
1
2
3
4
5
6
7
8
9
#pragma pack(4)
typedef struct
{
  ...
} YYY;
typedef struct
{
  ...
} ZZZ;
Без загрывающей Прагмы.
Это разновидность записи или ошибка?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
18.10.2016, 22:18
Ну посмотри синтаксис. push/pop - это сохранение и восстановление предыдущего значения, т. е. новое действует только в этих границах. А второй вариант устанавливает до следующего изменения.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
19.10.2016, 10:04
Цитата Сообщение от Инженер_3 Посмотреть сообщение
Без загрывающей Прагмы.
Это разновидность записи или ошибка?
Думается, закрывающая прагма неявно присутствует по достижению конца файла. Т.е. #pragma push это как бы "включить режим", а #pragma pop как бы "выключить режим". Но понятия push/pop подразумевают вложенность, а потому это немного сложнее, чем просто включить и выключить

Добавлено через 50 секунд
"Включить" и "выключить" относятся к процессу трансляции файла компилятором, а не к процессу исполнения
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
19.10.2016, 12:52  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
А второй вариант устанавливает до следующего изменения.
Но следующее изменение такое же.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#pragma pack(4)
typedef struct
{
  ...
} YYY;
typedef struct
{
  ...
} ZZZ;
 
#pragma pack(4)
typedef struct
{
  ...
} WWW;
typedef struct
{
  ...
} RRR;
Добавлено через 1 минуту
Или это ошибка - лишний раз написано одно и то же?
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
19.10.2016, 15:05
Цитата Сообщение от Инженер_3 Посмотреть сообщение
препроцессор #pragma используется, в частности, для выравнивания полей в структурах
а еще есть
#pragma once
#pragma warning (disable : 4018 )
e.t.c.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
19.10.2016, 16:39
Цитата Сообщение от Инженер_3 Посмотреть сообщение
Или это ошибка - лишний раз написано одно и то же?
Что ошибочного в том, что попросили два раза "включить" значение 4?
0
3 / 3 / 0
Регистрация: 10.06.2016
Сообщений: 420
19.10.2016, 19:32  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Что ошибочного в том, что попросили два раза "включить" значение 4?
Получается лишняя строка кода. Ведь начинается выравнивание со строки #pragma pack(4), за заканчивается концом файла.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.10.2016, 19:32
Помогаю со студенческими работами здесь

Препроцессор vs текст
Привет. Я баловался с директивами препроцессора и как-то задумал с помощью директивы #include вставить текст в char *. У меня вышло, я...

Препроцессор С++Builder
Напишите программу, которая выводит на экран квадрат Пифагора — таблицу умножения.

Препроцессор,исключительные ситуации
Всем доброго времени суток!) По прочтению изложенного в моей книге материала по искл. ситуациям и операторам препроцессора(? так можно...

Почему не работает препроцессор?
Почему не работает программа? Вроде все сделал правильно. Задание: Создать проект в котором: 1. создать три файла: ( function.h ,...

Почему не рекомендуется использовать препроцессор?
Я сейчас активно пользуюсь #define для упрощения понимания кода. Например, у меня сложная система классов, что бы получить одну...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru