本シリーズのトップページ |
---|
https://qiita.com/robozushi10/items/fc185b5da0509b9a631f |
はじめに
本記事の趣旨は「01 概要」に記しているが、
13年前(=2008年) に職場のプログラムの挙動をマネて実装した
「コンソールから関数を呼び出す機構」の振り返りである.
本項では次の (1)(2) について記す.
(1) デバッグ対象のプログラムコード
*.c
が存在する.
⬇️
(2)*.c
をコンパイルして*.o
を作成する
⬇️
詳細
(1) について
下記については次の意味である.
(1) デバッグ対象のプログラムコード
*.c
が存在する.
デバッグ対象は test_driver.c である.
今回、関数呼び出しの際にサポートしている引数の型は int と文字列のみなので、
int
と char *
のみを引数に持つ関数を定義している.
また、static 関数はコンソールから呼び出せない1 ことを証明するために、
static 関数も定義している.
#include <stdio.h>
void
hoge(int i)
{
printf("i = %d at hoge()\n", i);
}
void
piyo(char * mesg, char * mesg2)
{
printf("(%s , %s) at piyo()\n", mesg, mesg2);
}
int
foo(void)
{
printf("I am foo\n");
return 99;
}
static void
internal_func(int i, char * mesg)
{
printf
(
"[%s:%d] i = %d, mesg = %s at internal_func[%p]\n",
__FILE__,
__LINE__,
i,
mesg,
internal_func
);
}
void
Ext_func(int i, char * mesg)
{
printf("call internal_func\n");
internal_func(i, mesg);
}
int
main()
{
Invoke_from_stdin();
/* not reached */
return 0;
}
(2) について
以下を実行して test_driver.o を生成する
$ gcc -c test_driver.c
以上.
-
リンクのときにエラーになるため. また職場の実行プログラムは静的リンクであった. ↩