Могу ли я получить код выхода -1, используя C++ на Mac?

Мне просто интересно, возможно ли получить функцию в C++ в системе Unix, которая будет возвращать -1, а не 255?

Я программировал некоторые вещи для OpenCV и понял, что они работают не так, как задумано. Функции, которые я использовал, должны были возвращать -1, но все время возвращали 255. Так что мне просто интересно, есть ли какая-нибудь конфигурация, которую я смог бы сделать, чтобы разрешить код возврата -1?

Это пример, который я использую из моего учебника

int main( int argc, char** argv ) {
  int i = 0;
  cv::namedWindow( "Example3", cv::WINDOW_AUTOSIZE );
  cv::VideoCapture cap;
  cap.open( std::string(argv[1]) );
  cv::Mat frame;
  for(;;) {
    cap >> frame;
    if( frame.empty() ) break; // Ran out of film
    cv::imshow( "Example3", frame );
    std::cout<<"waitkey:"<<cv::waitKey(33) << std::endl;
  }
  return -1;
}

Информацию о waitkey() можно найти здесь

2 ответа

Решение

Кажется, что эта проблема на самом деле является ошибкой с кодом OpenCV. Ошибка была устранена и отправлена ​​в главную ветку OpenCV github.

POSIX говорит,

Значение статуса может быть 0, EXIT_SUCCESS, EXIT_FAILUREили любое другое значение, хотя только младшие 8 бит (то есть status & 0377) должен быть доступен с wait() а также waitpid(); полная стоимость должна быть доступна от waitid() и в siginfo_t передается обработчику сигнала для SIGCHLD,

Итак, это программа оболочки, которая сужает значение до 8 бит, когда она использует определенные API POSIX для управления своими дочерними элементами.

Другие вопросы по тегам