Как запретить программе на C или C ++ использовать функции CRT?

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

Я хочу, чтобы только основной слой использовал функции CRT.

На прикладном уровне, если используется какая-либо функция CRT, она не должна компилироваться.

Есть ли способ добиться этого?
Например, прямой вызов free / malloc не должен выполняться на прикладном уровне.

Один из способов, который я подумал, #define все функции CRT к некоторой ошибке, так что прикладной уровень не может использовать прямые вызовы CRT (прикладной уровень включает заголовочные файлы основного уровня).

3

Решение

Вам не нужно # определять все функции в CRT. Достаточно определить одну из функций, объявленных в заголовке, чтобы вызвать ошибку компиляции.

Кроме того, посмотрите на заголовки CRT, большинство из них полагаются на какую-то конструкцию такого рода:

    #ifndef "some unique id"#define "some unique id"/* header body */
#endif

Если вы определите этот уникальный идентификатор, вы фактически заставите заголовок не включаться, поэтому при попытке использовать функцию, объявленную в этом заголовке, произойдет ошибка компиляции.

1

Другие решения

Предполагая, что все ваши проекты являются родными C или C ++, я считаю, что удаления ссылок на двоичные файлы CRT Windows должно быть достаточно. Если кто-то попытается использовать их, они получат ошибки ссылки.

Для DLL откройте свойства проекта (из Visual Studio), затем перейдите к Configuration Properties->Linker->Input и установить Ignore All Default Libraries в Yes (/NODEFAULTLIB), Прямо над этим установите Additional Dependencies только библиотеки из вашего решения, которые вам нужны.

Для статической библиотеки перейдите в Librarian->General и сделай то же самое.

1

По вопросам рекламы [email protected]