C++相談室 part130 [無断転載禁止]©2ch.net

レス数が950を超えています。1000を超えると書き込みができなくなります。
2017/03/31(金) 08:47:49.65ID:UkLjKqcm0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part129
http://echo.2ch.net/test/read.cgi/tech/1483940967/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://echo.2ch.net/test/read.cgi/tech/1478440682/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2017/07/23(日) 11:26:02.43ID:T5oE3FpLd
>>896
しないだった
2017/07/23(日) 12:41:00.33ID:7fREas1Ld
エンディアン
charのサイズ
負の数の表現方法

この辺がくせ者
2017/07/23(日) 12:43:24.45ID:Z5IwvI350
符号付整数の右シフトとwrap aroundは未定義動作
だがあんま認識してる人が居ないという
2017/07/23(日) 12:47:13.35ID:7fREas1Ld
charが16bitや32bitだと、
8bit単位のデータを扱うのが非常に面倒
現実的にはパック形式も必要になるので
2017/07/23(日) 12:48:45.60ID:7fREas1Ld
負の数もいろいと
00...0はトラップ値だったり
2017/07/23(日) 12:49:28.11ID:7fREas1Ld
80...00の間違い
2017/07/23(日) 12:50:38.60ID:7fREas1Ld
near farとか
各種pragmaとかアラインメントとか

機種依存しないコードなんてのは実際には妄想
2017/07/23(日) 12:52:19.16ID:7fREas1Ld
使用可能リソースがそもそも違う
2017/07/23(日) 14:01:31.88ID:Ach+AE6n0
stdintじゃいかんの?
2017/07/23(日) 14:22:24.82ID:7fREas1Ld
それで何が解決する?
2017/07/23(日) 14:38:32.39ID:+MmkkbFw0
そういうのは必要な人がパッチを書けばいい
プロジェクトのメインの開発者は一般的なPC用CPUだけ想定していればいい
2017/07/23(日) 15:01:31.12ID:7fREas1Ld
組み込み機器を完全に無視した発言
2017/07/23(日) 16:52:13.50ID:T5oE3FpLd
エンディアンへの注意と
sizeof演算子への注意と
unsignedか否か
この辺を注意すればまずは良いんだね
2017/07/23(日) 16:57:12.36ID:7fREas1Ld
互換性のポリシーをはっきりすること
最近のPCだけならエンディアンやアラインメント、charのサイズやintのサイズは関係ないし
汎用なら>>898も考えないと
2017/07/23(日) 17:23:53.30ID:T5oE3FpLd
難しいな
色々なPCで動作させようとするのは

ところでdllでもsoでも使えるようなコード書きたいんだけども
呼び出し部分だけifdef切るのとソースコード自体わけるのとどちらが良いんだろ?
2017/07/23(日) 17:27:19.50ID:71jKdlZw0
dllと言えばdllの呼び出し口以外の内部で完結してるような関数ってどうやってテストするんだろう
俺それやったことねえや
2017/07/23(日) 18:02:24.35ID:+MmkkbFw0
そもそもpublicでないものをテストする必要は無い
2017/07/23(日) 18:04:39.20ID:7bD+iXj90
日本は未テスト納品が当たり前だからな。
2017/07/23(日) 18:10:47.08ID:71jKdlZw0
>>913
パブリックでなくとも動作検証は必要ではないか?って思い始めた
関数単位でのテストが積み重なって一番大きなdllのテストに移る的な

設計上に多重継承が現れたんだけど多重継承って設計的にどう??
2017/07/23(日) 18:20:48.79ID:1KmUXPg00
テストの目的にもよるな。
仕様に対する保証という意味でならば当然公開しないものはテストの必要がないが、
開発するうえではモジュール毎にテストできた方が問題の発見に役立つし。
テストコードはスタティックリンクするのがお手軽なんじゃないかな。
2017/07/23(日) 18:39:25.88ID:+MmkkbFw0
>>915
多重継承は気をつけて使えば問題ない
2017/07/23(日) 18:52:38.36ID:71jKdlZw0
>>916
俺の意図的にはそんな感じだね
関数ごとにテストして品質を担保する的な
ただdll内で呼ばれている関数を静的リンクできるん??

