
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.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;
}
//追加終了
No.1
- 回答日時:
エラーメッセージを読みとく訓練をしましょう。
上達のコツです。
C言語から実行ファイルができるまでは大きく3つの段階があります。
・マクロの展開や #includeの処理等を行う「前処理」
・前処理されたソースコードを機械語に変換する「(狭義の)コンパイル」
・複数のファイルにちらばっている機械語を一つに結び付ける「リンク」
例えば、 printf ですが、これは純粋な意味では「C言語ではありません」
このプログラムの variance 関数と同じで、誰かがC言語用に作ったものです。
それを、あなたのプログラムと「リンク」させることで、思い通りに出力させることができています。
このときの、関数名等の総称が「Symbol(シンボル)」です。
Undefined symbols というメッセージは、「シンボルが定義されていない」ということです。
リンク先があるかどうかは、実際リンクするときでないとはっきりしません。
なので、(狭義の)コンパイルではエラーにならず、リンク時にはじめて判明します。
この場合、 _main というシンボルが見つからない、と言っています。
コンパイルされた時に、関数名は、 _ を付けたシンボルになります。
つまり、 このメッセージは「 mainをリンクさせようとしたけど見つからない」 と言っています。
このメッセージを元に、プログラムを眺めてみると、確かに main 関数がありません。
C言語では、 実行のスタート地点である main 関数が無ければ、実行ファイルにはできません。
/* この言い方は正確ではありませんが、今は混乱のもとなのでそういうことにしておきます */
「ポインタを用いた平均,分散の求め方」とは無関係です。
・もし、他のファイルに main 関数が記述されているのなら、コンパイルのコマンドラインを変えて、その別ファイルのmain関数を含めるようにする必要があります
(分割コンパイル という手法です)
・もし、このファイルだけで完結するのなら、main関数を追加します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語で、繰り返し文の中で、0....
-
プログラムでの数字につく”f”の...
-
関数におけるif文とreturn文に...
-
C言語 関数プロトタイプ宣言の...
-
待ち行列シュミレーションのプ...
-
C言語の型による処理速度の違い
-
2次元配列 CXX0030とい...
-
プログラミングについての質問
-
「割り算」 と 「分数の掛け算」
-
64bit系でのmalloc
-
C 開放してるのにエラー(doubl...
-
float型とdouble型の変数の違い...
-
至急です! マクロ定義で #defi...
-
c言語のコンパイルエラー canno...
-
qsortと動的確保の2次元配列
-
-1.#IND00 をデバッグしたい
-
C言語の乱数生成について。 0〜...
-
c言語のプログラミングについて...
-
doubleは常に%lfとするべきなのか
-
Enterキーを押されたら次の処理...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
doubleの変数にintとintの割り...
-
float型とdouble型の変数の違い...
-
c言語で、繰り返し文の中で、0....
-
至急です! マクロ定義で #defi...
-
C 開放してるのにエラー(doubl...
-
C言語の型による処理速度の違い
-
C言語 関数プロトタイプ宣言の...
-
float と double
-
ラグランジュの補間法のCプログ...
-
C言語のプログラムで#include<m...
-
c言語のコンパイルエラー canno...
-
2分法で方程式の複数の解を自...
-
2次方程式の解を求めるプログ...
-
C言語で台形公式を使った二重積...
-
Cプログラミングの問題です。ニ...
-
物体が往復する動きを作りたい
-
関数におけるif文とreturn文に...
-
doubleは常に%lfとするべきなのか
おすすめ情報