【初心者歓迎】C/C++室 Ver.100【環境依存OK】 [無断転載禁止]©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
2016/11/06(日) 22:58:02.60ID:dU5z27As
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

前スレ
【初心者歓迎】C/C++室 Ver.99【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1469177649/
2017/07/13(木) 20:43:44.17ID:lX8cJUTX
Visual Studio のデバッグビルドだと、不定メモリをCCで埋める
だからこれに対応する'フ'が表示される
なぜ途中が'ノ'になるかはわからん

strcatではCCの後の0を探してその後に文字列をコピーするから、0の位置によっては例外が発生したり動作がおかしくなったりするかも
2017/07/13(木) 21:06:57.04ID:a0isPZOF
>>937
= {'\0'};のタイプミスだよね?
2017/07/13(木) 21:23:18.88ID:lX8cJUTX
>>940
タイプミスじゃなくて文字化けした
スマホから見ると、? が◆の中に書かれた文字になってる
2017/07/13(木) 23:03:34.21ID:xdHlDIka
プログラム終了にexit 0とreturn 0がどう違いますか?
2017/07/13(木) 23:59:30.53ID:anRp6w5D
>>942
違わない。
main 内の return は exit と同じ。
2017/07/14(金) 19:19:48.00ID:TW7O0pB9
というタワゴトで他人を陥れるのであった
2017/07/14(金) 19:26:30.76ID:RoIBY40S
exitは死のトラクターが働かない
2017/07/14(金) 19:32:27.26ID:RoIBY40S
異常終了以外でexitを使うヤツは素人
2017/07/14(金) 20:20:31.05ID:8ghhANnS
えっ
mainのreturnでint値返すのはexitをその返り値で呼ぶのと全く等価でしょ?
少なくとも現行のC,C++規格では等価と書いてあるけど現実の実装ではそうなってないってこと?
2017/07/14(金) 20:52:35.05ID:RoIBY40S
#include <iostream>
#include <cstdlib>
struct A {
~A() {
std::cout << "OK" << std::endl;
}
};
int main(void) {
A a;
std::exit(-1);
}
2017/07/14(金) 20:55:56.83ID:RoIBY40S
>>947
どこに書いてあったか? 苦情入れるぞ。
2017/07/14(金) 21:04:08.43ID:TW7O0pB9
今日の>>945は健常者
後始末される例外ケースについて触れていたら完璧だった
2017/07/14(金) 21:06:50.82ID:VdC9hBdZ
atexit で後始末回収機構走らないの?
2017/07/14(金) 21:39:46.62ID:RoIBY40S
>>947
どこに書いてあった?
2017/07/14(金) 21:46:17.67ID:RoIBY40S
atexitはマニュアルに書いてある通りだから、ここでいちいち説明する必要はない。
2017/07/14(金) 21:53:53.48ID:RoIBY40S
マニュアルこそが聖書。マニュアルを読まない奴等はノンプレイヤー。
2017/07/14(金) 22:54:13.51ID:RlDfzlps
つまりexit()はバカ発見器ってこと?
2017/07/14(金) 23:01:28.54ID:RoIBY40S
C++でexit使うぐらいなら、代わりにC++例外を使った方がいいよ。デバッグしやすいし。
2017/07/15(土) 05:41:00.21ID:81gh4ly6
>>947
exit() 関数に入ってしまってはデストラクタが働かないのに,それでも return 文と一緒といいはるの?
それ規格がまちがってるから,そのうち修正がはいるはず
2017/07/15(土) 13:25:52.33ID:d+yGYUAe
ポインタの作法に慣れないです
読めるけどかけないです
2017/07/15(土) 16:38:44.94ID:sZ4h7fLQ
ポインタは2段までしか使わないなあ
関数ポインタはstd::functionに入れる癖がついたし
2017/07/15(土) 17:20:33.71ID:d+yGYUAe
#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の中身にアクセスする方法ってありませんか?
アドレスがわかっているからできそうな気もするんですがよく解りません。
2017/07/15(土) 17:27:13.54ID:xLcEZRbh
aがint a[5]であるとき、aはint配列の先頭アドレスだ。unkoの引数をポインターにしろ。
2017/07/15(土) 17:56:11.02ID:d+yGYUAe
はい
2017/07/15(土) 20:48:00.24ID:iuayY/9E
そもそもこのソースコンパイルエラーになるんじゃね?
2017/07/15(土) 21:29:06.16ID:d+yGYUAe
>>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の要素を覗いたり操作したりできることがわかりました。
2017/07/15(土) 21:31:54.33ID:18nkvKxh
型がめちゃくちゃだあああ!!!
型が形無し!
2017/07/15(土) 21:36:49.71ID:18nkvKxh
できることとやってもいいことは違うんだよ。
2017/07/15(土) 21:39:23.41ID:18nkvKxh
コンパイル時に出て来る度重なる警告を無視したらダメだよ。
2017/07/15(土) 21:44:11.03ID:d+yGYUAe
すみません
2017/07/15(土) 21:46:08.79ID:18nkvKxh
お使いの32ビット環境ではintとint*が同じサイズだから、キャストされれば代入できる。sizeof(int) == sizeof(int*)。
しかし、64ビット環境では動かなくなるかもしれない。ポインター型を無視した良くない書き方だ。
2017/07/15(土) 21:54:52.27ID:18nkvKxh
おそらく、君の環境では、
sizeof(int) == 4,
sizeof(int*) == 4
のはずだ。
64bit環境では、多分
sizeof(int) == 4,
sizeof(int*) == 8
になる。確認してみたまえ。
2017/07/15(土) 21:57:34.94ID:18nkvKxh
int*のサイズがintのサイズより大きいと、ポインター(アドレス)の値が正しく代入できない。これが64bitで失敗する理由だ。
2017/07/15(土) 22:08:26.63ID:qXQ9KlTo
こまけーことをゴチャゴチャと
Cなんて大なり小なり環境依存な場面しか使わん
貴様はintに32767以下しか入れんのか?
2017/07/15(土) 22:10:20.05ID:d+yGYUAe
確かめてみたら確かに自分の環境では両方4バイトでした
64bitのプログラムにしたらダメになるんですね・・・
勉強になります。ありがとうございます。
2017/07/15(土) 22:23:44.38ID:vkKq60sj
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: 構文エラー : ','
2017/07/15(土) 22:24:14.08ID:vkKq60sj
何らかのファイルが足りないとかならまだ判るのですがこのファイルはVCに付属の物ですし構文エラーなどと言われても理解できません
algorithm.cppは一番最初のファイルで全く進まない状態です
ちなみにRubyとOpenCVのビルドは一応通っています(本当に問題ないかは未確認)
C/C++は不慣れでVSの使用経験もあまりないため原因の見当も付かず手詰まり状態です。もし何か判る方がいたら教えてもらえると助かります
2017/07/15(土) 22:27:42.35ID:18nkvKxh
readというマクロが悪さをしているようだ。#include順を変えるか#undefしろ。
2017/07/15(土) 22:35:18.82ID:Z+b63Gri
>>958
使わずに済むのなら無理して使う必要は無いだろ?
正しく動けばそれでいい
978974
垢版 |
2017/07/16(日) 12:18:52.82ID:wcmK4agw
>>976
すみません。その場所の特定ってどのようにすればいいのでしょうか
比較的規模の大きいライブラリですし、インクルードしているファイルだけでもかなりの数になりそうです
ファイルの検索とテキストエディタだけでは追えそうにありません
追跡を支援してくれるツールとかないんでしょうかね・・・
2017/07/16(日) 12:28:40.60ID:flrpsNzv
>>978
IDEのフォルダ内検索か、
grepツール
2017/07/16(日) 15:16:03.75ID:1O/pViqJ
マクロ展開したソース吐くオプションあったよな

