バックグラウンド
POSIX 標準は、多くのライブラリ関数とその他の識別子を C 言語に追加します。関数の説明では、次のdlsym()
ように述べています(強調して):
あらすじ
#include <dlfcn.h> void *dlsym(void *restrict handle, const char *restrict name);
説明
dlsym () 関数は、シンボル (関数識別子またはデータ オブジェクト識別子)のアドレスを取得します...
void *
C 標準では、関数ポインターを に変換できること、またはポインターのサイズが同じであることさえ保証されていません。これにより、C の型システムに追加の制限が効果的に追加されます。
質問
私の質問はこれです:
- C の型システムのこの制限に対する規範的な参照はありますか、それとも特定のライブラリ関数の説明からのみ推測できますか?
- POSIX はシステム上でも実装可能ですか?
sizeof (function pointer) > sizeof (void *)
参考文献
- C11 標準 (最終パブリック ドラフト): n1570
- The Open Groupの POSIX 標準: POSIX.1-2008
- POSIX
dlsym()
関数