アプリ版:「スタンプのみでお礼する」機能のリリースについて

windowsのコンパイラーで正しく実行されたのに、gccのコンパイラーでエラーがでたソースコードです。ファィル名test.c です。Linux(Red Hat9) gccです。windowsのコンパイラーはCPad for Borland C++Compilerです。


#include <stdio.h>

void main() //intからvoidに変更した
{
int i, j;
for (i=1; i<=9; i++){
printf("%2d ",i); //%2dで、iが2桁に表示
}
printf("\n");
printf("***************************\n");
//この罫線もどきの書き方はダサいので工夫してください
for (i = 1; i<=9; i++){
for (j = 1; j<= 9; j++) {
printf("%2d ", i*j);
if (j == 9)
printf("\n"); //1行表示後改行
}
}
return; //voidにしたので0を取った!
}

これがLinux(RedHat9)gccでは以下のエラーが出ます。

(test.c: 関数 `main' 内:
test.c:4: 警告: `main' の戻り値の型が `int' ではありません)

 なぜ、同じソースコードでエラーが起こるのですか?
 Linux gccでは、この場合`int' 以外の何が必要なのでしょうか?

以上よろしくお願いします。

A 回答 (3件)

> LinuxのGUIの画面ではtestはバイナリーになっていて、何かのプログラムと関連付けを要求します。



アイコンダブルクリックとかで実行しようとしてるのでしょうか?普通にコンソールで実行しましょう。関連づけなんて必要ないです。

> 念のため、オッシャルように./.を着けてやっても、(sshから)エラーが返されます。

"./."ではなく"./"です。つまり"./test"と実行してください。ただし、実行ファイルのディレクトリにいないとダメです。別のディレクトリにいるときはcdするか、フルパスで実行してください。

SSHに関してはよくわかりません。リモートで実行するするということなのかな?とりあえずローカルで試してみてください。ローカルでうまくいくのにリモートでうまくいかないということなら再度質問しましょう。問題を解決するコツはできるだけ単純化して考えることです。

このあたり、自分でプログラムを組む、組まないにかかわらず、Linuxを使用する場合の基本です。がんばって勉強してください。健闘を祈ります。
    • good
    • 0
この回答へのお礼

./testで成功しました。ありがとうございました。
リモートで動かしているのは、サーバー構築のためにずっとwindowsからsshを通じてputty等の画面でやっています。動いているLinuxのcpuが遅い場合は、ラクでした。普段はLinuxのGUI画面は使用していませんので!
 とりあえず、お礼まで

お礼日時:2005/02/11 06:56

> Linuxでは、出来ているということはわかりますが、実行の方法が分かりません。



出来たファイルはa.outとかでしょうか?
その場合、カレントのパスなどを付けて、

./a.out

のようにしないと実行できない設定になっている場合があります。最近は割りと標準。

--
ファイルを片っ端から削除する「ls」という名前のプログラムがあったような場合、誤動作を避けるような意味があります。

この回答への補足

ls
コマンドでみると、test test.cがあります。LinuxのGUIの画面ではtestはバイナリーになっていて、何かのプログラムと関連付けを要求します。適当な、テキスト画面が出るものと、関連付けしてみましたが、黒い画面が、一瞬立ち上がったきりでした。
a.outでは ありません。念のため、オッシャルように./.を着けてやっても、(sshから)エラーが返されます。そのようなファィルはナイト!

補足日時:2005/02/10 21:58
    • good
    • 0

int main



として下さい。みんなの幸せのためです。


KOHNO TAKASHI HOME PAGE - C言語 FAQ 日本語訳 - 11章 ANSI/ISO規格C
http://www.kouno.jp/home/c_faq/c11.html

-----以下引用-----
11.12:
main()をvoidとして宣言して「mainの戻り値がない」という目障りな メッセージを消すことができるか。

A:

できない。main()はintを戻り値とし、(適切な型の)0個か2個の引数 を持つと定義しなければならない。exit()を呼んでもまだ警告が出る のであれば、冗長であるがreturn文を挿入するしかない(あるいは使 える環境にいるのであれば「ここには届かないよ:NOTREACHED」命令 を使う)。

References:
ANSI Sec. 2.1.2.2.1, Sec. F.5.1; ISO Sec. 5.1.2.2.1, Sec. G.5.1; H&S Sec. 20.1 p. 416; CT&P Sec. 3.10 pp. 50-51.

-----以上引用-----

--
> なぜ、同じソースコードでエラーが起こるのですか?

windowsのコンパイラーでエラーが起きないのは、ちょっとした優しさ、親切心みたいなもんです。
エラーチェックのレベルを厳しくしても大丈夫でしょうか?

参考URL:http://www.kouno.jp/home/c_faq/c11.html

この回答への補足

int mainとしてreturn 0;にもどしたら、出来ました。
色々な規格がcにもあるのですね!
 できた実行ファィルがgccでは、この場合.exeなしの
testですが、windosでは、即、実行してくれますが、Linuxでは、出来ているということはわかりますが、実行の方法が分かりません。
Linuxの方に戻り、ファィルの関連付けをやっても、あまり正確には、実行できません。この場合、sshでwindowsから操作して”test”ファィルを実行させるにはどうすればいいのですか?

補足日時:2005/02/10 20:59
    • good
    • 0

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