トップページ > プログラム > 2015年11月30日 > GeGeh89v

書き込み順位&時間帯一覧

6 位/161 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000001000110000216



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net

書き込みレス一覧

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で想定していた用途の実現が可能になりました。ありがとうございます。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。