Cygwin なんでも掲示板

一覧最新記事過去一覧 | 検索FAQアンテナHOME
(新規投稿・発言はできません)


スレッド

└◇1250:
gcc for文の不具合 [koba] 06/13 17:16

 ├◇1252:Re:gcc for文の不具合 [MSだす。] 06/13
 ├◇1253:Re:gcc for文の不具合 [な] 06/13
 └◇1254:Re:gcc for文の不具合 [やまもと] 06/13
  └◇1262:Re[2]:gcc for文の不具合 [koba] 06/16 <


1250● gcc for文の不具合[ koba ] 2003 06/13 17:16
以下のプログラムのfor文が正しく実行されません。
(上限が負の値になるので、一回も実行されないはずが、
無限ループのようになる)
これは、なぜでしょうか?gccのbugでしょうか?
bugの場合には、GNUに詳しい方がいらしたら、bug reportを
出していただけないでしょうか。

/* test_for.c */
#include <stdio.h>
main()
{
int i,m;
char name[128];

m = 10;

strcpy(name,"12345678901234567890123456");
printf("%s ",name);
for (i=0;i<24-strlen(name);i++) printf(".");
printf(" %d\n",m);
}

コンパイルとgcc(Cygwin version 2.340.2.5に入っていたもの)の情報は以下です。

135:/tmp>gcc test_for.c

136:/tmp>gcc -v
Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/3.2/specs
Configured with: /netrel/src/gcc-3.2-3/configure --enable-languages=c,c++,f77,java --enable-libgcj --enable-threads=posix --with-system-zlib --enable-nls --with
out-included-gettext --enable-interpreter --disablesjlj-exceptions --disable-version-specific-runtime-libs --enable-shared --build=i686-pc-linux --host=i686-pc-cygwin --target=i686-pc-cygwin --enable-haifa --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib --includedir=/nonexistent/include --libexecdir=/usr/sbin
Thread model: posix
gcc version 3.2 20020927 (prerelease)
137:/tmp>
スレッド一覧


1252● Re:gcc for文の不具合[ MSだす。 ] 2003 06/13 23:04

$ gcc -W test_for.c
test_for.c: In function `main':
test_for.c:10: warning: comparison between signed and unsigned
ソースコードのほうに問題があるようです。
$ gcc -Wall test_for.c
test_for.c:4: warning: return type defaults to `int'
test_for.c: In function `main':
test_for.c:8: warning: implicit declaration of function `strcpy'
test_for.c:10: warning: implicit declaration of function `strlen'
test_for.c:16: warning: control reaches end of non-void function
他にも書き直した方がいいところがあるかも。
何はともあれコンパイル時にはwarningを出しましょう。
スレッド一覧


1253● Re:gcc for文の不具合[ な ] 2003 06/13 23:45
MSだす。さんのコメントがすでについていますが、
プログラムの問題です。

期待に反した動作であっても、ANSI Cの規約に従っており、
記述されたとおりに動作しています。

「整数 格上げ」「インテグラル プロモーション」などで
検索してみてください。

あるいは、C言語による最新アルゴリズム事典の
整数の項目を読んでください。

# 奥村晴彦, 1991, 技術評論社, ISBN4-87408-414-1
# 似たようなタイトルの本がありますが、
# 間違えずに奥村先生の本を選んでください。
# 類似品は有害なだけです。
スレッド一覧


1254● Re:gcc for文の不具合[ やまもと ] 2003 06/13 23:46
やまもとと申します。

strlenの戻値がunsignedになっているものと思われます。
そのため、2^32-2の大きな値になったものと思われます。

for文を下記に変更し、通常のintegerとして認識させてやればOKです。

for (i=0;i<(int)(24-strlen(name));i++) printf(".");
スレッド一覧


1262● Re[2]:gcc for文の不具合[ koba ] 2003 06/16 16:17
早々の返信ありがとうございます。
string.hでstrlen()の戻り値の型を確認したら、size_tになっており、size_tは、stdio.hのなかで、unsigned intになっていました。strlen()の戻り値は、intだと思い込んでいました。
(私のCの教科書は、カーニハン&リッチー著なもので)
スレッド一覧

早田のホームページへ
CGIROOM