У меня проблема в моей программе на C++ для извлечения аудио из пакетов VoIP.Возврат true - это возврат false? Magic
Он хорошо работает на Linux и OpenBSD на amd64 и x86, но когда я запускаю программу на OpenBSD на ARM, она действительно делает магические вещи.
Я вызываю return true в LoadConfigFile, а в ProcessConfiguration - результат false.
Может ли кто-нибудь мне помочь? Может быть, я всего лишь слепой. Я сделал много тестовых отпечатков в коде.
Это основная функция программы, которая вызывает функцию ProcessConfiguration.
int main (int argc, char **argv) {
if (! config.ProcessConfiguration(argc, argv)) {
std::cout << "process configuration failed" << std::endl;
std::cout << "exiting whole program with EXIT_FAILURE" << std::endl;
return EXIT_FAILURE;
}
std::cout << "process configuration is true" << std::endl;
// User want to only print configuration
if (config.m_printconfig == true) {
config.PrintConfig();
return EXIT_SUCCESS;
}
.
. // Long uninteresting code
.
return EXIT_SUCCESS;
}
Это функция ProcessConfoguration, которая вызывает LoadConfigFile.
bool TConfig::ProcessConfiguration (int & argc, char ** & argv) {
// Scan options from command line
int c;
while ((c = getopt (argc, argv, "c:dhn")) != EOF) {
switch (c) {
case 'c':
m_configfile = optarg;
break;
case 'd':
m_daemon = false;
break;
case 'h':
m_printusage = true;
return true;
case 'n':
m_printconfig = true;
break;
default:
return false;
}
}
argc -= optind;
argv += optind;
if (LoadConfigFile() == false) {
std::cout << "LoadConfigFile was false" << std::endl;
return false;
}
std::cout << "LoadConfigFile was true" << std::endl;
return true;
}
И эта функция загружает файл конфигурации, анализирует все директивы.
bool TConfig::LoadConfigFile (void) {
std::string line;
std::string directive;
std::ifstream data;
if (m_configfile.empty()) {
m_configfile = DEFAULT_CONFIGFILE;
}
std::cout << "opening file " << m_configfile << std::endl;
data.open(m_configfile.c_str());
if (! data.is_open()) {
std::cerr << "Couldn't open config " << m_configfile << std::endl;
return false;
}
std::cout << "configfile is open" << std::endl;
std::cout << "before getline" << std::endl;
while (getline(data, line)) {
std::cout << "after getline" << std::endl;
trim_whitespaces(line);
.
. // Long uninteresting code
.
}
std::cout << "before data.close" << std::endl;
data.close();
std::cout << "before return true in LoadConfigFile" << std::endl;
return true;
}
И это выводится на терминал.
$ ./call-extract -c call-extract.conf -d -n
opening file call-extract.conf
configfile is open
before getline
before data.close
before return true in LoadConfigFile
LoadConfigFile was false
process configuration failed
exiting whole program with EXIT_FAILURE
$ echo $?
1
$
Я вызываю return true в LoadConfigFile, а в ProcessConfiguration - результат false.
Вы спрашиваете о '' эхо $ возвращения 1? Процесс, который успешно завершится, будет иметь статус выхода 0. – jxh
Даже не говоря, что вы ожидаете и минимальный код для воспроизведения того, что происходит с вашим вопросом, не очень полезно. Сначала прочитайте https://stackoverflow.com/help/how-to-ask. –
Я это знаю. Моя программа завершает работу 1 при возврате EXIT_FAILURE в основной функции. –