[過去ログ] 【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
953: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/07/14(金) 21:46:17.67 ID:RoIBY40S(6/8) AAS
atexitはマニュアルに書いてある通りだから、ここでいちいち説明する必要はない。
954: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/07/14(金) 21:53:53.48 ID:RoIBY40S(7/8) AAS
マニュアルこそが聖書。マニュアルを読まない奴等はノンプレイヤー。
955: デフォルトの名無しさん [sage] 2017/07/14(金) 22:54:13.51 ID:RlDfzlps(1) AAS
つまりexit()はバカ発見器ってこと?
956: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/07/14(金) 23:01:28.54 ID:RoIBY40S(8/8) AAS
C++でexit使うぐらいなら、代わりにC++例外を使った方がいいよ。デバッグしやすいし。
957: デフォルトの名無しさん [sage] 2017/07/15(土) 05:41:00.21 ID:81gh4ly6(1) AAS
>>947947(3): デフォルトの名無しさん [sage] 2017/07/14(金) 20:20:31.05 ID:8ghhANnS(1) AAS
えっ
mainのreturnでint値返すのはexitをその返り値で呼ぶのと全く等価でしょ?
少なくとも現行のC,C++規格では等価と書いてあるけど現実の実装ではそうなってないってこと?
exit() 関数に入ってしまってはデストラクタが働かないのに,それでも return 文と一緒といいはるの?
それ規格がまちがってるから,そのうち修正がはいるはず
958(1): デフォルトの名無しさん [sage] 2017/07/15(土) 13:25:52.33 ID:d+yGYUAe(1/6) AAS
ポインタの作法に慣れないです
読めるけどかけないです
959: デフォルトの名無しさん [sage] 2017/07/15(土) 16:38:44.94 ID:sZ4h7fLQ(1) AAS
ポインタは2段までしか使わないなあ
関数ポインタはstd::functionに入れる癖がついたし
960: デフォルトの名無しさん [sage] 2017/07/15(土) 17:20:33.71 ID:d+yGYUAe(2/6) AAS
#include<stdio.h>
int unko(int x);
int aho(int *y);
int main(void) {
int a[5] = { 1,2,3,4,5 };
unko(a);
aho(&a);
printf("%x\n%x\n", a, &a);
return 0;
}
int unko(int x) {
printf("%x\n", x);
return;
}
int aho(int*y) {
printf("%d\n%d\n",*(y+1), y[2]);
return;
}
このとき関数unkoで配列aの中身にアクセスする方法ってありませんか?
アドレスがわかっているからできそうな気もするんですがよく解りません。
961: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/07/15(土) 17:27:13.54 ID:xLcEZRbh(1) AAS
aがint a[5]であるとき、aはint配列の先頭アドレスだ。unkoの引数をポインターにしろ。
962: デフォルトの名無しさん [sage] 2017/07/15(土) 17:56:11.02 ID:d+yGYUAe(3/6) AAS
はい
963(1): デフォルトの名無しさん [sage] 2017/07/15(土) 20:48:00.24 ID:iuayY/9E(1) AAS
そもそもこのソースコンパイルエラーになるんじゃね?
964: デフォルトの名無しさん [sage] 2017/07/15(土) 21:29:06.16 ID:d+yGYUAe(4/6) AAS
>>963
VSだとコンパイラ通るんですが他のだと通りませんか?
あと関数unkoをいろいろ弄ってたんですが
#include<stdio.h>
void unko(int x);
void aho(int *y);
int main(void) {
int a[5] = { 1,2,3,4,5 };
unko(a);
aho(a);
printf("%x\n%x\n", a, &a);
printf("%d\n",a[4]);
return 0;
}
void unko(int x) {
printf("%x\n", x);
int *p = x;
printf("%d\n%d\n", p[1],*(p+2));
p[4] = 10;
return;
}
void aho(int*y) {
printf("%d\n%d\n",*(y+1), y[2]);
return;
}
こんな記述にすれば少なくともVSでは引数をポインタにしなくても配列aの要素を覗いたり操作したりできることがわかりました。
965: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/07/15(土) 21:31:54.33 ID:18nkvKxh(1/7) AAS
型がめちゃくちゃだあああ!!!
型が形無し!
966: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/07/15(土) 21:36:49.71 ID:18nkvKxh(2/7) AAS
できることとやってもいいことは違うんだよ。
967: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/07/15(土) 21:39:23.41 ID:18nkvKxh(3/7) AAS
コンパイル時に出て来る度重なる警告を無視したらダメだよ。
968: デフォルトの名無しさん [sage] 2017/07/15(土) 21:44:11.03 ID:d+yGYUAe(5/6) AAS
すみません
969: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/07/15(土) 21:46:08.79 ID:18nkvKxh(4/7) AAS
お使いの32ビット環境ではintとint*が同じサイズだから、キャストされれば代入できる。sizeof(int) == sizeof(int*)。
しかし、64ビット環境では動かなくなるかもしれない。ポインター型を無視した良くない書き方だ。
970: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/07/15(土) 21:54:52.27 ID:18nkvKxh(5/7) AAS
おそらく、君の環境では、
sizeof(int) == 4,
sizeof(int*) == 4
のはずだ。
64bit環境では、多分
sizeof(int) == 4,
sizeof(int*) == 8
になる。確認してみたまえ。
971: 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/07/15(土) 21:57:34.94 ID:18nkvKxh(6/7) AAS
int*のサイズがintのサイズより大きいと、ポインター(アドレス)の値が正しく代入できない。これが64bitで失敗する理由だ。
972: デフォルトの名無しさん [sage] 2017/07/15(土) 22:08:26.63 ID:qXQ9KlTo(1) AAS
こまけーことをゴチャゴチャと
Cなんて大なり小なり環境依存な場面しか使わん
貴様はintに32767以下しか入れんのか?
973: デフォルトの名無しさん [sage] 2017/07/15(土) 22:10:20.05 ID:d+yGYUAe(6/6) AAS
確かめてみたら確かに自分の環境では両方4バイトでした
64bitのプログラムにしたらダメになるんですね・・・
勉強になります。ありがとうございます。
974(1): デフォルトの名無しさん [sage] 2017/07/15(土) 22:23:44.38 ID:vkKq60sj(1/2) AAS
2レスで失礼します
VC++9Eでruby-opencvのビルドを試みているのですが構文エラーが多発してビルドできません
>C:\dev\ruby-opencv>nmake
>〜
>cl -I. -I. -IC:/dev/ruby-1.8.7-p374/win32/bin/lib/ruby/1.8/i386-mswin32_90 -IC:/dev/ruby-opencv-master/ext/opencv -MD -O2b2xty- /EHsc -IC:/dev/ruby-opencv-master/ext/opencv/ext/opencv
/EHsc -DHAVE_OPENCV2_CORE_CORE_C_H -DHAVE_OPENCV2_CORE_CORE_HPP -DHAVE_OPENCV2_IMGPROC_IMGPROC_C_H -DHAVE_OPENCV2_IMGPROC_IMGPROC_HPP -DHAVE_OPENCV2_VIDEO_TRACKING_HPP
-DHAVE_OPENCV2_FEATURES2D_FEATURES2D_HPP -DHAVE_OPENCV2_FLANN_FLANN_HPP -DHAVE_OPENCV2_CALIB3D_CALIB3D_HPP -DHAVE_OPENCV2_OBJDETECT_OBJDETECT_HPP
-DHAVE_OPENCV2_LEGACY_COMPAT_HPP -DHAVE_OPENCV2_LEGACY_LEGACY_HPP-DHAVE_OPENCV2_HIGHGUI_HIGHGUI_C_H -DHAVE_OPENCV2_HIGHGUI_HIGHGUI_HPP -DHAVE_OPENCV2_PHOTO_PHOTO_HPP
-DHAVE_OPENCV2_NONFREE_NONFREE_HPP -DHAVE_STDARG_H -I/usr/include -IC:\dev\OpenCV2.4\install\include -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -c
-TpC:/dev/ruby-opencv-master/ext/opencv/algorithm.cpp
>〜
>algorithm.cpp
>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\INCLUDE\istream(699) : warning C4003: マクロ 'read' に指定された実引数の数が少なすぎます。
>C:\〜\istream(699) : error C2059: 構文エラー : ')'
>C:\〜\istream(846) : コンパイルされたクラスの テンプレート のインスタンス化 'std::basic_istream<_Elem,_Traits>' の参照を確認してください
>C:\〜\istream(700) : error C2143: 構文エラー : ')' が '{' の前にありません。
>〜
>C:\〜\xxbind1(320) : warning C4003: マクロ 'bind' に指定された実引数の数が少なすぎます。
>C:\〜\xxbind1(320) : error C2988: 認識できないテンプレートの宣言または定義です。
>C:\〜\xxbind1(320) : error C2059: 構文エラー : ','
975: デフォルトの名無しさん [sage] 2017/07/15(土) 22:24:14.08 ID:vkKq60sj(2/2) AAS
何らかのファイルが足りないとかならまだ判るのですがこのファイルはVCに付属の物ですし構文エラーなどと言われても理解できません
algorithm.cppは一番最初のファイルで全く進まない状態です
ちなみにRubyとOpenCVのビルドは一応通っています(本当に問題ないかは未確認)
C/C++は不慣れでVSの使用経験もあまりないため原因の見当も付かず手詰まり状態です。もし何か判る方がいたら教えてもらえると助かります
976(1): 片山博文MZ ◆T6xkBnTXz7B0 [sage] 2017/07/15(土) 22:27:42.35 ID:18nkvKxh(7/7) AAS
readというマクロが悪さをしているようだ。#include順を変えるか#undefしろ。
977: デフォルトの名無しさん [sage] 2017/07/15(土) 22:35:18.82 ID:Z+b63Gri(1) AAS
>>958
使わずに済むのなら無理して使う必要は無いだろ?
正しく動けばそれでいい
上下前次1-新書関写板覧索設栞歴
あと 25 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.137s*