Если вы хотите, чтобы структура имела определенный размер с GCC, например, используйте __attribute__((packed))
.
В Windows вы можете установить выравнивание в один байт при использовании cl .exe компилятор с опцией / Zp .
Обычно ЦП получает доступ к данным, который является кратным 4 (или 8), зависящей от платформы, а также от компилятор.
Итак, это вопрос выравнивания в основном.
У вас должны быть веские причины для его изменения.
Один из проектов в моей компании делает точно это. Мы используем платформу модульного теста под названием CXXTest (http://cxxtest.sourceforge.net/guide.html). Нам действительно нравится эта платформа за C++, потому что это только требует, чтобы Вы записали заголовочный файл, который содержит Ваши модульные тесты..CPP файлы создаются сценарием (и Python и сценарии Perl, обеспечиваются).
Мы интегрируемся с Visual Studio путем обеспечения шага сборки сообщения, который создает модульные тесты (если им нужно здание), и затем выполняет их. Вывод (показывая, что передало и что перестало работать) отображен в окне вывода - Вы никогда не должны оставлять IDE.
Я использую Среду тестирования Повышения. Я склонен разделять свой код на .lib файлы и буду иметь отдельный консольный режим тестовым проектом EXE для каждого. Когда тестовый проект создается, он использует 'Этап сборки сообщения' для запуска себя, таким образом запуская тесты. Вы могли сделать каждый тестовый проект зависимостью Вашего главного приложения так, чтобы каждый раз это создало, все тесты запущены сначала, но это может быть трудоемким. Вместо этого я склонен выполнять тестовые проекты вручную по мере необходимости, но моя автоматизированная ночная система сборки выполнит все тестовые проекты как само собой разумеющееся (я пишу сценарий этого и если какие-либо тесты перестали работать, сбои сборки, и я получаю уведомление по электронной почте).
Больше деталей здесь.
Моя команда в настоящее время использует систему, где у нас есть автоматизированная ночная сборка (который может также быть выполнен из панели инструментов сборки проекта любым), который включает "тестовое" решение для VS2k5. Тестовое решение содержит все проекты модульного теста; один проект модульного теста для каждой "единицы" кода в основном проекте.
Когда автоматизированная сборка работает, она создает основное решение, затем тестовое решение, и наконец выполняет все исполняемые файлы, произведенные тестовым решением (сценарий Perl склеивает это). Результаты компиляции, а также выполнения теста (ВЫХОД _ УСПЕХ, ВЫХОД _ ОТКАЗ) используются для обновления панели инструментов сборки проекта.
Тот ВЫХОД _ прием ОТКАЗА может также быть применен к сделанному на заказ шагу основного проекта: если модульный тест сделанный на заказ ВЫХОД возвратов шага _ ОТКАЗ, то сама сборка перестала работать.
Вот то, что я делаю:
Лично, я не думаю, что среда тестирования (Тест Google, тест Повышения, CppUnit, и т.д.) имеет значение так очень. Большинство в значительной степени функционально эквивалентно.
Я не совсем доволен количеством сгенерированных проектов, но я считаю это Visual Studio проблема GUI, в том смысле, что ее на самом деле довольно полезное, чтобы включать эти проекты как это в целях, таких как отладка.
Я пытался использовать шаги сборки сообщения для запущения тестов, но это, к сожалению, означает, что сборка не была прервана после того, как первый отказ передал.
Можно также использовать управляемый С++ для записи модульных тестов в Visual Studio, с помощью платформы поблочного тестирования, это встроено.
Взгляните на CUnitWin32. Существует пример, включенный также.