В целом выдача исключения является дорогостоящей в.NET. Просто наличие блока попытки/выгоды/наконец не. Так, да, существующий код плох с точки зрения производительности, потому что, когда он действительно бросает, он выдает 5-6 чрезмерно увеличенных в размерах исключений, не добавляя значения просто разрешение исходному исключению, естественно пузырьковому 5-6 стековых фреймов.
Хуже все же, существующий код действительно плох с точки зрения дизайна. Одно из основных преимуществ обработки исключений (по сравнению с возвратом кодов ошибки) - то, что Вы не должны проверять на исключения/коды возврата везде (в стеке вызовов). Вы должны только поймать их в небольшом количестве мест, которые Вы на самом деле хотите к дескриптор их. Игнорирование исключения (в отличие от игнорирования кода возврата) не игнорирует или скрывает проблему. Это просто означает, что это будет обработано выше стек вызовов.
Сделайте это:
cl app.c
Вот полный текст, включая настройку среды для Visual Studio 2005 (замените «8» на «9.0» для Visual Studio 2008).
C:\src\tests>"\Program Files (x86)\Microsoft Visual Studio 8\vc\bin\vcvars32.bat"
Setting environment for using Microsoft Visual Studio 2005 x86 tools.
C:\src\tests>type app.c
#include <stdio.h>
int main(void)
{
printf("Hello world!\n");
return 0;
}
C:\src\tests>cl app.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
app.c
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation. All rights reserved.
/out:app.exe
app.obj
C:\src\tests>app
Hello world!