@demoncodemonkey: Тревор задает очень большой вопрос. Почему Эндрю не должен использовать здесь функцию variadic?
многих лет использования большого уродливого макроса MFC ASSERT я наконец решил отказаться от него и создать идеальный макрос ASSERT.
Я в порядке с получением файла и номера строки, и даже выражения, которое не удалось. Я могу отобразить окно сообщений с этими кнопками, а также кнопки Abort / Retry / Cancel.
И когда я нажимаю Retry, отладчик VS переходит на строку, содержащую вызов ASSERT (в отличие от разборки где-то, как некоторые другие функции ASSERT). Так что все это в значительной степени работает.
Но что было бы действительно здорово было быотобразить имя функции, которая не смогла.
Затем я могу решить, следует ли отлаживать его, не пытаясь угадать, в какой функции он находится, из имени файла.
например если у меня есть следующая функция:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
ASSERT(lpCreateStruct->cx > 0);
...
}
Затем, когда сработает ASSERT, в окне сообщения отобразится что-то вроде:
Function = CMainFrame::OnCreate
Итак, каков самый простой способ узнать текущее имя функции во время выполнения?
Он не должен использовать MFC или .NET Framework, хотя я использую оба из них.
Он должен быть максимально портативным.