kazushika
@kazushika (Kazushika)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

「1週間で身に付くC /C++言語」のファイル分割で躓いてます。

ターミナルに実行結果を表示したい

開発環境

macOS Monterey(ver.12.2.1)
C言語

【初心者🔰】ターミナルで、実行結果を出力したいが、エラーが出てしまい実行結果を上手く出力できません。
※初投稿のため、情報不足かもしれないです。

「1週間で身に付くc/c++言語」のファイル分割で、3つのファイルを作成。
それぞれ下記のように、コードを書きました。

main.c
#include <stdio.h>
#include "calc.h"

void main() {
    double d1, d2, d3;
    double a = 1.2, b = 3.4, c = 2.7;

    d1 = avg(a, b);
    d2 = avg(4.1, 5,7);
    d3 = avg(c, 2,8);
    printf("d1 = %f, d2 = %f, d3 = %f\n",d1 , d2, d3);
}
calc.c
#include "calc.h"

double avg(double l, double m) {
    double r = (l + m ) / 2;
    return r;
}
calc.h
#ifndef _CALC_H_
#define _CALC_H_

//関数avgのプロトタイプ宣言
double avg(double, double);

#endif //_CALC_H_

自作したヘッダーファイルのincludepathを通すために、以下のように設定。

c_cpp_proparties.json
 "includePath": [
                "${workspaceFolder}/**",
                "/Users/ユーザー名/Documents/c_lesson/ヘッダーファイル/**"
            ],

tasks.jsonも以下のように設定。

tasks.json
 "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "/Users/ユーザー名/Documents/c_lesson/ヘッダーファイル/**"
            ],

上記設定から、ターミナルにコマンドを入力。

gcc -o calc calc.c main.c

すると以下の結果が出力されました。

lang: error: no such file or directory: 'calc.c'
clang: error: no such file or directory: 'main.c'
clang: error: no input files

ディレクトリには、以下のようにファイルが存在しているので、何が足りないのかわかりません。
スクリーンショット 2022-03-29 0.47.59.png

上記情報のみでは、情報不足かもしれないので何か他に足りない場合は教えてください。

0

5Answer

GCCのコマンドをターミナルに直接入力してビルドしたいんですね?

 現在のターミナルのカレントディレクトリが「c_lesson」で間違いありませんか?
そして、calc.cやcalc.hなんかは「ソースファイル」「ヘッダーファイル」というディレクトリに入ってるんでしょうか?

 もし、この状況でしたら入力したコマンドに指定したファイルのパスが違うと思います。
このコマンドですと、ターミナルのカレントディレクトリにcalc.cやcalc.hがあると認識されてしまいます。
 ですから、指定するファイルを「ソースファイル/calc.c」としないといけません。

$ gcc -o calc ソースファイル/main.c ソースファイル/calc.c
1Like

あとついでなんですが、ビルドしてみてエラーが出ました。

main.c
    d1 = avg(a, b);
    d2 = avg(4.1, 5,7);
    d3 = avg(c, 2,8);

5.7と2.8の少数点が「,」になってるのでもし修正されてなければ修正してみてください。

0Like

 あと、フォルダ名についてなのですが基本的に日本語は絶対使わないでください。
 Visual Studioではソースファイル・ヘッダーファイルのように表示されることがありますよね? でもよくよくファルダをあさってみるとそんなフォルダはありません。あれは、Visual Studioがそう表示しているだけです。

 基本的なフォルダ構成としては、このプログラムでしたら僕はこのようにします。

main/
|-main.c
|-main.h

calc/
|-calc.c
|-calc.h

Visual Studioでも、本当のディレクトリ構造を表示できるのでエクスプローラーのモードを変えてみてください。

0Like

せっかくVSCodeの設定をしているのですから、タスクを使ってビルドしたほうが良いのではないでしょうか?

0Like

OyaTomo さまが解答してくださっていますが、ビルド(コンパイルとリンク)を実行しているディレクトリには、main.c、calc.c、calc.h が存在しないためのようです。

実際に、VSCode を 使用せず に、コードが存在しないディレクトリでビルドをすると、次のように同じエラーが発生しました。(clang は無いですが)

$ cd /tmp/xxxx   # コードが無いディレクトリ
$ ls -lA
total 0
$ gcc -o calc calc.c main.c 
gcc: error: calc.c: No such file or directory
gcc: error: main.c: No such file or directory
gcc: fatal error: no input files
compilation terminated.
0Like

Your answer might help someone💌