UNIX windows98でC言語をプログラムしました。

#include<stdio.h>
void main()
{
int val;
val=5;
printf("今、変数の中身は、 %dです¥n”, val);
val=val+1;
printf(”今、変数の中身は、 %dです¥n", val);
 val=val++;
printf("今、変数の中身は、 %dです¥n”,  val);

}
をファイル名 aaaとして
gcc aaa.c でコンパイルしたところ、
aaa.c: In function 'main':
aaa.c:5:warning: return type of 'main' is not 'int'
とエラ-が現れます。
return(o);を最後に追加するのでしょうか。もし、そうならば、どこに追加する
のか、教えてください。
  

このQ&Aに関連する最新のQ&A

A 回答 (3件)

標準のCでは、main は int型の関数であると定められています。


main が返す値が、そのプログラム自身が返す値として使えるよう
にするためです。

Cのテキストのいくつかは、main を void で宣言したり、教師もそ
れに沿ってそのまま教えてしまうことがありますが、正確には誤り
です。コンパイル時の warning (エラーではない)はそれを警告
しています。warning は場合によっては無視しても正しく動きます
が、それが原因で動かないこともあるので、極力修正しましょう。

結論は、main を int と宣言し、最後は 0 を return しておきましょう。

ちなみに return 文は、後に式が続くだけなので、return (0); の
ようにしなくても、return 0; で十分です。
    • good
    • 0
この回答へのお礼

お答えありがとうございます。
コンパイルは成功しました。

お礼日時:2001/06/12 18:40

戻り値が設定されていないというワーニングですね。


void型は戻り値がないわけではないので、
書いておくのが妥当です。
やっぱり、コンパイルかけたときに
エラーもワーニングもないと気分がいいじゃないですか。

参考URL:http://www.kumei.ne.jp/c_lang/
    • good
    • 1
この回答へのお礼

お答えして頂き、有難うございます。

お礼日時:2001/06/12 18:35

エラーではなくワーニングですから、そのままにしておいても特に問題は


ありませんが一応・・・。

このワーニングは「main関数の戻り値型がintではない」というものです。
main関数は本来、プログラムが正常に終わったかどうかをint型で返す事に
なっているため、boboboboさんの「void main()」という記述が引っかかっ
てしまったわけです。

ですから「void main()」を「int main()」に直し、最後の「}」の直前の
行に「return(0);」を書けばワーニングはなくなるはずです。
    • good
    • 0
この回答へのお礼

お答え有難うございます。早速、アドバイス通りに書き換えると、
コンパイルは上手くできました。 

お礼日時:2001/06/12 18:22

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qprintf( "%d", i % 10 );で?

int count;
int i;
scanf( "%d", &count );
for( i = 0 ; i < count ; i++ )
printf( "%d", i % 10 );「iを10で割った余り」だそうです。
i%5とした場合、 
 仮に5と入力すれば、01234と表示すると思いますが、
何でiを5で割れば5進数みたいにコンピュータが認識するのですか?
理論だけ勉強中で、実際試したことがありません? 
よろしくお願いします。

Aベストアンサー

例えば、246を例に考えてみます。

246を5で割ると49で余りが1

これは書き換えると
246 = 49x5 + 1 という事ですね。

次に49について同様に行なうと
49を5で割ると9で余りが4

これは書き換えると
49 = 9x5 + 4という事ですね。

最初の結果とあわせると、
246 = 9(x5x5) + 4(x5) + 1
という事ですね。

同様に9についても計算すると

246 = 1(x5x5x5) + 4(x5x5) + 4(x5) + 1

となります。


5で割った答えと5で割った余りは、5進数で一つ上の桁へ移せる部分とその桁に残る部分を分けている事になります。
10進数でも32を考えた時、30の部分は上の桁に移せる部分で(10で割った答え部分)2はその桁に残る部分(2 = 32 % 10)ですよね。

Qreturn 0; return 1; まで同じ

#include <stdio.h>
int main()
{
printf("%d %c\n", 65, 65);
return 0;
}
 コンパイル後は
65 A
 return 1;も同じでした。
しかし
 return 2;すると
 Exited: ExitFailure 2  終了しました:出口の失敗2 となります。
 2以上でしたら、出口が塞がるのでろうぐらいしかわかりません!?
 
 どんなバクなのでしょうか!?
 よろしくお願いします。

Aベストアンサー

C 言語の仕事は「0 なり 1 なり 2 なりを返す」までであり, その値にどう対処するかは (「C のプログラム」としては処理を完全に終了しているので) C のあずかり知らぬところです.

なので, 「どんなバクなのでしょうか!?」というのはあなたの使っている OS なりシェルなりなんなりに聞いてください.

Qprintf("%lf",5/3); は 0.000000 ?

Cを勉強中です。
main(){
printf("%lf",5/3);
}
をBorland C++ 5.5.1コンパイラで
コンパイルして実行すると、
0.000000 と表示されてしまいます
1.666666 と表示するには、何が足りないのでしょうか。

Aベストアンサー

printf("%lf",5/3) の 5/3 は整数の割り算となっています。
5.0のように実数を使ってみてください

Qfor(int i = 100, long n = 1; i > n/3i; i++)

for(int i = 100, long n = 1; i > n/3i; i++)
のように、初期設定で型の違う変数を宣言したいんだけど
C++ではこんなふうに2つ以上の型を宣言してはいけないんですか?

Aベストアンサー

,

コンマ演算子の原理です。
forの初期化文で "," で区切れるのは値を返す文だけです。
よってintステートメントもlongステートメントも値を返さないので、この文では使用できません。

というか、むしろ、intステートメントの第2引数としてlongが認識されてしまいます。
外で

int i; long n;

とし

for(i = 0, n = 0; hoge; hoge)

なら可能です。

Q{x = x>y ? x:y; return x;}

#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

Aベストアンサー

inline int max(int x, int y){x = x>y ? x:y; return x;}
これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。


人気Q&Aランキング

おすすめ情報