Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

363
Visualizações
¿Es posible detectar una excepción de desbordamiento de enteros en C (POSIX/Linux) a través de SIGFPE FPE_INTOVF?

Siento que esta es una pregunta estúpida, pero no he encontrado información sobre el tema (ni aquí ni en ningún lado), así que aquí está la pregunta:

Contexto (lo que probablemente ya sepa): excepciones SIGFPE y campo si_code

En POSIX/Linux tenemos un tipo particular de señal llamada SIGFPE (que a pesar de su nombre, se usa tanto para errores aritméticos de coma flotante como de enteros). Cuando registramos un controlador de señal para SIGFPE utilizando sigaction() , nuestro controlador también recibe un campo llamado si_code que explica por qué se generó la excepción SIGFPE particular. Uno de los posibles valores de si_code es, por ejemplo, FPE_INTDIV y puede probarlo rápidamente dividiendo un int por 0 .

El problema: ¿qué pasa con FPE_INTOVF ?

Mi pregunta es sobre un si_code en particular, que es FPE_INTOVF . Este código se describe como Value signalling integer overflow in case of SIGFPE signal .

El problema es que nunca he encontrado un ejemplo de esta señal, ni encontré una manera de hacer que el sistema operativo emita este tipo de señal: cuando hago un desbordamiento de enteros en C, no se lanza ninguna excepción SIGFPE . Pero el valor FPE_INTOVF para SIGFPE es una especie de pista de que tal vez sea posible hacer que el host lance en caso de desbordamientos de enteros (como ya lo hace para la división de enteros por cero).

La pregunta:

¿ FPE_INTOVF es inutilizable? ¿Es solo un marcador de posición para un tipo de señal que ningún sistema operativo compatible con POSIX ha implementado alguna vez? ¿O es posible indicarle al sistema operativo que envíe este tipo de señal en caso de desbordamiento de enteros?

Estoy realmente interesado en capturar señales FPE_INTOVF de un programa C usando sigaction() .


PD: reconozco que el desbordamiento de enteros sin signo no es técnicamente un error en C (no existe en absoluto en C, ya que toda la aritmética de enteros sin signo tiene un comportamiento de "envoltura"), pero el desbordamiento de enteros con signo es de hecho un comportamiento indefinido, así que espero que FPE_INTOVF maneja este último.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

TL;RD:

Las excepciones de tipo SIGFPE FPE_INTOVF parecen lanzarse solo cuando el hardware subyacente es compatible con ellas. Por ejemplo, en Linux, estos son los arcos que pueden FPE_INTOVF : alpha , ia64 , m68k , mips , parisc , s390 y superh .

No es una respuesta a mi pregunta, pero vale la pena señalar:

Mi pregunta era sobre FPE_INTOVF en particular, pero si uno solo quiere verificar el desbordamiento de enteros en general, vale la pena señalar que hay formas alternativas de hacerlo: funciones específicas del compilador como __builtin_sadd_overflow() ( lea más aquí ) o específicas del compilador indicadores como -ftrapv en GCC. Consulte también esta y estas preguntas relacionadas en SO.

Créditos

Me gustaría agradecer a los usuarios KamilCuk , Steve Summit y Nate Eldredge por sus contribuciones a esta respuesta a través de sus comentarios.


PD: en caso de que alguien más quiera agregar otra información sobre FPE_INTOVF , puede publicar otra respuesta a esta pregunta, o puede escribir un comentario a esta misma respuesta, y editaré la respuesta para agregar la información adicional.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda