C言語初心者なのですが課題で出されたポインタを用いた平均,分散を求めるプログラムを組んでみたのですが,以下のようなエラーが出て正しく出力できません。
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ソースプログラムは以下のとおりです。詳しい方よろしくお願いいたします。
#include<stdio.h>
double in_data[5] ={1.0,2.0,3.0,4.0,5.0};
double mean = 0.0;
double var =0.0;
void variance(double in_data[],int n,double *mean,double *var){
double sum = 0.0;
for(int i=0;i<n;i++){
sum += in_data[i];
}
*mean = sum / n;
for(int i=0;i<n;i++){
*var += (in_data[i] - *mean)*(in_data[i] - *mean);
}
printf("平均:%f\n",mean);
printf("分散:%f\n",var);
}
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
エラーメッセージを読みとく訓練をしましょう。
上達のコツです。
C言語から実行ファイルができるまでは大きく3つの段階があります。
・マクロの展開や #includeの処理等を行う「前処理」
・前処理されたソースコードを機械語に変換する「(狭義の)コンパイル」
・複数のファイルにちらばっている機械語を一つに結び付ける「リンク」
例えば、 printf ですが、これは純粋な意味では「C言語ではありません」
このプログラムの variance 関数と同じで、誰かがC言語用に作ったものです。
それを、あなたのプログラムと「リンク」させることで、思い通りに出力させることができています。
このときの、関数名等の総称が「Symbol(シンボル)」です。
Undefined symbols というメッセージは、「シンボルが定義されていない」ということです。
リンク先があるかどうかは、実際リンクするときでないとはっきりしません。
なので、(狭義の)コンパイルではエラーにならず、リンク時にはじめて判明します。
この場合、 _main というシンボルが見つからない、と言っています。
コンパイルされた時に、関数名は、 _ を付けたシンボルになります。
つまり、 このメッセージは「 mainをリンクさせようとしたけど見つからない」 と言っています。
このメッセージを元に、プログラムを眺めてみると、確かに main 関数がありません。
C言語では、 実行のスタート地点である main 関数が無ければ、実行ファイルにはできません。
/* この言い方は正確ではありませんが、今は混乱のもとなのでそういうことにしておきます */
「ポインタを用いた平均,分散の求め方」とは無関係です。
・もし、他のファイルに main 関数が記述されているのなら、コンパイルのコマンドラインを変えて、その別ファイルのmain関数を含めるようにする必要があります
(分割コンパイル という手法です)
・もし、このファイルだけで完結するのなら、main関数を追加します。
No.2
- 回答日時:
以下のようにしてください。
修正個所はコメントを入れています。
内容はチェックしていません。
-----------------------------------
#include<stdio.h>
double in_data[5] ={1.0,2.0,3.0,4.0,5.0};
double mean = 0.0;
double var =0.0;
void variance(double in_data[],int n,double *mean,double *var){
double sum = 0.0;
for(int i=0;i<n;i++){
sum += in_data[i];
}
*mean = sum / n;
for(int i=0;i<n;i++){
*var += (in_data[i] - *mean)*(in_data[i] - *mean);
}
//削除開始
// printf("平均:%f\n",mean);
// printf("分散:%f\n",var);
//削除終了
}
//追加開始
int main(){
variance(in_data,5,&mean,&var);
printf("平均:%f\n",mean);
printf("分散:%f\n",var);
return 0;
}
//追加終了
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
C言語 関数プロトタイプ宣言の...
-
浮動小数点の定数
-
C 開放してるのにエラー(doubl...
-
c言語で、繰り返し文の中で、0....
-
int とdoubleの比較
-
(C,C++言語)関数の引数は自動キ...
-
Cで3乗根を求める方法
-
複利の利率を求めるプログラム...
-
C言語 質問です。
-
float型とdouble型の変数の違い...
-
関数におけるif文とreturn文に...
-
演算子のオーバーロード
-
C言語で-23乗を取り扱うには
-
至急です! マクロ定義で #defi...
-
c言語のプログラミングについて...
-
C言語初心者 構造体 課題について
-
c言語 実数乱数の問題
-
C言語を実行すると-infが出てき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
C 開放してるのにエラー(doubl...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
至急です! マクロ定義で #defi...
-
C言語の型による処理速度の違い
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
浮動小数点の定数
-
int とdoubleの比較
-
doubleは常に%lfとするべきなのか
-
difftime()について
-
C言語でdouble型の小数点の引き...
-
たくさんの数の平均を求める方...
-
斜辺と角度て底辺と高さを出したい
-
C言語で台形公式を使った二重積...
-
float?数字の後にLがつくもの
-
listに構造体を格納
おすすめ情報