![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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件)
- 最新から表示
- 回答順に表示
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語を実行すると-infが出てき...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
float型とdouble型の変数の違い...
-
プログラムでの数字につく”f”の...
-
C言語の型による処理速度の違い
-
C 開放してるのにエラー(doubl...
-
c言語 標準体重計算のプログラ...
-
C言語 関数プロトタイプ宣言の...
-
方程式を2分法を用いて解くプロ...
-
至急です! マクロ定義で #defi...
-
C言語でポインタを用いた平均,...
-
浮動小数点の定数
-
関数プロトタイプ無しで、引数...
-
C言語で
-
遺伝的アルゴリズムのプログラム
-
C言語の構造体の問題が分かりま...
-
C言語のデバック 領域の二重解...
-
C言語で台形公式を使った二重積...
-
指数の表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
float型とdouble型の変数の違い...
-
doubleの変数にintとintの割り...
-
c言語で、繰り返し文の中で、0....
-
C言語 関数プロトタイプ宣言の...
-
関数におけるif文とreturn文に...
-
C 開放してるのにエラー(doubl...
-
C言語の型による処理速度の違い
-
至急です! マクロ定義で #defi...
-
doubleは常に%lfとするべきなのか
-
Cで3乗根を求める方法
-
-1.#IND00と出てしまうのですが...
-
C言語で-23乗を取り扱うには
-
C++で外積
-
2次方程式の解を求めるプログ...
-
方程式を2分法を用いて解くプロ...
-
ニュートン法
-
c言語のコンパイルエラー canno...
-
difftime()について
おすすめ情報