VCならhttp://d.hatena.ne.jp/nurs/20100516/1274020395

1.ソリューションエクスプローラ上で展開後の結果を見たいcppファイルを右クリック⇒
 プロパティ⇒プリプロセッサ⇒前処理済みファイルの生成⇒行番号つきか行番号なしを選択
2.再びソリューションエクスプローラ上で展開後の結果を見たいcppファイルを右クリック⇒コンパイル
 これで、cpp が置かれているのと同じファイル階層に、cppと同じ名前だけど拡張子が.iになってる
 ファイルができてるからそれがそうだよ

gccなら -E
981デフォルトの名無しさん
垢版 |
2017/07/16(日) 17:55:59.24ID:i1aK64sE
class Kitty {
public:
char *str;
Kitty() { str = "Kitty on your lap\n"; }
Kitty(const Kitty &obj) { str = "Di Gi Gharat\n"; }
} g_obj ;

int main() {
Kitty obj = g_obj;
cout << g_obj.str;
cout << obj.str;
return 0;
}

Kittyクラス終わりのセミコロンの間に変数g_objがあるんですがこれはどういう意味なんですか?
2017/07/16(日) 18:11:45.98ID:0XlWr73/
「int i; のセミコロンの前に変数g_objがあるんですがどういう意味ですか」
と訊いているに等しい
2017/07/16(日) 18:13:11.34ID:0XlWr73/
訂正
 誤 変数 g_obj
 正 変数 i
