- 1. ソース
- 2. Makefile
- 3. デバッグしてみる
1. ソース
/home/hogehoge/lang/cpp/ncurses/ncurses.c
というソースを作成して、以下のように記述しました。
#include <limits.h>
#include <locale.h>
#include <ncurses.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
char *term;
int cols, lines;
WINDOW *win;
setlocale(LC_ALL, "ja_JP.UTF-8");
term = getenv("TERM");
if (setenv("TERM", "vt100", true) != 0)
{
printf("\n端末の設定に失敗しました。\n\n");
return 0;
}
initscr();
win = newwin(LINES, COLS, 0, 0);
keypad(win, 4);
noecho();
nodelay(win, true);
halfdelay(10);
while(true)
{
bool bbreak = false;
char atime[LINE_MAX] = {};
struct tm stm = {};
int y = LINES / 2;
int x = COLS / 4;
localtime_r(NULL, &stm);
asctime_r(&stm, atime);
werase(win);
mvwprintw(win, y-1, x, atime);
mvwprintw(win, y++, x, "何かキーを入力してください ");
mvwprintw(win, y++, x, "終了するには e を入力します ");
wrefresh(win);
int n = wgetch(win);
switch (n)
{
case 'e':
case 'E':
bbreak = true;
break;
default:
break;
}
if (bbreak != false)
{
break;
}
}
werase(win);
wrefresh(win);
delwin(win);
endwin();
setenv("TERM", term, true);
return 0;
}
2. Makefile
「Makefile」は、以下のように作成しました。
CC = clang
target : ncurses.o Makefile
$(CC) -O0 -g -o ncurses ncurses.o -lncursesw
.c.o : Makefile
$(CC) -O0 -g -c $< -o $@
とりあえず、最適化なし、デバッグシンボルを作成ってことです。
3. デバッグしてみる
実行すると
$ ./ncurses
セグメントエラー(coreを出力しました)
てなことになっちゃうのでデバッグしてみるのです。 追而書
|