¿Por qué los lenguajes de programación como C no definen constantes como Pi o e?

Al no ser parte del comité estándar, tendré que especular un poco, pero aquí está mi suposición, por lo que puede valer:

1 – No son valores constantes para el lenguaje, porque el sistema de tipos les da múltiples representaciones posibles.

Hay al menos flotante, doble y complejo; seleccionar uno para favorecer no es bueno, y agregar el tipo a los nombres de un puñado de constantes diferentes es simplemente desordenado (y potencialmente se vuelve más desordenado en la próxima actualización del idioma) ya que el usuario tiene que saber cuál necesita de todos modos. Proporcionar un valor a una precisión que se puede convertir en todas las representaciones con una conversión de texto requiere que sean macros de preprocesador, lo que conduce a

2 – La intromisión con espacios de nombres de macros de preprocesador va más allá de especificar el idioma central.

Las macros se manejan antes de que la fuente se envíe al compilador de todos modos, y se aprovechan para tomar decisiones de diseño en implementaciones particulares. Abarrotar ese espacio de nombres lleno de requisitos de lenguaje estándar hace una separación pobre de las preocupaciones.

Dicho esto / adivinado, las especificaciones para las implementaciones de la biblioteca pueden definirlo, POSIX requiere que math.h los defina como M_PI y M_E, creo. Si su cadena de herramientas de elección la respeta cuando #define _POSIX_C_SOURCE a un valor apropiado, deben estar al alcance de su mano. Si eso te hace sentir incómodo y no quieres perforar muchos dígitos para tu propia macro, supongo que siempre puedes sacar e de la función exp y pi de atan o algo así.

Porque son lenguajes de uso general. Todo lo que sea específico del dominio se deja a las bibliotecas. (PI se define en la biblioteca matemática estándar como una macro, creo).
Si escribiera un idioma específicamente para su uso en física, agregaría varias constantes físicas como palabras clave (parte del lenguaje en sí), pero si escribiera un lenguaje destinado a ser utilizado por físicos, matemáticos, ingenieros, contadores, jugadores, artistas, etc. entonces solo mantendrá un conjunto de construcciones básicas y generalmente útiles como parte de su lenguaje, dejando el resto para bibliotecas que sus usuarios pueden elegir.
Recuerde, Pi y e no son tan útiles como podría pensar que son. El software que impulsa la banca y otras actividades mundanas no las necesitan.
Además, varios usuarios necesitan diferentes niveles de precisión; permitir que el usuario defina sus propias constantes puede ayudar con esto.

La mayoría de las C que he usado definen M_PI en un archivo de encabezado en alguna parte.