In computer programming, undefined behavior (UB) is the result of executing a program whose behavior is prescribed to be unpredictable, in the language specification to which the computer code adheres. This is different from unspecified behavior, for which the language specification does not prescribe a result and implementation defined behavior that defers to the documentation of another component of the platform (such as the ABI or the translator documentation).

Property Value
dbo:abstract
  • In computer programming, undefined behavior (UB) is the result of executing a program whose behavior is prescribed to be unpredictable, in the language specification to which the computer code adheres. This is different from unspecified behavior, for which the language specification does not prescribe a result and implementation defined behavior that defers to the documentation of another component of the platform (such as the ABI or the translator documentation). In the C community, undefined behavior may be humorously referred to as "nasal demons", after a comp.std.c post that explained undefined behavior as allowing the compiler to do anything it chooses, even "to make demons fly out of your nose". (en)
  • Undefiniertes Verhalten beschreibt in der Informatik Code, dessen Verhalten nicht spezifiziert ist und deshalb von verschiedenen Implementierungen von Compilern willkürlich behandelt wird. Dies ist eine Eigenschaft einiger Programmiersprachen, wie beispielsweise C oder C++. Die Semantik bestimmter Operationen ist in den Standards dieser Sprachen nicht definiert, wodurch eine Implementierung davon ausgehen kann, dass diese Operationen im Normalfall nicht vorkommen. Dadurch stimmt das Verhalten der Implementierung in jedem Fall mit den Standards der Sprache überein. Es ist die Aufgabe des Programmierers, nie Code zu schreiben, der undefiniertes Verhalten auslöst, Compiler-Implementationen dürfen in diesem Fall aber Diagnosen ausstellen. (de)
  • Un comportamiento indefinido (undefined behavior en inglés) en programación se refiere a la operación cuyo comportamiento es arbitrario. En los lenguajes de programación en los que se han definido comportamientos indefinidos las implementaciones pueden asumir que las operaciones que provocan un comportamiento indefinido nunca ocurren. Esta suposición hace válidas varias transformaciones del programa o simplifica las pruebas de validez dándole flexibilidad a la implementación del lenguaje. Es responsabilidad del programador escribir código que nunca invoque comportamientos indefinidos, pero la implementación del lenguaje tiene permitido mostrar mensajes de diagnóstico cuando esto suceda. La existencia de comportamientos indefinidos le permite al lenguaje omitir algunas comprobaciones como (en el caso de C) que el divisor no sea 0 o que el resultado de una suma de enteros sin signo no sea mayor al máximo valor admitido por ese tipo de enteros sin signo. Esto ahorra algunos ciclos del procesador cada vez que esas operaciones son invocadas y asigna la responsabilidad de hacer esas comprobaciones cuando sean relevantes al programador. Los efectos de la invocación de una operación que provoque un comportamiento indefinido pueden variar dependiendo de la arquitectura del procesador en la que se ejecute el programa, el cambio en cualquiera de los elementos de la cadena de herramientas (como el compilador), el sistema operativo, el contenido de la memoria, el momento de ejecución, etc. Entre los posibles efectos de la invocación de un comportamiento indefinido está la ejecución esperada del programa (lo que oculta el problema), el cierre inesperado del programa, corrupción de la memoria, resultados incorrectos, fallo irrecuperable del sistema informático, vulnerabilidades de seguridad, etc. Los comportamientos indefinidos no deben ser confundidos con los los o los . (es)
  • Na ciência da computação, comportamento indefinido é um recurso existente em algumas linguagens de programação, notoriamente na linguagem C. Para simplificar a especificação e permitir maior flexibilidade de implementação, as especificações determinam que o resultado de algumas operações é indefinido. Operações que não sejam explicitamente definidas por um padrão também são associadas a comportamento indefinido. Por exemplo, em C, o uso de qualquer variável antes que seu valor tenha sido inicializado leva a comportamento indefinido, assim como dividir um número por zero e indexar um vetor em índices que excedem seus limites (transbordamento de dados). Ao se deparar com qualquer uma dessas situações, o compilador é livre para qualquer ação, que pode ser a mais simples, a mais eficiente ou qualquer outra coisa. É importante salientar que absolutamente qualquer ação tomada pelo compilador diante de uma situação de comportamento indefinido é válida, incluindo gerar mensagens de advertência ou silenciosamente ignorar a situação. Isso pode fazer com que programas aparentemente corretos, os quais compilam e rodam normalmente em uma determinada plataforma, deixem de compilar, sofram falhas de execução ou se comportem de maneira imprevisível em outras. (pt)
  • Неопределённое поведение (англ. undefined behaviour, в ряде источников непредсказуемое поведение) — свойство некоторых языков программирования (наиболее заметно в Си), программных библиотек и аппаратного обеспечения в определённых маргинальных ситуациях выдавать результат, зависящий от реализации компилятора (библиотеки, микросхемы) и случайных факторов наподобие состояния памяти или сработавшего прерывания. Другими словами, спецификация не определяет поведение языка (библиотеки, микросхемы) в любых возможных ситуациях, а говорит: «при условии А результат операции Б не определён». Допускать такую ситуацию в программе считается ошибкой; даже если на некотором компиляторе программа успешно выполняется, она не будет кроссплатформенной и может отказать на другой машине, в другой ОС или при других настройках компилятора. Неопределенное поведение не следует путать с неуточняемым поведением (unspecified behavior), при котором спецификация разрешает не любое поведение, а только ограниченный диапазон вариантов реализации. (ru)
  • 在计算机程序设计中,未定义行为(英語:undefined behavior)是指执行某种计算机代码所产生的结果,这种代码在当前程序状态下的行为在其所使用的中没有规定。常见于对源代码存在某些假设,而执行时这些假设不成立的情况。 一些编程语言中,某些情况下存在未定义行为,以C和C++最为著名。在这些语言的标准中,规定某些操作的语义是未定义的,典型的例子就是程序错误的情况,比如越界访问数组元素。标准允许语言的具体实现做这样的假设:只要是符合标准的程序代码,就不会出现任何类似的行为。具体到 C/C++ 中,编译器可以选择性地给出相应的诊断信息,但没有对此的强制要求:针对未定义行为,语言实现作出任何反应都是正确的,类似于数字逻辑中的。虽然编译器实现可能会针对未定义行为给出诊断信息,但保证编写的代码中不引发未定义行为是程序员自己的责任。这种假设的成立,通常可以让编译器对代码作出更多优化,同时也便于做更多的编译期检查和静态程序分析。 有时候也可能存在对于未定义行为本身的限制性要求。例如,在CPU的指令集说明中可能将某些形式的指令定为未定义,但如果该CPU支持内存保护,说明中很可能会还会包含一条兜底的规则,要求任何用户态的指令都不会让操作系统的安全性受损;这样一来,在执行未定义行为的指令时,就允许CPU破坏用户寄存器,但不允许发生诸如切换到监控模式的操作。 和(unspecified behavior)不同,未定义行为强调基于不可移植或错误的程序构造,或使用错误的数据。一个符合标准的实现可以在假定未定义行为永远不发生(除了显式使用不严格遵守标准的扩展)的基础上进行优化,可能导致原本存在未定义行为(例如有符号数溢出)的程序经过优化后显示出更加明显的错误(例如死循环)。因此,这种未定义行为一般应被视为bug。 (zh)
  • Неви́значена поведі́нка (англ. Undefined behaviour) — Властивість деяких мов програмування (Найбільш помітно в C) залишати результат деяких операцій невизначеним конкретно. Ця міра призводить до спрощення специфікації і деякому підвищенню гнучкості подібних мов(що часто характеризуються відсутністю вбудованої перевірки на границю масиву, і т.д.). В мові Сі, наприклад, використання змінної до її ініціалізації призводить до невизначеної поведінки. Згідно зі специфікацією компілятор повинен в даному випадку зробити щось, що може здатися найефективнішим/простим. Невизначена поведінка виникає при спробі звернення до змінної. Ще один приклад невизначеної поведінки: незвичайна поведінка з ANSI-директивою «#pragma». Згідно зі специфікацією мови компіляторам надана повна свобода при обробці даної конструкції. До версії 1.17 компілятор GCC при знаходженні в коді даної директиви намагався запустити Emacs з грою «Ханойські вежі». (uk)
