初めまして。つい最近C言語に手を出しました。
環境はWindows XP VisualC++ 6.0を使用しています。
C言語でプログラムを書く時にはmain関数が必要だということを習ったのですが、先ほど見ていた本に載っていたプログラムを実行すると、main関数が無いから実行できないとエラーが返ってきました。
見てみると確かにmainを宣言しているところが無いのに気づきました。
新規作成する時には大体コンソールアプリケーションを選べばいいよと言われたのでいつもそれで作っていたのですが、どうやらコンソールアプリケーションで作っているから、エラーが返ってくることが分かりました。
プログラムは以下のように始まります。
#include "params.h"
void histgram(unsigned char image_in[Y_SIZE][X_SIZE], long hist[256])
{
int i,j,n;
params.hには画像の幅や高さなどが載っていました。
のちのち画像処理をやりたいと思っているので上のようなプログラムに手を出したのですが、どのようにしたら問題が解決するのか分かりません。
#include <stdio.h>
int main (void)
{
で始まるプログラムしかあまり見たことも触ったこともないため、どこにどうやってmain関数を入れればいいのかが分かりません。
あと、voidの後にhistgramが入っていたり、カッコの中にunsignedなどが入っている理由もわかりません。
恥ずかしいのですが、どなたか教えていただけないでしょうか…
main関数について
Re:main関数について
> C言語でプログラムを書く時にはmain関数が必要だということを習ったのですが、先ほど見ていた本に載っていたプログラムを実行すると、main関数が無いから実行できないとエラーが返ってきました。
結局、そのプログラムは
・コンソールアプリケーション(main関数が必要)
・Windowsアプリケーション(WinMain関数が必要)
のどちらなのでしょうか?
> あと、voidの後にhistgramが入っていたり、カッコの中にunsignedなどが入っている理由もわかりません。
コンソールアプリケーションでもWindowsアプリケーションでも、
C言語のプログラムは(1個以上の)関数が集まってできています。
histgramは関数の名前で、カッコの中にあるのはhistgram関数の引数です。
voidは、histgram関数には戻り値がないことを示します。
「関数」「引数」「戻り値」あたりのキーワードについて、
どのくらいご存じですか?
結局、そのプログラムは
・コンソールアプリケーション(main関数が必要)
・Windowsアプリケーション(WinMain関数が必要)
のどちらなのでしょうか?
> あと、voidの後にhistgramが入っていたり、カッコの中にunsignedなどが入っている理由もわかりません。
コンソールアプリケーションでもWindowsアプリケーションでも、
C言語のプログラムは(1個以上の)関数が集まってできています。
histgramは関数の名前で、カッコの中にあるのはhistgram関数の引数です。
voidは、histgram関数には戻り値がないことを示します。
「関数」「引数」「戻り値」あたりのキーワードについて、
どのくらいご存じですか?
Re:main関数について
boxさん、さっそくのご回答ありがとうございます。
そのコンソールアプリケーション、WINDOWSアプリケーションの違いがよくわからないのです。コンソールの方はDOS窓で動き、Windowsの方はDOS窓ではない、普段使っているようなアプリケーションのような窓で動くのでしょうか?
ただ本に載っていたのをみて、実行したらどうなるのかという好奇心だけで行ったものなんです…
プログラムはヒストグラムを求めるものなので、コンソールの方なのでしょうか…よく分かりません。
関数は、int main(void)と書いてあったら、この場合mainが関数になるのですよね?printfやpowなどが標準関数というものの中に入っていて、使うにはそれぞれのヘッダファイルが必要とは聞きましたが…自作関数も作れるとのことですが、まだそこまで勉強していません。
型 関数名(引数)
{
処理
}
であるから、型がvoidで関数名がhistglam、引数がunsigned~なのですね。
引数は関数に渡される文字と習いました。
戻り値はいまいちよく分かりません…「最初はreturn 0と書いておけば良い」と教えられた程度しか…
そのコンソールアプリケーション、WINDOWSアプリケーションの違いがよくわからないのです。コンソールの方はDOS窓で動き、Windowsの方はDOS窓ではない、普段使っているようなアプリケーションのような窓で動くのでしょうか?
ただ本に載っていたのをみて、実行したらどうなるのかという好奇心だけで行ったものなんです…
プログラムはヒストグラムを求めるものなので、コンソールの方なのでしょうか…よく分かりません。
関数は、int main(void)と書いてあったら、この場合mainが関数になるのですよね?printfやpowなどが標準関数というものの中に入っていて、使うにはそれぞれのヘッダファイルが必要とは聞きましたが…自作関数も作れるとのことですが、まだそこまで勉強していません。
型 関数名(引数)
{
処理
}
であるから、型がvoidで関数名がhistglam、引数がunsigned~なのですね。
引数は関数に渡される文字と習いました。
戻り値はいまいちよく分かりません…「最初はreturn 0と書いておけば良い」と教えられた程度しか…
Re:main関数について
> そのコンソールアプリケーション、WINDOWSアプリケーションの違いがよくわからないのです。コンソールの方はDOS窓で動き、Windowsの方はDOS窓ではない、普段使っているようなアプリケーションのような窓で動くのでしょうか?
さしあたって、そういうご理解でよいと思います。
Microsoft WordやExcel、ジャストシステムの一太郎などのソフトウェアをお使いですか?
これらは、Windowsアプリケーションの仲間です。
> ただ本に載っていたのをみて、実行したらどうなるのかという好奇心だけで行ったものなんです…
> プログラムはヒストグラムを求めるものなので、コンソールの方なのでしょうか…よく分かりません。
ヒストグラムを求めるものなのでコンソールアプリケーションか?という
論理の流れは正しくありません。
main関数があるか、WinMain関数があるか、です。
> 引数は関数に渡される文字と習いました。
関数に渡す文字、ではなくてデータです。
> 戻り値はいまいちよく分かりません…「最初はreturn 0と書いておけば良い」と教えられた程度しか…
すべての関数は、別の誰か(他の関数だったり、あるいはOSだったりします)から呼ばれます。
関数の終了時に、呼び出し元に何らかのデータを返す必要があるときの
一つのやり方として、戻り値を使います。
戻り値の型は、その関数の型と一致していなければなりません。
また、関数には戻り値がないものもあります。先に挙げられていたhistgramは、その例です。
戻り値がない関数は、型がvoidになっています。
さしあたって、そういうご理解でよいと思います。
Microsoft WordやExcel、ジャストシステムの一太郎などのソフトウェアをお使いですか?
これらは、Windowsアプリケーションの仲間です。
> ただ本に載っていたのをみて、実行したらどうなるのかという好奇心だけで行ったものなんです…
> プログラムはヒストグラムを求めるものなので、コンソールの方なのでしょうか…よく分かりません。
ヒストグラムを求めるものなのでコンソールアプリケーションか?という
論理の流れは正しくありません。
main関数があるか、WinMain関数があるか、です。
> 引数は関数に渡される文字と習いました。
関数に渡す文字、ではなくてデータです。
> 戻り値はいまいちよく分かりません…「最初はreturn 0と書いておけば良い」と教えられた程度しか…
すべての関数は、別の誰か(他の関数だったり、あるいはOSだったりします)から呼ばれます。
関数の終了時に、呼び出し元に何らかのデータを返す必要があるときの
一つのやり方として、戻り値を使います。
戻り値の型は、その関数の型と一致していなければなりません。
また、関数には戻り値がないものもあります。先に挙げられていたhistgramは、その例です。
戻り値がない関数は、型がvoidになっています。