データと関数、および一部のデータへのポインターを格納する必要がある符号なし整数の配列があります。私が使用しているデバイスでは、sizeof ポインターは sizeof unsigned int と同じです。関数へのポインタをunsigned intにキャストするにはどうすればよいですか? これによりコードが移植できなくなることはわかっていますが、マイクロコントローラー固有のものです。私はこれを試しました:
stackPtr[4] = reinterpret_cast<unsigned int>(task_ptr);
しかし、「無効な型変換」というエラーが表示されます
それを void ポインターにキャストしてから int にキャストするのは面倒です。
stackPtr[4] = reinterpret_cast<unsigned int>(static_cast<void *> (task_ptr));
それを行うためのきれいな方法はありますか?
編集 - task_ptr は関数ポインタですvoid task_ptr(void)
バーマーの答えが大好きで、移植性の欠点が取り除かれます。また、void ポインターの配列は、実際には Unsigned Ints よりも理にかなっています。Barmar と isaach1000 に感謝します。
編集 2: わかりました。私のコンパイラは大容量メモリ モデルを考えているので、予想していた 16 ビットではなく 32 ビット ポインタを使用しています (合計メモリが 17K の小さなマイクロ)。