Как правильно отметили предыдущие авторы, количество параметров зависит от компилятора C ++. Ограничение компилятора вполне может быть связано с ограничениями, налагаемыми аппаратными средами.
Например, в архитектуре VAX CPU используется 8-битное поле, которое содержит количество аргументов, поэтому совместимый код VAX не может передавать более 255 параметров.
Точно так же многие малые процессоры, такие как семейство Intel 8048 , настолько ограничены для памяти, что большинство компиляторов C и C ++ огорчаются, если используются более четырех параметров. Хотя многие основные разработчики могут насмехаться над 8048, его потомки остаются одним из наиболее широко развернутых процессоров - в основном во встроенных устройствах.
Многие реализации архитектуры RISC определяют метод передачи параметров с использованием регистров, а не стека. Например, базовый процессор ARM имеет только 16 регистров. Максимальное количество параметров вполне может зависеть от параметров командной строки компилятора, которые влияют на то, как он генерирует код для передачи параметров. Возможно, больше восьми помещено в стек. Возможно нет.
Если эти примеры кажутся чрезмерно ограничительными, учтите, что Palm OS ограничивает функцию C одним параметром, и это должно быть типа int
или void *
.