Даты языка 'C' с эры, где (пусто*) 0 мог на самом деле быть допустимый указатель. Не то, чтобы давно, 8080 и микропроцессоры Z80 имели вектор прерывания в адресе 0. Сталкивающийся с такими возможностями выбора архитектуры, это не могло сделать, почти позволяют заголовочному файлу объявить значение ПУСТОГО УКАЗАТЕЛЯ. Были некоторые компиляторы там, теперь давно забыты, где ПУСТОЙ УКАЗАТЕЛЬ не был равен (пусто*) 0 (0xffff, была следующая альтернатива), таким образом давая Ваш, если () оператор неопределенное поведение.
C++ милостиво положил конец этому, нулевой указатель является присваиваемым от и тестируемым против 0.
Вы можете сделать это так:
convert test.png PNG8:test2.png
Мне по разному повезло с IM и PNG8, но это правильный способ.