>>917
気を付けるのが難しそう
よくよく考えたら多重継承ではなくクラスの中でクラスを定義する方が自然だった
2017/07/23(日) 19:04:55.28ID:b+Hb+B30M
継承をextendとして使う場合は多重継承しやいほうがいい
2017/07/23(日) 19:26:40.53ID:1KmUXPg00
>>918
>ただdll内で呼ばれている関数を静的リンクできるん??

objで取り込むかlibかソースか、やり方はいろいろあるだろうけど普通にできるでそ。
2017/07/23(日) 19:32:13.78ID:Z5IwvI350
書いたらテスト、これ常識
関数単位ぐらいの細かい単体テストは、呼び出し元込みの結合テストで境界条件を尽くせる(それぐらい簡単な関数である
という論理的見通しがある場合のみ省略できる
>>913は常に書きっぱなしでテストしないと宣言しているに等しい

>>918
dll内の関数のテストはソースファイルを単体テスト用のプロジェクトと共有して単体テスト用のプロジェクトでやるとか、
dll内にテストコードを埋め込んでテストしてテストが終わったら#if/#endifで切り離す
みたいな
2017/07/23(日) 19:47:00.96ID:T5oE3FpLd
単体テストってGoogleテストとかのドライバ的なやり方をさしてんのか?
それともvisual studioに機能としてついてるやつをいってんのか?
2017/07/23(日) 20:14:53.55ID:H7crLcrqr
>>899
>符号付整数の右シフトと (中略) は未定義動作
右?
それは規格のどこに書いてあるのですか?
2017/07/23(日) 20:16:43.64ID:T5oE3FpLd
符号つき整数は論理シフトか算術シフトかコンパイラ依存ってだけの話でないの
2017/07/23(日) 20:22:46.29ID:Z5IwvI350
不肖私めが述べさせていただきまするが、
Googleテスト(のプロジェクト)と本番用DLLプロジェクトのソースコード共有は両立できる
(ソースコード共有はテストドライバというよりはビルドシステム側(IDEやmake)が持っている機能なので、
Visual Studioの単体テストプロジェクトは使ったこと無いから知らん

なお、書いたらテスト、とは>>921で書いたが、書きなおしていないコードのテストまで毎晩やるか否かは開発手法による
エクストリームプログラミングなんかだと多少手間をかけてでもGoogleテストで全テストできるようにすねきだが
古式ゆかしいVカーブモデルとかだと「下流行程のテストで検証済みのものを上流行程のテストに上げる」という建前なので、
出戻りのリスクと引き換えに、下流行程でのテストをそう繰り返しはしないからテストドライバを使うまでもない
という考えも有り得る。

まさかとは思うが、テストドライバを使うか否かで適切なテストコードを書けたり書けなかったりするとか飯田さんよね?
2017/07/23(日) 20:27:48.89ID:7bD+iXj90
単体テスト、レグレッションテストしない奴は信用できない。
2017/07/23(日) 20:40:09.17ID:b+Hb+B30M
リグレッションテストが通ってるから単体はおろそかでいいか
→単体テストがないせいでリグレッションが落ちた理由がわからない(´・ω・`)
→よし単体テスト書くか!あれ?バグ発見!直すとリグレッションの期待値変わるけどまぁしばらくは仕方ないか
→あれ?久しぶりにリグレッションテストの結果見るとすげー値が変わってる…
→リグレッションテストメンテするか…

この輪廻から解脱できません、どうしたら成仏できますでしょうか
2017/07/23(日) 20:43:41.49ID:+MmkkbFw0
>>927
テスト駆動開発の理論を遵守して書く
2017/07/23(日) 20:57:27.35ID:M0TZP5Vd0
>>922
それはテストのやり方でしょ
ひょっとしてテストの種別(単体テスト、結合テスト、総合テスト... まあ名前や内容は色々違うけど)とテストのやり方の区別がついてないの?
2017/07/23(日) 21:08:20.70ID:7bD+iXj90
なるほど。日本のSEは二種、基本情報処理すら受からないからな。
工程に入ってなくて当然だな。
2017/07/23(日) 21:14:38.25ID:H7crLcrqr
>>924
それは未定義動作とは言わないし、
未定義動作を起こす左シフトを差し置いて右シフトが出てくるのは
何かおかしいのではないかという気がしてならない
2017/07/23(日) 21:19:26.67ID:7bD+iXj90
掛け算、割り算が糞遅いアセンブラならともかく、Cで符号付きをシフトする用途はなに?
2017/07/23(日) 21:22:45.19ID:71jKdlZw0
>>921
質問したの俺だけど別の人が書き込んでるね

テストの手法として俺は悩んでる
DLL内の呼び出されるような関数をどうやってテストすれば良いのかと

ドライバみたいなの作っても動かせるのは呼び出し口だけで合って
呼び出し口でいくら網羅テストしてもそれは呼び出し口のテストだしなぁーって

dll内にテストコード書き込むのことで実現できると思ったけどもそれはそれで汚いなって思ったから、
何かしら直接呼び出すことできないかなって聞いてた

そう色々と考えていたけど
ただ単に関数の掛かれているcppファイルを取り込んだexeを作れば良いだけか?って思い始めた
2017/07/23(日) 21:32:37.27ID:H7crLcrqr
この他人の回答を読まないコミュ障こそがこのスレの醍醐味
2017/07/23(日) 21:38:41.45ID:71jKdlZw0
>>925
俺が聞きたかったのはまさにその最後のだな
そのまさかです
そんなレベルなんですよ・・・
2017/07/23(日) 21:41:07.86ID:H7crLcrqr
>>932
特定のビットを取り出したり切り貼りしたい時でないのか
ビット操作したい時に掛け算割り算を持ち出す方が変人かと
2017/07/23(日) 21:52:14.22ID:Z5IwvI350
>>931
タダで手に入るn3337.pdfの§5.8によると確かに
 - 符号付整数の左シフトの結果は representable in the result type (値域内)でない場合未定義動作
 - 符号付整数の右シフトの結果は処理系依存
と書いてあったわスマン;

ちな漏れの認識では{処理系依存}⊂{未定義動作}
根拠はJISの未定義動作の定義による…
2017/07/23(日) 21:59:51.68ID:Z5IwvI350
いやすまん>>937の末尾2行撤回
これは前に認識を改めたんだった;
> 未定義の動作に対して,その状況を無視して予測不可能な結果を返してもよい。翻訳時又はプログラム実行時に,文書化された,環境に特有な方法で処理してもよい
であって、未定義動作の検出やエラー処理の方法はともかく、未定義動作自体はどこまでいっても未定義動作
2017/07/23(日) 22:47:02.24ID:7bD+iXj90
>>936
回答になってないし、変人はおまえだよ。算術シフトが何か知らないでレスすんな。
2017/07/23(日) 23:05:50.01ID:H7crLcrqr
この自分の質問の日本語さえ読めないが故の意味不明なレス
それがこのスレの醍醐味
2017/07/23(日) 23:10:22.36ID:7bD+iXj90
>>940
おまえのスキルはとても他人の質問に回答するレベルではない。しかもコミュ障ときてる。
2017/07/24(月) 08:15:31.13ID:KtTsv21zM
>>936
> 特定のビットを取り出したり切り貼りしたい
符号付きでやってるならこのスレに書き込むのはやめた方がいいレベル
2017/07/24(月) 17:14:10.91ID:mYhfbnvOr
もちろん符号付きです^^
流石に最上位ビットまで使う場面では使わないが
2017/07/24(月) 22:14:06.75ID:OsdOk4+1d
char X[26]={'a',,,,,,,,,,'z'};
char* Y ="jmdjpgtmdajptwmeg";

for(int i=0;i<26;i++) {
for(int j=0;j<26;j++){
if( X[i]== Y[j] )
処理



文字検索して一致したら処理みたいにしたいのだけどtrueにならなくて困ってます
一文字比較はできない??
2017/07/24(月) 22:23:42.38ID:iUqnpKPOd
>>944
これまでのすべての文字が一致しているかを表すフラグ変数を使え。
2017/07/24(月) 22:27:59.85ID:OsdOk4+1d
>>945
すまない理解ができん...
2017/07/24(月) 22:36:31.42ID:iUqnpKPOd
>>944
==と=を間違っているとか、
大文字小文字を間違っているとか、
全角半角を間違っているとか、
理由は色々考えられる。
2017/07/24(月) 22:37:56.92ID:OsdOk4+1d
>>947
==は問題なし
大文字小文字も双方出力して同じものが出力されてるのも確認した
全角半角はそこは上に同じ

わけわかめ
2017/07/24(月) 22:40:41.63ID:zHcIYvyR0
>>944
trueにならないってどういう意味?
一度もヒットしないの?
2017/07/24(月) 22:42:58.10ID:iUqnpKPOd
iとj
2017/07/24(月) 22:44:21.90ID:/CxPJ7M4d
>>949
出力すると
ja
jb
jc
.....
jj
jk
ってのは出るのだけど==の処理に入らない
2017/07/24(月) 22:46:11.09ID:iUqnpKPOd
蝉コロン
953デフォルトの名無しさん (ワッチョイ df32-QK4i)
垢版 |
2017/07/24(月) 22:48:05.86ID:yuT7rhOA0
二重ループにする必要ある?
2017/07/24(月) 22:56:41.50ID:iUqnpKPOd
if (...);←
2017/07/24(月) 23:00:33.31ID:iUqnpKPOd
スマホ使ってるなら、テキストファイルにしてSDカードにファイルを取り込んで、ideoneに上げてくれ。
2017/07/24(月) 23:17:23.75ID:mYhfbnvOr
「ス マホ使ってるなら、テキストファイルにしてS Dカードにファイルを取り込んで、 ideoneに上げてくれ」

失礼ながら、何だか復唱したくなった
2017/07/24(月) 23:27:02.86ID:iUqnpKPOd
PCのテキストをスマホにコピペ出来ない情報弱者が居るから、ていねいに説明したまで。
2017/07/24(月) 23:28:31.51ID:zHcIYvyR0
どこにスマホの必要が?
2017/07/24(月) 23:30:40.46ID:iUqnpKPOd
>>944みたいな汚いコードをパソコンで書くヤツはいないっしょ。絶対スマホだよ。
2017/07/25(火) 11:24:31.23ID:sTL1greYd
>>953
二重ループにしない方法あるのかな??
計算量とかも考えて済むならそうしたい

>>954
これでした
2017/07/25(火) 12:18:12.57ID:TTkvk/JeM
>>960
std::map使え。
2017/07/25(火) 20:17:26.54ID:KNlosRFTM
>>960
そもそも何をしたいのかよくわからんのは俺だけ?
2017/07/25(火) 21:23:57.34ID:0WJY7+7Z0
>>961
文字にmap
アホの典型
2017/07/25(火) 23:21:03.65ID:reUD2K+v0
diffとか、レーベンシュタイン距離はかるとか、めんどくさいことするでなければ、str系の関数つかうんじゃね?普通
strcmpとか、strspnとか。
2017/07/25(火) 23:43:16.64ID:zpZ2WILs0
std::stringも使ってあげて
2017/07/26(水) 00:14:40.89ID:BELJl12W0
片方a〜zまで順序揃っているからequal_rangeで普通にイケそうだけど
2017/07/26(水) 09:11:32.50ID:Z6NFAYLOM
>>963
なんで?
2017/07/26(水) 18:04:12.49ID:n/TvQiRnd
>>964
strcmpって文字列にたいしてよね?
2017/07/26(水) 18:57:41.27ID:tvexcE8JM
>>944
http://ideone.com/Xto2xp
2017/07/26(水) 19:15:56.17ID:BELJl12W0
何コレすごくキモチワルイ
2017/07/26(水) 20:34:16.84ID:z7xwmnWB0
>>968
ですね。このサンプルは集合をチェックしているみたいだし、strspn系統使うのが簡単だとは思うけど。
いずれにしても、Xの末尾に/0あった方が吉ですね。
2017/07/26(水) 23:02:56.23ID:OlHQ9vUk0
>>970
なんで?
2017/07/27(木) 01:52:35.67ID:dWT6t2a8d
unsigned charの値をsigned charに移したい
ただ移す値はunsignedの1バイトを4ビットずつに区切って表現される値
130って値があるのならchar型には1000と0010の値をそれぞれ1バイトとして格納したい
charを見ればi番目に8、i+1番目に2が入る形
こんなことするならsprintfかな??
2017/07/27(木) 01:54:43.98ID:P9NETJAS0
ビット演算しろよ。
2017/07/27(木) 01:58:14.37ID:Fr5QaIId0
そんな基礎的すぎる処理を人に聞くな
2017/07/27(木) 07:27:45.64ID:P1js1uXhM
>>973
少なくとも
> こんなことするならsprintfかな??
はないな
2017/07/27(木) 07:34:20.55ID:tCxrViSf0
charは8bit前提でいいのか?
2017/07/27(木) 07:39:08.55ID:IgWBj8ON0
>>977
問題を無駄にややこしくするなよ。
2017/07/27(木) 07:40:36.50ID:tCxrViSf0
最近charが16bitの環境を使ったからつい
2017/07/27(木) 07:59:04.16ID:rWyXQzMv0
7ビットにパリティが1ビット
2017/07/27(木) 08:36:39.28ID:P1js1uXhM
>>980
64bit に 8bit の ECC とか言われたらついていけなくなるんだからやめとき
982デフォルトの名無しさん (ブーイモ MMd6-PRKf)
垢版 |
2017/07/27(木) 19:19:41.26ID:/VCkXAgyM
>>979
なにそのTIのDSP
2017/07/27(木) 19:24:23.50ID:F0lzbPxld
>>982
良くおわかりで
2017/07/28(金) 06:55:18.07ID:mjoh45CgD
2017/07/28(金) 21:15:49.27ID:aEgnwK31D
2017/07/28(金) 23:12:30.76ID:d5LZ2kks0
987デフォルトの名無しさん (ワッチョイ 7346-PRKf)
垢版 |
2017/07/29(土) 00:21:09.72ID:lS34gLdW0
仙一
2017/07/29(土) 05:44:39.91ID:fSkalPfO0
えっ
989デフォルトの名無しさん (ワッチョイ 6a32-ZO1u)
垢版 |
2017/07/29(土) 07:39:00.75ID:q+2MbaQ80
なにっ
2017/07/29(土) 12:21:39.86ID:klnxojNUM
次スレhttp://mevius.2ch.net/test/read.cgi/tech/1501295308/
991デフォルトの名無しさん (ワッチョイ 738e-PRKf)
垢版 |
2017/07/29(土) 16:04:09.21ID:mj0H/MXI0
>>990
2017/07/29(土) 20:09:55.91ID:vcBWoe5a0
>>990
2017/07/29(土) 21:58:36.04ID:Y9LsTA7nd
埋め立てふせ
2017/07/29(土) 21:59:10.94ID:Y9LsTA7nd
埋めまーす。
2017/07/29(土) 22:01:20.68ID:Y9LsTA7nd
埋め星
2017/07/29(土) 22:03:11.75ID:Y9LsTA7nd
埋まるちゃん
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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