Общее имя, такое как f_data
, позволяет вызывать процедуры с разными входными сигнатурами (ранг, тип, вид и количество аргументов) с одним и тем же именем.Но, поскольку они имеют одинаковые сигнатуры аргументов, компилятор не может определить, какие из calc_data_a1
и calc_data_a2
выполнить, когда ваш код вызывает f_data
.
, что приводит меня к вопросу оВы: Как вы ожидаете, что компилятор или код будет вести себя?Что вы хотите, чтобы компилятор делал? (ОК, это было два вопроса.)
Как правило, если вы хотите, чтобы компилятор выполнил две процедуры, вы должны сделать два вызова.Я мог бы, я полагаю, иметь одну процедуру, вызывающую другую, если вы хотите, чтобы обе выполнялись при ее вызове.
Если вы хотите заключить несколько функций в одно имя, они должны иметь разные входные сигнатуры, чтобыкомпилятор может определить, какой из них вызывать.
Очевидно, что моя более ранняя версия этого ответа не была достаточно явной:
Нет, нет способа написать свой код для выполнения двух разных процедур вответ на один звонок одному из них.(Если только один не вызывает другого.) Кроме того, нецелесообразно ожидать, что один указатель (процедура) будет указывать в любое время более чем на одну цель.