• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コンパイル結果が違う)

VC++2010でコンパイルした場合にt2の値が0になる理由

このQ&Aのポイント
  • VC++2010のCL.exeでコンパイルした場合、プログラム実行時にt2の値が0になる現象が発生します。
  • また、実行結果も遅くなることが報告されています。
  • この問題の原因は現在のところ不明ですが、VC++2010でのコンパイルに関連するバグや最適化の違いが関与している可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

VC++10ではtime_tの型がデフォルトで__int64になっています。longではないので%ldでは正しく表示できません。

参考URL:
http://msdn.microsoft.com/ja-jp/library/1f4c8f33(VS.80).aspx
tdr2500
質問者

お礼

おかげさまで、サッパリしました。 変な動きをしたら、型を疑え!ですね。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

キャストするのが正当ですね printf("\ntime1=%ld time2=%ld\n", (long)t1, (long)t2);

tdr2500
質問者

お礼

ありがとうございました。 そうですね。 型でした。 勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

time2の表示にt1の上位4バイトが表示されるのでしょうね printf2回に分ければ表示はされます printf("\ntime1=%ld ", t1); printf("\ntime2=%ld \n", t2);

tdr2500
質問者

お礼

ありがとうございました。 勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • コンパイルエラー

    このソースを実行しても、コンパイルエラーになります。エラーメッセージは、 エラーE2449で19行目で、'eng'のサイズが不明またはゼロとでます。これが、二つ出ます。また20行目の'mat'も一緒のが二つでます、ほかにもでるのですが、これが、分からないので教えてください。宜しくお願いします。また、int max= vc[0];の意味も教えてください。 #include <stdio.h> #define NUMBER int max_of(int vc[ ],int no) { int i; int max = vc[0]; for (i=1; i< no; i++) if(vc[i] > max) max= vc[i]; return(max); } int main(void) { int i; int eng[NUMBER]; /*数学の点数*/ int mat[NUMBER]; /*英語の点数*/ int max_e, max_m; /*最高点*/ printf("%d人の点数を入力してください。\n", NUMBER); for (i=0; i<NUMBER; i++) { printf("[%d] 英語 :",i+1); scanf("%d", &eng[i]); printf(" 数学 :"); scanf("%d", &mat[i]); } max_e = max_of(eng, NUMBER); /*英語の最高点*/ max_m = max_of(mat, NUMBER); /*数学の最高点*/ printf("英語の最高点=%d\n", max_e); printf("数学の最高点=%d\n", max_m); return (0); }

  • time()関数について

    このたび、一定処理にかかる時間を調べるために、 次のようなプログラムを作成しました。 #include <stdio.h> #include <time.h> int main(void) { int i; long time; time_t t1, t2; time(&t1); for (i = 1; i <= 5000; i++) { printf("%d, ", i); } time(&t2); printf("\nTime1 = %lf\tTime2 = %lf\n", t1, t2); time = t2 - t1; printf("かかった時間:%lf\n", time); return 0; } 1-5000まで、数字を表示するために、 こういうプログラムを作ったのですが、 どうもtime()関数のところでエラーが出ます。 関数でないものを呼び出している(関数 main ) とでます。time.hをインクルードしてあるのですが、 何が原因なのか分かりません。 コンパイラはBCC5.5を使っています。 ご教授願います。

  • 無限

    今、ランダムな数を無限に出すプログラムを作っています。一応 #include <stdio.h> #include <time.h> #include <stdlib.h> main () { int word,i; srand (time(NULL)); word=rand(); printf("number!!\n"); for (i=0;i<3;i--) { printf("%d\n",word); } return 0; } というかんじで作ったのですが、コンパイルして実行すると、同じ数しか出てきません。どうすればいいか教えてください。

  • このプログラムの結果は正しいのでしょうか?

    下記のプログラムはregister変数へのアクセスが高速であることを確認するためのプログラムです #include <stdio.h> #include <time.h> int i; /* これはグローバル変数なので、 register変数には変換されない */ int main(void) { register int j; int k; clock_t start, finish; start = clock(); for(k=0; k<100; k++) for(i=0; i<32000; i++); finish = clock(); printf("レジスタを使わないループの刻み数: %ld \n", finish - start); start = clock(); for(k=0; k<100; k++) for(j=0; j<32000; j++); finish = clock(); printf("レジスタを使ったループの刻み数: %ld \n", finish - start); return 0; } 【質問】 このプログラムを実行すると、 レジスタを使わないループの刻み数: 15 レジスタを使ったループの刻み数: 0 と表示されます。 この結果はregister変数へのアクセスが高速であることの証明になるのでしょうか? また「刻み数」とは何のことですか?教えて頂けないでしょうか?

  • time関数

    time関数で取得した値をファイル名として、任意のディレクトリにファイルを作成したいのですが、実装方法がわかりません お分かりの方、教えていただけませんでしょうか #include<stdio.h> #include <stdlib.h> #include <time.h> #include<sys/types.h> #include<unistd.h> time_t time(time_t *tloc); int main(void){ char keys[16] = "\x00"; time_t t; t = time(&t); printf("%ld\n", t); FILE *fp; fp = fopen(・・・・・ "w");    :     :     : fclose(fp);

  • CのDLLをVC++でコンパイルしたいのですが、エラーになってしまいます。

    c言語の初心者なのですが、質問させて下さい。 javaからCのDLLを呼び出したく、 (下記のソースを書いたのですが、VC++でコンパイルすると LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/HelloWorld.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と出てしまいます。 過去ログ等を見て、作成しているプロジェクトが悪いのかなと思い、 MFC appWizark(dll) win32 Application win32 Console Application win32 Dynamic-Link Library 等を作ってみてコンパイルしてみたのですが、駄目でした。 ちなみにDOSプロンプトで cl -IC:\j2sdk1.4.2_10\include\win32 -LD HelloWorl d.c -o HelloWorld.dll と実行するときちんとコンパイルできて、正常に実行も出来ました。 VC++でどうやればコンパイルできるのでしょうか? #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_printMessage (JNIEnv *env, jobject me) { printf("Helo World!!!\n"); return; }

  • CGIコンパイルエラーについての質問

    CGIコンパイルエラーについての質問 gcc ppp.c -o pppとコンパイルしたらerrorが出てしまいます io.h そのようなファイルやディレクトリは存在しませんとでます CentOS Vware Playerを使っています #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <io.h> #include <time.h> void showimg(char []); int main(void) { int no; char *imgfile[] = {"img1.jpg","img2.jpg","img3.jpg"}; srand((unsigned int)time(NULL)); no = rand() % 3; printf("Content-type: image/jpeg\n\n"); showimg(imgfile[no]); return 0; } void showimg(char imgfile[]) { FILE *fp; char buf[1024]; int i, size; fp = fopen(imgfile, "rb"); if(fp != NULL) { _setmode(_fileno(stdout), _O_BINARY); while((size = fread( buf, sizeof(unsigned char), 1024, fp )) != 0) { for(i = 0 ; i < size ; i++) { printf("%c", buf[i]); } } fclose(fp); fflush(stdout); _setmode(_fileno(stdout), _O_TEXT); } } このプログラムを正しくコンパイルできて画像をランダムに表示できるようにしたいです どなたかお教えください

    • ベストアンサー
    • CGI
  • 乱数について

    Visual Studio2008を使っています。 #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void){ int i; srand(time(NULL)); i=rand(); printf("%d\n",i); return 0; } 乱数を作るために上のようなプログラミングを作りました。 これを「ソリューションのビルド」すると 【warning C4244: '引数' : 'time_t' から 'unsigned int' への変換です。データが失われる可能性があります。】 と出ます。 このまま行っても乱数が出来るのですが どうしたらいいのでしょうか? 8行目を srand(time_t(NULL)); srand((unsigned)time(NULL)); と変えればいいのでしょうか? time_tでやると乱数が同じ値しか出てきません。 教えてください。

  • 何番目に作成されたのかを表示させる方法

    ある範囲内で整数を複数個、適当につくり、その整数の平均値を取った後、適当に作った整数と最も近い平均値が何番目に作成されたのかを表示させるという問題についての質問です。 とりあえず1から100までの整数、その数10個にして、 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int a[9]; int ave; time_t t; int i; int sum; srand(time(&t)); for(i = 0; i < 10; i++){ a[i] = rand() % 100; printf("ransu%d\n", a[i]); } ave += a[i] / 10; printf("ave%d\n", ave); return 0; } と、すればとりあえず乱数10個は生成されたのですが、何故かaveの値が合いません。 あと、この生成された乱数とaveの絶対値の差が最も小さいもの=最も平均値と生成された乱数の値が近い、と言うプログラムを書けば良いのだと思うのですが、その場合、どの様な式を使えば導き出せるのか、教えて頂ければ幸いです。 よろしくお願いいたします。

  • コンパイルエラー

    コンパイルしても、12行目(printf("%d番目の整数を入力してください。"i+1);が、関数呼び出しに)がないとでます。でもどこが間違っているか分かりません。 教えてください。お願いします。 #include <stdio.h> int main(void) { int num; int sum=0; int i; for(i=0; i<10; i++){ printf("%d番目の整数を入力してください。"i+1); scanf("%d", &num); sum+=num; } printf("合計は、%dです。\n", sum); return(0); }