una todas tipos parametros llamar lenguaje las funciones funcion estructura ejemplos dev con como c++ c limits function-declaration function-parameter

c++ - todas - tipos de funciones en c



Número máximo de parámetros en la declaración de función (4)

2. lenguaje c


5.2.4.1 Límites de traducción


La implementación podrá traducir y ejecutar al menos un programa que contenga al menos una instancia de cada uno de los siguientes límites:
- 127 niveles de anidación de bloques.
- 63 niveles de anidación de inclusión condicional.
- 12 declaradores de punteros, matrices y funciones (en cualquier combinación) que modifican un tipo aritmético, de estructura, de unión o incompleto en una declaración
- 63 niveles de anidamiento de declaradores entre paréntesis dentro de un declarador completo
- 63 niveles de anidamiento de expresiones entre paréntesis dentro de una expresión completa
- 63 caracteres iniciales significativos en un identificador interno o un nombre de macro (cada nombre de carácter universal o carácter de fuente extendida se considera un solo carácter)
- 31 caracteres iniciales significativos en un identificador externo (cada nombre de carácter universal
la especificación de un identificador corto de 0000FFFF o menos se considera 6 caracteres, cada nombre de carácter universal que especifica un identificador corto de 00010000 o más se considera de 10 caracteres, y cada carácter de fuente extendida se considera el mismo número de caracteres que el nombre de carácter universal correspondiente, si alguna)
- 4095 identificadores externos en una unidad de traducción
- 511 identificadores con alcance de bloque declarado en un bloque
- 4095 identificadores de macro definidos simultáneamente en una unidad de traducción de preprocesamiento
- 127 parámetros en una definición de función
- 127 argumentos en una llamada de función
- 127 parámetros en una macro definición
- 127 argumentos en una macro invocación
- 4095 caracteres en una línea fuente lógica
- 4095 caracteres en un literal de cadena de caracteres o literal de cadena ancha (después de la concatenación)
- 65535 bytes en un objeto (solo en un entorno alojado)
- 15 niveles de anidamiento para # archivos incluidos
- 1023 etiquetas de caso para una declaración de cambio (excluyendo aquellas para cualquier declaración de cambio anidada)
- 1023 miembros en una sola estructura o sindicato
- 1023 constantes de enumeración en una sola enumeración
- 63 niveles de definiciones de unión o estructura anidadas en una única estructura-declaración-lista

Sin embargo, dice en notas que,

13) Las implementaciones deben evitar imponer límites de traducción fijos siempre que sea posible.

Sé que el número mínimo de parámetros en la definición de la función es cero, pero ¿cuál es el número máximo de parámetros en la definición de la función? Estoy haciendo la pregunta solo por el conocimiento y por curiosidad, no es que vaya a escribir una función real.


Como los respondedores anteriores han señalado adecuadamente, el número de parámetros depende del compilador de C ++. El límite del compilador puede deberse a las limitaciones impuestas por los entornos de hardware.

Por ejemplo, la arquitectura de la CPU VAX utiliza un campo de 8 bits que contiene la cantidad de argumentos, por lo que el código VAX compatible no puede pasar más de 255 parámetros.

Del mismo modo, muchos procesadores pequeños, como la familia Intel 8048, están tan limitados para la memoria que la mayoría de los compiladores C y C ++ dan pena si se usan más de cuatro parámetros. Si bien muchos desarrolladores tradicionales pueden burlarse de los 8048, sus descendientes siguen siendo una de las CPU más implementadas, principalmente en dispositivos integrados.

Muchas implementaciones de arquitectura RISC especifican un método de paso de parámetros usando registros, en lugar de la pila. Una CPU ARM básica, por ejemplo, tiene solo 16 registros. El número máximo de parámetros podría depender de las opciones de línea de comando del compilador que afectan la forma en que genera el código para pasar los parámetros. Tal vez más de ocho son empujados en una pila. Tal vez no.

Si esos ejemplos parecen demasiado restrictivos, considere que el sistema operativo de Palm limitó una función de C a un solo parámetro, y que tenía que ser de tipo int o void * .


Por supuesto, si está escribiendo una función en C con un número tan grande de argumentos, es probable que desee replantearse el diseño de su programa.


Sí, hay límites impuestos por la implementación. Su respuesta se encuentra en el texto en negrita en el siguiente extracto del Estándar de C ++.

1. Lenguaje C ++


Anexo B - Cantidades de ejecución

  1. Debido a que las computadoras son finitas, las implementaciones de C ++ son inevitablemente limitadas en el tamaño de los programas que pueden procesar con éxito. Cada implementación deberá documentar esas limitaciones cuando se conozcan. Esta documentación puede citar los límites fijos donde existan, decir cómo calcular los límites variables en función de los recursos disponibles, o decir que los límites fijos no existen o son desconocidos.

  2. Los límites pueden restringir cantidades que incluyen las que se describen a continuación u otras. El número entre corchetes que sigue a cada cantidad se recomienda como el mínimo para esa cantidad. Sin embargo, estas cantidades son solo pautas y no determinan el cumplimiento.
    - Anidar niveles de sentencias compuestas, estructuras de control de iteración y estructuras de control de selección [256].
    - Anidación de niveles de inclusión condicional [256].
    - Declaradores de punteros, matrices y funciones (en cualquier combinación) que modifican un tipo aritmético, de estructura, de unión o incompleto en una declaración [256].
    - Anidar niveles de expresiones entre paréntesis dentro de una expresión completa [256].
    - Número de caracteres en un identificador interno o nombre de macro [1 024].
    - Número de caracteres en un identificador externo [1 024].
    - Identificadores externos en una unidad de traducción [65 536].
    - Identificadores con alcance de bloque declarados en un bloque [1 024].
    - Identificadores de macro definidos simultáneamente en una unidad de traducción [65 536].
    - Parámetros en una definición de función [256].
    - Argumentos en una llamada de función [256].
    - Parámetros en una definición de macro [256].
    - Argumentos en una macro invocación [256].
    - Caracteres en una línea fuente lógica [65 536].
    - Caracteres en un literal de cadena de caracteres o literal de cadena ancha (después de la concatenación) [65 536].
    - Tamaño de un objeto [262 144].
    - Niveles de anidamiento para archivos #include [256].
    - Etiquetas de caso para una declaración de cambio (excluyendo aquellas para cualquier declaración de cambio anidada) [16 384].
    - Miembros de datos en una sola clase, estructura o unión [16 384].
    - Constantes de enumeración en una sola enumeración [4 096].
    - Niveles de definiciones de clase, estructura o unión anidadas en una única estructura-declaración-lista [256].
    - Funciones registradas por atexit () [32].
    - Clases base directas e indirectas [16 384].
    - Clases base directas para una sola clase [1024].
    - Miembros declarados en una sola clase [4 096].
    - Finalizar funciones virtuales sobrescribidas en una clase, accesibles o no [16 384].
    - Bases virtuales directas e indirectas de una clase [1 024].
    - Miembros estáticos de una clase [1 024].
    - Declaraciones de amigos en una clase [4 096].
    - Declaraciones de control de acceso en una clase [4 096].
    - Miembros inicializadores en una definición de constructor [6 144].
    - Cualificaciones de alcance de un identificador [256].
    - Especificaciones externas anidadas [1 024].
    - Argumentos de plantilla en una declaración de plantilla [1 024].
    - Instancias de plantilla anidadas recursivamente [17].
    - Manejadores por bloque de prueba [256].
    - Lanzar especificaciones en una sola declaración de función [256].

Además, también dice en $ 18.3 / 6,

Límites de implementación: La implementación debe soportar el registro de al menos 32 funciones.