пользовательские предупреждения на msvc И gcc?

Чистый JavaScript

Проверьте, содержит ли выбранный элемент класс 'action-2'.

performAction = (e) => {
  if (e.className.indexOf('action-2') === -1){
    console.log('Perform Action 1')
  }
  else {
    console.log('Perform Action 2')  
  }
}
<button type="button" class="btn action-complete-task" onclick="performAction(this)">Action 1</button>
<button type="button" class="btn action-complete-task action-2" onclick="performAction(this)">Action 2</button>

15
задан Jonathan Leffler 23 January 2009 в 07:29
поделиться

3 ответа

Лучшее решение, которое я нашел для этой проблемы, - иметь следующее в общем заголовке:

// compiler_warning.h
#define STRINGISE_IMPL(x) #x
#define STRINGISE(x) STRINGISE_IMPL(x)

// Use: #pragma message WARN("My message")
#if _MSC_VER
#   define FILE_LINE_LINK __FILE__ "(" STRINGISE(__LINE__) ") : "
#   define WARN(exp) (FILE_LINE_LINK "WARNING: " exp)
#else//__GNUC__ - may need other defines for different compilers
#   define WARN(exp) ("WARNING: " exp)
#endif

Затем используйте

#pragma message WARN("your warning message here")

во всем коде вместо #warning

В MSVC вы получите следующее сообщение:

15
ответ дан 1 December 2019 в 02:56
поделиться

Поскольку Вы теперь обнаружили, #warning не стандартная функция, таким образом, Вы не можете использовать ее с компиляторами, которые не поддерживают ее. Если Вы захотите, чтобы Ваш код работал через платформы, то Вы не будете использовать #warning вообще - или, по крайней мере, не в коде, который MSVC предназначается для обработки (он мог быть предварительно обработан #ifdef или эквивалентный). Следовательно:

#ifdef __GNUC__
#warning(warning message)
#else
#pragma NOTE(warning message)
#endif

Но это повторяет сообщение, и я уверен, что Вы имели в виду не выполнение этого - и это является большим; Вы только использовали бы его очень редко. Вы, возможно, также должны были бы иметь дело с другими компиляторами, чем GCC (и я не достаточно знаком с MSVC, чтобы знать, как определить его надежно).

Это было бы хорошо если #warning были стандартизированы; это не стандартизировано в C99.

(Был, однажды на давным-давно, ТАК вопрос о таких опциях, которые могли быть добавлены к C и #warning подошел там.)

См. также: Мобильность #warning директивы препроцессору

6
ответ дан 1 December 2019 в 02:56
поделиться

Охрана их с #if операторами. Ищите символ, это определяется одним компилятором, но не другим.

#ifdef _MSC_VER
#pragma NOTE(my warning here)
#else
#warning(my warning here)
#endif

Довольно ужасный, но я не вижу иначе.

3
ответ дан 1 December 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: