Ваша логика имела бы смысл, если бы возвращаемое значение main
было интерпретировано как логическое значение, но это не так. Возврат из первоначального вызова к main
подобен вызову функции exit
: она сообщает о состоянии завершения системе, в которой вы работаете.
Стандарт C определяет 3 переносимых состояния выхода:
0
, указывающих на успех EXIT_SUCCESS
, также указывающих на успех EXIT_FAILURE
, указывающих fail (последние два являются макросами, определенными в <stdlib.h>
.)
В Unix допускается любое 8-битное значение (0 .. 255). Все ненулевые значения интерпретируются как коды ошибок. Не существует универсального соглашения о том, что означает любое число, просто то, что 0
представляет успех, а все остальное - своего рода провал.
Что касается того, кто может использовать возвращаемое значение: В Unix родительский процесс может использовать wait
или waitpid
, чтобы получить статус выхода прерванного потомка.
В стандартной библиотеке C функции, выполняющие действие, обычно не возвращают статус «истина / ложь». (Тесты, такие как islower
или isdigit
, но у них нет других эффектов.) Например, remove
(который удаляет файл) возвращает 0
в случае успеха и -1
в случае ошибки. Это также общий шаблон с системными вызовами Unix. Например, open
возвращает дескриптор файла (неотрицательное целое число) при успехе и -1
при ошибке.
Разница в скорости возникает из-за выполнения любого необходимого преобразования цвета в дополнение к универсальности, необходимой для обработки растяжения (даже если ваш целевой размер такой же, как ваш исходный размер).
Если вы просто рисуете изображение только один раз, тогда я думаю, что вам нужна функция SetDIBitsToDevice
.
Если вам важна скорость, потому что вы рисуете один и тот же DIB несколько раз, то вы можете улучшите производительность, скопировав DIB в совместимый DC памяти один раз, а затем BitBlt
-когда из DC памяти на экран (или принтер) каждый раз, когда вам это нужно. Используйте CreateCompatibleDC
, чтобы создать DC памяти, а затем используйте StretchDIBits
или SetDIBitsToDevice
, чтобы получить на нем изображение. После этого вы можете напрямую использовать BitBlt
.