- C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
122 :デフォルトの名無しさん[sage]:2015/11/30(月) 12:33:33.82 ID:GeGeh89v - C言語で関数の存在チェックを行う場合、以下の方法のどちらが一般的なのでしょうか。
if (privateFunc) { privateFunc(); } if (*privateFunc) { privateFunc(); }
|
- C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
127 :デフォルトの名無しさん[sage]:2015/11/30(月) 16:57:30.00 ID:GeGeh89v - すみません、privateFuncはプライベートメソッドという意図です。
SDKやAPIが非公開にしているメソッドを実行するケースを想定しています。
|
- C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
130 :デフォルトの名無しさん[sage]:2015/11/30(月) 17:25:45.70 ID:GeGeh89v - >>128
前提条件が少なくてすみません。 もともとプライベート関数としていたものを同名でパブリック宣言(extern)しています。 名称が同じであれば、古い時代の実行環境でも、存在確認さえできれば実行できるのかなと思っていたのですが。
|
- C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
132 :デフォルトの名無しさん[sage]:2015/11/30(月) 22:08:03.78 ID:GeGeh89v - >>131
こんなイメージになります。 /* libtest.c */ #include <stdio.h> void privateFunc() { printf("ok!\n"); } /* app.c */ #include <stdio.h> extern void privateFunc(); int main() { if (privateFunc) privateFunc(); } $ clang -shared libtest.c -o libtest.so $ clang -I./ -L./ app.c -o app -ltest $ ./app $ ok!
|
- C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
133 :デフォルトの名無しさん[sage]:2015/11/30(月) 22:19:36.25 ID:GeGeh89v - ちなみにlibtest.cは動的ライブラリです。
試しにlibtest.cのprivateFunc()未実装版と一緒に実行もしてみましたが、 なぜか「lazy symbol binding failed: Symbol not found: _privateFunc」という実行時エラーが発生してしまいました。
|
- C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
135 :デフォルトの名無しさん[sage]:2015/11/30(月) 23:59:42.62 ID:GeGeh89v - >>134
dlsymで想定していた用途の実現が可能になりました。ありがとうございます。
|