C言語 共通ヘッダー作成に関する事

田中 孝征 0 評価のポイント
2024-06-15T02:44:42.27+00:00

共通ヘッダー作成に関する質問

共通ヘッダー<getputch.h>

#ifndef __GETPUTCH
  
  #define __GETPUTCH

/* MS-Windows系 */
  #if defined(_MSC_VER) || (__TURBOC__) || (LSI_C) 

    #include <conio.h>

    #static void init_getputch(void) {}
    #static void term_getputch(void) {}

/* UNIX/ Linux/ macOS */
#else

   #include <curses.h>
   #include <stdio.h>
   #include <string.h>

   #undef getch
   #undef putchar
   #undef puts
   #undef printf
   #undef scanf

   static void init_getputch(void)
   {
       initscr();
       refresh();
   }      

   static void term_getputch(void)
   {
       endwin();
   }

   static int putch(int ch)
   {
       int result = addch(ch) == OK ? ch : EOF;
       refresh();
       return result;
   }

   static int __putchar(int ch)
   {
       return putch(ch);
   }

   static int __printf(const char *format, ...)
   {
       int count;
       va_list ap;
       static char __buf[4096];

       va_start(ap, format);
       vsprintf(__buf, format, ap);
       va_end(ap);

       count = printw("%s", __buf) == OK ? strlen(__buf) : EOF;
       refresh();
       return count; 
   }

   static int __puts(const char *s)
   {
       int count = printw("%s\n", s) == OK ? strlen(s) + 1 : EOF;
       refresh();
       return count;
   }

   static int __getch(void)
   {
       int ch;
       cbreak();    noecho();
       ch = getch();
       nocbreak();  echo();
       return ch;
   }

   #define getch   __getch
   #define putchar __putchar
   #define printf  __printf
   #define puts    __puts
   #define scanf   __scanw

  #endif

#endif

<動作環境>
  OS        : Windows 10
  エディタ  : Visual Studio Code 1.89.1
    コンパイラ: gcc

このソースコードは、「学習本」の抜粋です。
本の説明では、
_MSC_VER、__TURBOC__、LSI_Cは、それぞれVisual C++、Borlan C++(Turbo C++)、
LSI Cの処理系で、処理系識別のための独自に定義されているマクロです。
 上記以外のMS-Windows用の処理系をお使いであれば、その処理系で独自に定義されるマクロを追加する必要があります。
との事です。

マクロ定義が不適切な為、コンパイルすると<curses.h>が見つからない旨の
コンパイルエラーが発生します。

適切なマクロを知りたいです。
今後の学習に影響します。

宜しくお願いします。
    
                              以上
                                              


  


C#
C#
C 言語ファミリをルーツとし、コンポーネント指向プログラミングのサポートを含む、オブジェクト指向およびタイプセーフのプログラミング言語。
33 件の質問
C++
C++
C プログラミング言語の拡張機能として作成された高レベルの汎用プログラミング言語。低レベルのメモリ操作機能に加えて、オブジェクト指向、汎用、関数型の機能を備えています。
23 件の質問
{count} 件の投票

1 件の回答

並べ替え方法: 最も役に立つ
  1. gekka 9,911 評価のポイント MVP
    2024-06-16T16:00:09.07+00:00

    tasks.jsonのビルドタスクのgccへ渡す引数にincludeするヘッダ類のある場所のパスとリンクの指定をしてください。

    {
        "tasks": [
            {
                "type": "cppbuild",
                "label": "C/C++: g++.exe アクティブなファイルのビルド",
                "command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
                "args": [
                    "-fdiagnostics-color=always",
                    "-g",
                    "${file}",
    
    "-I","C:\\msys64\\ucrt64\\include\\ncurses",
    "-l","ncurses",
    "-D","NCURSES_STATIC",
    
                    "-o",
                    "${fileDirname}\\${fileBasenameNoExtension}.exe",
                ],
                "options": {
                    "cwd": "C:\\msys64\\ucrt64\\bin"
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": {
                    "kind": "build",
                    "isDefault": true
                },
                "detail": "デバッガーによって生成されたタスク。"
            },
        ],
        "version": "2.0.0"
    }
    
    0 件のコメント コメントはありません

お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。