msv c Прагма предупреждение об исключении «по умолчанию» в cpp файле - PullRequest
1 голос
/ 08 января 2020

У меня есть pragma warning (disable : xxx) в cpp файлах (не заголовках):

теперь, если мы опускаем pragma warning (default : xxx) в том же файле cpp, это предупреждение остается отключенным во всех cpp файлах в проекте или только в этом cpp файле?

также, если мы компилируем несколько проектов, влияет ли это отключенное предупреждение на все проекты? предполагая, что прагма в файле cpp только не в заголовках.

например, у меня есть:

#ifdef NDEBUG   // In release build using CrtDebug functions has no effect!
#define CRT_DBG_REPORT(...) 0
#pragma warning (disable : 6326)    // Potential comparison of a constant with another constant
#pragma warning (disable : 26814)   // The const variable can be computed at compile time
#pragma warning (disable : 26477)   // Use nullptr rather than 0 or NULL
#pragma warning (disable : 4127)    // conditional expression is constant
#pragma warning (disable : 4100)    // unreferenced formal parameter
#else
#define CRT_DBG_REPORT _CrtDbgReportW
#endif // NDEBUG

Я хотел бы опустить установку обратно на «default», но убедитесь, что она отключает только предупреждения для этого cpp файла.

edit

благодаря предложению раздела комментариев ...

Если мы включим Unity build, что такое поведение "undefauled" (только отключено) cpp pragmas? Project properties -> Advanced -> Unity.

1 Ответ

3 голосов
/ 08 января 2020

Если предупреждения отключены в файле cpp, они будут влиять только на строки под прагмой (они не будут влиять на другие блоки компиляции). Сборки Unity, вероятно, вызовут проблему, хотя (по-видимому, сейчас не могу это проверить) .

Вообще говоря, если вы включаете / отключаете предупреждения с помощью прагм, это, вероятно, путь к go:

#define PUSH_DISABLE_WARNINGS \
  __pragma(warning(push)) \
  __pragma(warning(disable : 6326)) \
  __pragma(warning(disable : 26814)) \
  __pragma(warning(disable : 26477)) \
  __pragma(warning(disable : 4127)) \
  __pragma(warning(disable : 4100))

#define POP_DISABLE_WARNINGS \
  __pragma(warning(pop))

, а затем позже ...

PUSH_DISABLE_WARNINGS

/* warnings will only be disabled here */

POP_DISABLE_WARNINGS
...