Как сделать так, чтобы всегда включалось одинаковое количество файлов заголовков сброса? - PullRequest
0 голосов
/ 07 января 2020

У меня есть пять файлов заголовков pshpack1.h , pshpack2.h , pshpack4.h , pshpack8.h и poppack.h . Первые четыре заголовка устанавливают упаковку на 1, 2, 4 и 8 соответственно, используя #pragma pack pu sh. Заголовочный файл poppack сбрасывает значение упаковки в предыдущее значение с помощью #pragma pack pop.

У меня есть несколько заголовочных файлов с указанием проекта c, в которые мы включаем эти заголовки pshpack и poppack в зависимости от необходимости. Когда я компилирую их с помощью компилятора Clang 9.0, я получаю предупреждения, как показано ниже

error: the current #pragma pack alignment value is modified in the included file

Clang 9.0 ожидает, что заголовочный файл не изменит значения упаковки. Заголовочные файлы должны устанавливать и сбрасывать значения сами по себе. Но в моем проекте указаны заголовочные файлы c, куда бы я ни включил pshpack, я также включил poppack. Поэтому я уверен, что каждый пакет pu sh сопровождается поп-пакетом. Так что я хочу игнорировать эти предупреждения для включений, где я уверен, что для каждого pshpack существует poppack. Поэтому я изменяю свои заголовки, как показано ниже:

//warning ignore code - start
#include "pshpack1.h"
//warning ignore code - end

###some project specific code###

//warning ingore code - start
#include "poppack.h"
//warning ingore code - end

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

В итоге, как я могу защитить свои заголовочные файлы так, чтобы они всегда включали одинаковые номера заголовочных файлов pshpack и poppack?

...