Нежелательные предупреждения sal.h - PullRequest
4 голосов
/ 21 октября 2009

Я пытаюсь использовать VS 2008 для компиляции кода на Си. Я настроил проект для использования стандарта ANSI C без каких-либо языковых расширений. Я также поднял уровень предупреждения с 3 до 4.

При создании проекта я всегда получаю это предупреждение:

c:\program files\microsoft visual studio 9.0\vc\include\sal.h(108) : warning C4001: nonstandard extension 'single line comment' was used

Я понимаю предупреждение, но как мне от него избавиться? Я не нигде не включал sal.h. Также при создании решения я выбрал консольное приложение Win32 и установил флажок «Пустой проект».

EDIT: Я включил / showInclude, как это было предложено, но это не очень помогает, поскольку не показывает, что и что включает. Кажется, что VS включает в себя множество вещей:

Compiling...
go.c
Note: including file: c:\projects\c\kr\kr\e.01.01.h
Note: including file:  c:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h
Note: including file:   c:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtdefs.h
Note: including file:    c:\Program Files\Microsoft Visual Studio 9.0\VC\include\sal.h
c:\program files\microsoft visual studio 9.0\vc\include\sal.h(108) : warning C4001: nonstandard extension 'single line comment' was used
Note: including file:    c:\Program Files\Microsoft Visual Studio 9.0\VC\include\crtassem.h
Note: including file:    c:\Program Files\Microsoft Visual Studio 9.0\VC\include\vadefs.h
Note: including file:   c:\Program Files\Microsoft Visual Studio 9.0\VC\include\swprintf.inl
Linking...

Мне не хватает какого-то переключателя компилятора?

Ответы [ 2 ]

2 голосов
/ 21 октября 2009

К сожалению, вы застряли - заголовки времени выполнения Microsoft, кажется, используют однострочные комментарии в более чем просто sal.h (например, stdlib.h также использует их), поэтому вы можете либо:

  • оберните директивы #include прагмами, чтобы отключить предупреждение во время их включения и включить его позже
  • отправить отчет об ошибке в MS на сайте подключения Visual Studio
  • использовать какую-нибудь другую библиотеку времени выполнения (может, Dinkumware позволит вам скомпилировать ANSI в чистом виде?)
  • отказаться от отключения расширений (хотелось бы знать, успешно ли кто-либо использует эту опцию для более чем небольших демонстраций или экспериментов)

или некоторая комбинация вышеперечисленного.

Вариант № 1, скорее всего, поможет вам довольно легко:

#pragma warning( push)
#pragma warning( disable : 4001)

#include <stdlib.h>

/* other runtime includes */
#pragma warning( pop)

Но я бы совсем не удивился, если бы в заголовках среды выполнения были другие не-ANSI вещи. Похоже, что они предприняли некоторую попытку очистить ANSI, когда была предоставлена ​​опция, но я подозреваю, что она не была тщательно протестирована (особенно при уровнях предупреждений не по умолчанию).

2 голосов
/ 21 октября 2009
#pragma warning( disable:4001)

Поместите это куда-нибудь для компиляции перед строками с проблемами.

Подробнее см. В документации по предупреждению #pragma в MSDN.

Позднее редактировать

Используйте параметр Visual C ++ для отображения включаемых файлов при компиляции (он должен быть где-то в расширенных параметрах в разделе C ++). Это может дать представление о том, куда входит sal.h. Вероятно, некоторые из библиотек VC включают этот заголовок косвенно. Если это заголовок C, мне интересно, почему они использовали комментарии в стиле C ++ ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...