Я знаю, что это простой вопрос, но я ищу, чтобы мой паз C++ был включен. Я бы предположил, что можно использовать функцию abort
. Но я не думаю, что вернет любой текст, например die('hello');
.Есть ли эквивалент C++ для PHP var_dump и умереть?
ответ
Нет «распечатать сообщение, а затем выйти» на C или C++. Вы можете довольно легко написать собственную функцию для die
(или panic
, как я предпочитаю называть его), что-то вроде:
void die(const std::string& msg)
{
std::cerr << msg << std::endl;
exit(1);
}
Или, если вы хотите, чтобы избежать проблем с созданием строки, которые могут разрушаться под условия низкой памяти:
void die(const char *msg)
...
(остальное должно быть таким же, как указано выше). Недостатком здесь является то, что вы не можете тривиально конкатенировать строки, например. die(std::string("Could not open file ") + filename);
не будет работать с const char *
.
Функция, которая делает var_dump
, намного сложнее, так как нет прямого способа получить содержимое переменной произвольного типа или массива в C++. Вы могли бы, возможно, сделать что-то вроде этого:
template<typename T>
void var_dump(const T& var)
{
std::cout << var << endl;
}
template<typename T, size_t N>
void var_dump(const T (&var)[N])
{
for(i : var)
{
std::cout << i << endl;
}
}
Последнее немного, как этот PHP код: foreach($var as $i) echo $i . "\n";
. И я могу иметь синтаксис немного неправильно, не уверен.
Я бы не использовал 'std :: string' здесь, в условиях отказа он, скорее всего, потерпит неудачу еще сильнее. –
@BenVoigt: если «Failure» не хватает памяти, возможно, да. Для большинства других сбоев, возможно, нет ... Я изменил его на ссылку 'const', которая должна избежать необходимости делать копию. –
Кроме того, любые сбои, связанные с повреждением кучи. Для регистрации ошибок нецелесообразно предполагать программу с четко определенным поведением. –
Я бы не рекомендовал звонить std::abort
, std::exit
или что-нибудь в этом роде.
Это грубая сила, и семантика для правильной очистки очень сложна. Вы существенно уходите (по крайней мере, части) своей программы в очень грязное состояние.
Намного лучше в C++, чтобы бросить исключение, которое вы затем поймать в main
:
#include <stdexcept>
struct fatal_error : std::logic_error {
fatal_error(char const* message) : std::logic_error(message) { }
};
int main() try {
… the normal program flow starts here
} catch (fatal_error const& e) {
std::cerr << e.what() << '\n';
return EXIT_FAILURE;
}
Тогда вместо die
, вы бы просто сказать throw fatal_error("Something went wrong.");
.
+1 PHP не известен как вершина хорошего дизайна ... – GManNickG
* «Бросьте исключение, которое вы затем поймаете в' main' »* - Er, no. Почему безоговорочно поймать исключение, которое вы не знаете, как обращаться? Нет, просто пусть это пройдет, если вы не знаете, что делать. Кстати, это намного ближе к тому, что просит ОП.Семантика для неперехваченных исключений в C++ в наши дни довольно хорошо определена. – IInspectable
@Инспективный Когда этот ответ был написан, исключенные исключения привели к неопределенному или неопределенному (не помню, какое) поведение и утечка ресурсов. Но, кроме того, ни один конечный пользователь не хочет получать результат от неперехваченного исключения. Гораздо лучше сохранить контроль над форматированием. –
Предполагая, что вам нужны эти эквиваленты для отладки цели ...
вместо фильеры() вы можете ссылаться отладчик;
вместо var_export() вы можете проверить содержимое ваших переменных с помощью отладчика.
- 1. Java эквивалент PHP умереть
- 2. Есть ли эквивалент var_dump для методов в PHP?
- 3. Есть ли эквивалент для var_dump (PHP) в Javascript?
- 4. var_dump (PHP) эквивалент для node.js
- 5. Есть ли альтернатива умереть?
- 6. Есть ли что-то вроде var_dump PHP в c/C++?
- 7. Есть ли эквивалент PHP эквивалентному тегу C#?
- 8. Есть ли var_dump в Xcode?
- 9. Есть ли эквивалент C# для массива array_key_exists?
- 10. Есть ли C# эквивалент функции PHP `parse_str`?
- 11. Есть ли эквивалент C# Process.Start в PHP?
- 12. PHP: mysqli_query и умереть()
- 13. Что такое Java-эквивалент PHP var_dump?
- 14. Есть ли эквивалент Python для PHP-FPM?
- 15. Есть ли ASP.NET эквивалент SwiftMailer для PHP?
- 16. Есть ли Java-эквивалент для PHP get_declared_classes()?
- 17. Есть ли способ var_dump переменная?
- 18. Есть ли эквивалент MySQL для preg_replace PHP?
- 19. Есть ли эквивалент PHP для Hibernate Validator?
- 20. Есть ли эквивалент PHP для компаса?
- 21. Есть ли эквивалент для 'php: // output' в C#?
- 22. Есть ли Findbugs и/или PMD-эквивалент для C/C++?
- 23. Есть ли эквивалент C++ для java.util.concurrent.locks.ReentrantReadWriteLock?
- 24. Есть ли эквивалент C# для Java LineNumberReader?
- 25. Есть ли эквивалент C++ для getcwd?
- 26. Есть ли эквивалент C++ для java.lang.Number?
- 27. Есть ли эквивалент C++ для python functools.partial
- 28. Есть ли эквивалент C++ для Java BigDecimal?
- 29. Есть ли PHP эквивалент функции()
- 30. Есть ли Java-эквивалент для элемента C#
Печатайте текст и * затем * выходите? – Ryan
Правильно, это будет один из способов. Было просто интересно, есть ли команда для этого И распечатать – Shamoon