どのように関数へのポインタをつくりますか?

コンパイラはコンパイル時に完全なコールツリーを知る必要があるため、関数へのポインタを許可しません。コールツリーは完全なRAM再使用のためのメモリ割り当てに使用します。同時に実行されない関数では、関数は同じRAM領域を使用することがあります。 加えてPICにはデータスタックがありません。関数のパラメータは、どのような関数がコールされるのかをコンパイル時に調べて特別な方法で渡されます。 ポインタにより関数をコールすることは、コンパイル時にこれら両方のことを知ることを妨げます。ステートマシンを作成するためには関数のポインタが欲しくなりますが、以下はポインタを使わないで如何にこれをおこなうかの例です。:


	enum tasks {taskA, taskB, taskC};

	run_task(tasks task_to_run) {

		switch(task_to_run) {
			case taskA : taskA_main(); break;
			case taskB : taskB_main(); break;
			case taskC : taskC_main(); break;
		}

	}