0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[03] C言語でコンソールから関数を呼び出す機構の振り返り ...デバッグ対象のプログラム

Last updated at Posted at 2021-08-07
本シリーズのトップページ
https://qiita.com/robozushi10/items/fc185b5da0509b9a631f

はじめに

本記事の趣旨は「01 概要」に記しているが、
13年前(=2008年) に職場のプログラムの挙動をマネて実装した
「コンソールから関数を呼び出す機構」の振り返りである.

本項では次の (1)(2) について記す.

(1) デバッグ対象のプログラムコード *.c が存在する.
 ⬇️
(2) *.c をコンパイルして *.o を作成する
 ⬇️

詳細

(1) について

下記については次の意味である.

(1) デバッグ対象のプログラムコード *.c が存在する.

デバッグ対象は test_driver.c である.

今回、関数呼び出しの際にサポートしている引数の型は int と文字列のみなので、
intchar * のみを引数に持つ関数を定義している.

また、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

 
以上.

  1. リンクのときにエラーになるため. また職場の実行プログラムは静的リンクであった.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?