2017/07/16(日) 18:25:45.80ID:dVrh8pbL
g_objはKittyのインスタンスだが
あまりこういう書き方はしないかもね
2017/07/16(日) 18:31:52.76ID:ZbG5GhXO
>>981
Kitty と言うクラス定義とその型を持つ g_obj と言うグローバル変数を同時に定義している
要するに
class Kitty {
...
};
Kitty g_obj;
を一つにまとめてるだけ
986デフォルトの名無しさん
垢版 |
2017/07/16(日) 18:48:37.09ID:i1aK64sE
>>982 >>984
レスありがとうございます
>>985
わかりやすい解説ありがとうございました
2017/07/16(日) 22:25:00.23ID:Z5uaiz2p
>>986
それはさておき
>str = "Kitty on your lap\n"
このウンコード、何かおかしいとは思わないのかね
2017/07/17(月) 00:15:32.26ID:+UBTk6HR
>>987
ウンコードは食べるとニガいからな
2017/07/18(火) 05:08:40.08ID:gGqeofJB
2017/07/18(火) 07:08:39.06ID:vzMDiUgd
次スレ立てたにゅ

【初心者歓迎】C/C++室 Ver.101【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1500329247/
2017/07/18(火) 19:37:15.43ID:bPzCLpNs
おつ
2017/07/18(火) 22:55:46.66ID:KX2fhuwb
ひょっとして2ちゃんのこのスレ
他のC/C++相談所よりハイレベル!?
2017/07/19(水) 07:02:25.97ID:Jp1Fyagp
うめてんてー
2017/07/19(水) 07:03:18.13ID:Cx7F+3jm
2017/07/19(水) 10:27:43.90ID:MRnyPI+k
他のC/C++相談所ってどこ?
2017/07/19(水) 16:13:01.49ID:AV+hYp2C
SNS の C++ コミュニティとかじゃね?
2017/07/19(水) 17:00:45.76ID:Si/VL0fD
それトリ割れしてるよ
#o%K%H:+O
2017/07/19(水) 17:08:00.13ID:AV+hYp2C
>>997
知ってるけど成りすましは一度しか出てきてないのでまあいいかなって。
2017/07/19(水) 17:33:56.27ID:bGQD/KSW
このスレにはQさんがいるからな
Qさんがいれば安心だ
2017/07/19(水) 17:43:36.36ID:AV+hYp2C
>>1000 を取れたら長門は俺の嫁
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 254日 18時間 45分 34秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況