dbo:wikiPageExternalLink
dbo:wikiPageID
  • 515992 (xsd:integer)
dbo:wikiPageLength
  • 19396 (xsd:integer)
dbo:wikiPageRevisionID
  • 959672567 (xsd:integer)
dbo:wikiPageWikiLink
dbp:wikiPageUsesTemplate
dct:subject
rdf:type
rdfs:comment
  • Undefiniertes Verhalten beschreibt in der Informatik Code, dessen Verhalten nicht spezifiziert ist und deshalb von verschiedenen Implementierungen von Compilern willkürlich behandelt wird. Dies ist eine Eigenschaft einiger Programmiersprachen, wie beispielsweise C oder C++. Die Semantik bestimmter Operationen ist in den Standards dieser Sprachen nicht definiert, wodurch eine Implementierung davon ausgehen kann, dass diese Operationen im Normalfall nicht vorkommen. Dadurch stimmt das Verhalten der Implementierung in jedem Fall mit den Standards der Sprache überein. Es ist die Aufgabe des Programmierers, nie Code zu schreiben, der undefiniertes Verhalten auslöst, Compiler-Implementationen dürfen in diesem Fall aber Diagnosen ausstellen. (de)
  • In computer programming, undefined behavior (UB) is the result of executing a program whose behavior is prescribed to be unpredictable, in the language specification to which the computer code adheres. This is different from unspecified behavior, for which the language specification does not prescribe a result and implementation defined behavior that defers to the documentation of another component of the platform (such as the ABI or the translator documentation). (en)
  • Un comportamiento indefinido (undefined behavior en inglés) en programación se refiere a la operación cuyo comportamiento es arbitrario. En los lenguajes de programación en los que se han definido comportamientos indefinidos las implementaciones pueden asumir que las operaciones que provocan un comportamiento indefinido nunca ocurren. Esta suposición hace válidas varias transformaciones del programa o simplifica las pruebas de validez dándole flexibilidad a la implementación del lenguaje. Es responsabilidad del programador escribir código que nunca invoque comportamientos indefinidos, pero la implementación del lenguaje tiene permitido mostrar mensajes de diagnóstico cuando esto suceda. (es)
  • Na ciência da computação, comportamento indefinido é um recurso existente em algumas linguagens de programação, notoriamente na linguagem C. Para simplificar a especificação e permitir maior flexibilidade de implementação, as especificações determinam que o resultado de algumas operações é indefinido. Operações que não sejam explicitamente definidas por um padrão também são associadas a comportamento indefinido. (pt)
  • Неопределённое поведение (англ. undefined behaviour, в ряде источников непредсказуемое поведение) — свойство некоторых языков программирования (наиболее заметно в Си), программных библиотек и аппаратного обеспечения в определённых маргинальных ситуациях выдавать результат, зависящий от реализации компилятора (библиотеки, микросхемы) и случайных факторов наподобие состояния памяти или сработавшего прерывания. Другими словами, спецификация не определяет поведение языка (библиотеки, микросхемы) в любых возможных ситуациях, а говорит: «при условии А результат операции Б не определён». Допускать такую ситуацию в программе считается ошибкой; даже если на некотором компиляторе программа успешно выполняется, она не будет кроссплатформенной и может отказать на другой машине, в другой ОС или при дру (ru)
  • Неви́значена поведі́нка (англ. Undefined behaviour) — Властивість деяких мов програмування (Найбільш помітно в C) залишати результат деяких операцій невизначеним конкретно. Ця міра призводить до спрощення специфікації і деякому підвищенню гнучкості подібних мов(що часто характеризуються відсутністю вбудованої перевірки на границю масиву, і т.д.). (uk)
  • 在计算机程序设计中,未定义行为(英語:undefined behavior)是指执行某种计算机代码所产生的结果,这种代码在当前程序状态下的行为在其所使用的中没有规定。常见于对源代码存在某些假设,而执行时这些假设不成立的情况。 一些编程语言中,某些情况下存在未定义行为,以C和C++最为著名。在这些语言的标准中,规定某些操作的语义是未定义的,典型的例子就是程序错误的情况,比如越界访问数组元素。标准允许语言的具体实现做这样的假设:只要是符合标准的程序代码,就不会出现任何类似的行为。具体到 C/C++ 中,编译器可以选择性地给出相应的诊断信息,但没有对此的强制要求:针对未定义行为,语言实现作出任何反应都是正确的,类似于数字逻辑中的。虽然编译器实现可能会针对未定义行为给出诊断信息,但保证编写的代码中不引发未定义行为是程序员自己的责任。这种假设的成立,通常可以让编译器对代码作出更多优化,同时也便于做更多的编译期检查和静态程序分析。 有时候也可能存在对于未定义行为本身的限制性要求。例如,在CPU的指令集说明中可能将某些形式的指令定为未定义,但如果该CPU支持内存保护,说明中很可能会还会包含一条兜底的规则,要求任何用户态的指令都不会让操作系统的安全性受损;这样一来,在执行未定义行为的指令时,就允许CPU破坏用户寄存器,但不允许发生诸如切换到监控模式的操作。 (zh)
rdfs:label
  • Undefiniertes Verhalten (de)
  • Comportamiento indefinido (es)
  • Undefined behavior (en)
  • Comportamento indefinido (pt)
  • Неопределённое поведение (ru)
  • Невизначена поведінка (uk)
  • 未定义行为 (zh)
owl:differentFrom
owl:sameAs
prov:wasDerivedFrom
foaf:isPrimaryTopicOf
is dbo:wikiPageDisambiguates of
is dbo:wikiPageRedirects of
is dbo:wikiPageWikiLink of
is owl:differentFrom of
is foaf:primaryTopic of