X



C言語なら俺に聞け 153
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ 5fba-LL4R)
垢版 |
2019/08/17(土) 23:02:42.00ID:tN5mSQYg0
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
※前スレ
C言語なら俺に聞け 152
https://mevius.5ch.net/test/read.cgi/tech/1560763630/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0003デフォルトの名無しさん (ワッチョイ 132c-BF++)
垢版 |
2019/08/18(日) 03:38:02.60ID:26pp6bRY0
仮想アセンブラは、元々、日本の情報処理資格試験用に、CASL2 が作られた。
個別のCPU 命令では、試験にふさわしくないから、抽象化した命令が必要だった

でも、世界的には流行らなかった

それで、学生が作った、LLVM に、Apple が飛びついた
0004デフォルトの名無しさん (ワッチョイ 13a5-1WPq)
垢版 |
2019/08/18(日) 09:39:05.87ID:S9bN8HAf0
実像を見てない試験で社会から乖離してるな
バkの集団なんだろうか?
それともz80の問題だしたらライセンス料でも払わないといけないのか?
カネに掛けてはとかくケチな貧乏人が思い付きそうな小手先だ
至るところで独自規格で無意味の羅列、全く学習にならず、受けるだけムダな試験が練り上げられる
0006デフォルトの名無しさん (ラクッペ MMa5-66q6)
垢版 |
2019/08/18(日) 10:09:11.56ID:/GvnB8qbM
以前に実施されていたマイコン応用システム開発技術者試験のアセンブラ問題は8080, Z80, 6800からの選択だった
現在の情報処理試験エンベデッドシステムの前身となった資格試験
0007デフォルトの名無しさん (ワッチョイ 13a5-1WPq)
垢版 |
2019/08/18(日) 10:17:41.38ID:S9bN8HAf0
実際に使えないものを教えられてるのは英語と同じだな
CASLやっても機械語の練習にならない

「教育用」にまで形骸化すると使い物にならない、現実と実用から乖離する、ファンタジーになる、
これが「教育用」の弊害だ
PASCAL不人気の原因もここら辺にあるんじゃねえか?
IT界隈は教育用と実用の間で揺れてる
0008デフォルトの名無しさん (ワッチョイ 8bf2-Zpsd)
垢版 |
2019/08/18(日) 12:10:38.91ID:RmgmCswc0
>>2 先生 700行の数式パーサーまたHPに載せて下さい!
0009デフォルトの名無しさん (ワッチョイ d144-9R4q)
垢版 |
2019/08/18(日) 13:54:54.01ID:NDt9ShII0
ハゲタマゴどこ行った
0013入門 (ワッチョイ d901-QMAU)
垢版 |
2019/08/19(月) 07:50:31.64ID:AfRfI86I0
http://program-lecture.info/c_structure5.html

ここのサイトを見ながら学習しているのですがこのshowStatus関数では何故int配列を
int型の仮引数で受け取れてるのでしょうか?配列は配列かポインタでしか受け取れないと思ってたんですが
その認識は間違ってますか
よろしくお願い致します。
0015デフォルトの名無しさん (ワッチョイ 8b69-LL4R)
垢版 |
2019/08/19(月) 09:48:04.61ID:O1nZQbpw0
showStasus() の引数は struct person 型の実体を受けてる

main では
 struct person 型の配列を用意 party[]
 配列の各要素 party[0], party[1] のぞれぞれについて showStatus() を呼んでいる

本質的には
 void foo(int arg);
 int main() {
  int array[2];
  foo(array[0]);
  foo(array[1]);
  return 0;
 }
これと同じ
0020デフォルトの名無しさん (アウアウカー Sa5d-KcV4)
垢版 |
2019/08/24(土) 22:48:02.26ID:UVaZe+22a
下のコードの部分を実行すると、最後の行だけ2回表示されます。
理由はなぜでしょうか?また、最後も1回にするにはどう変更したら良いでしょうか?
よろしくお願いします。

http://codepad.org/WCL1vHLd
002220 (ワッチョイ f125-KcV4)
垢版 |
2019/08/25(日) 00:34:55.25ID:9+tsViui0
>>21
サンクス!

While 行と fgets 行の間にその行を入れたら1回になりました。
修正はこれで良いのでしょうか?
002320 (ワッチョイ f125-KcV4)
垢版 |
2019/08/25(日) 00:46:09.40ID:9+tsViui0
>>22 の修正だと最後の行以外にもだいぶ表示されなくなってました。
どうするのが正解なのでしょうか?
002620 (ワッチョイ f125-KcV4)
垢版 |
2019/08/25(日) 03:58:18.71ID:9+tsViui0
>>25 うまくいきました! Thanks!
やっぱり俺に訊けスレですね。ここの人達はすごい。

if ( (fp = popen(cmdline,"r")) == NULL ) {
perror ("can not exec commad");
}
while (fgets(buf, sizeof(buf), fp)!=NULL){
printf("%s", buf);
}
pclose(fp);

最終的にこうなりなした。助かりました。
0027デフォルトの名無しさん (ワッチョイ 7a2c-3Uq+)
垢版 |
2019/08/25(日) 04:09:39.00ID:SpCWKyo10
Ruby では、Windows の、powershell, clip コマンドも呼べる。
UTF-8, CP932 の文字コード変換もできる

クリップボード内の複数行文字列の、各行の先頭・末尾から、
連続する空白類を除去して、クリップボードに入れる

str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ary = str.each_line.map( &:strip ) # 連続する空白類を除去する

IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end
0028デフォルトの名無しさん (アウアウクー MM73-Ivwm)
垢版 |
2019/09/12(木) 14:34:32.33ID:PzZxK66KM
defineマクロで以下をやりたいです。

struct my{
int d0 =0;
int d1 =0;
int d2 =0;
int d3 =0;
int d4 =0;
}:

struct my val;

val[0:2] = (1, 1, 1);

と入力した時にvalのdata0〜data2に1が入るようなマクロはどう書けばいいですか?
0030デフォルトの名無しさん (ワッチョイ 9f68-Ivwm)
垢版 |
2019/09/15(日) 10:20:29.94ID:Y/GLm+KZ0
>>29
ありがとうございます。
リンクを参考に、可変引数にするマクロまでは出来ました。(作った関数が間違えていたらすみません。)

struct my def2(struct my val, int s, int e, int d1, int d2){
int *p = val.d0;
*(p+s) = d1:
*(p+e) = d2;
return val;
}

/*def3省略*/

#define GET_MACRO(_1,_2,_3,NAME,...) NAME
#define DEF(val,s,e,...) GET_MACRO(__VA_ARGS__, def3, def2)(val,s,e,__VA_ARGS__)

ここから、表記を変える方法が分かりません。
下のようなことをしたいのですが、このように書くとコンパイルエラーになりました。
どう書けばいいでしょうか。

#define VAL[A:B]=(...) DEF(VAL,A,B,__VA_ARGS__)
0031デフォルトの名無しさん (ワッチョイ ff12-k1Ft)
垢版 |
2019/09/15(日) 12:30:40.49ID:58rKn0L90
マクロ使わずにこれで十分だろ。

typedef struct my;

val = (my){1,1,1};
val = (my){1,1,1,1};

以下のようにはできるけど、
マクロの多用は誰もソースを読みたくなくなるから避けたほうがいいよ

#define SET(v,...) v=(struct my){__VA_ARGS__}
SET(val, 1, 1, 1)
0037デフォルトの名無しさん (アウアウクー MM73-Ivwm)
垢版 |
2019/09/17(火) 13:01:08.68ID:pZqZMIzxM
うーん、どうにかして上のように[]を使って書き換えることは出来ないのですかね。
ちなみに下のようにして全パターン定義しようとしたらエラーでした。何故でしょうか。

#define val[0:2]=(...) DEF(val,0,2,__VA_ARGS__)
0039デフォルトの名無しさん (アウアウウー Sa63-ErpI)
垢版 |
2019/09/17(火) 19:09:34.89ID:g1BlUkdva
>>37
なぜって、#defineを使用するための構文を完全に無視してるからだよ。こちらが思ったことを都合良く解釈してくれるわけでなく、構文通りの単純な置換をしてくれるだけだよ。
一度ちゃんと調べておいた方がいい。
0041デフォルトの名無しさん (アウアウウー Sa63-ErpI)
垢版 |
2019/09/17(火) 20:37:25.67ID:g1BlUkdva
>>40
不可能。やるなら自前でプリプロセサでも書けばいいが、そんなことするくらいなら、ソース上に書くのではなく独自のデータファイルとそれを読み込んでデータを初期化するような処理でも作れば?
0043デフォルトの名無しさん (アウアウウー Sa63-0qvw)
垢版 |
2019/09/17(火) 22:44:02.30ID:WDh8MszDa
新言語作った方が良さそうな。
初期のC++みたいにC言語へのコンバータとして作っちゃえば楽だと思う。Cと同じで良い部分はほとんど素通しで行けるし。
0046デフォルトの名無しさん (ワッチョイ ff8c-e0wG)
垢版 |
2019/09/18(水) 07:02:57.91ID:ik5RQtCe0
yaccとlexを使えばできるだろう。たぶん
0047デフォルトの名無しさん (ブーイモ MM9f-+9C/)
垢版 |
2019/09/18(水) 08:32:22.55ID:cLmp+ocZM
独自言語を開発したときなんかはとりあえずCに変換するというのはわりとある話。
コード生成とか最適化とか考えずに済むから。

昔、独自じゃないけど、とある言語からCへのコンバータ作ったよ。
楽しかった。
0051デフォルトの名無しさん (アウアウクー MM11-bPqq)
垢版 |
2019/09/19(木) 15:34:03.81ID:yCvdPLl+M
#define ARR_NAME(n) arr##n

int arr0 [] = {0,0,0};
int arr1 [] = {1,1,1};

int* select_arr(int i){
return ARR_NAME(i);
}

これはどうしてコンパイルエラーになりますか?
ちなみにreturn ARR_NAME(0)だと正しく動きます。
0052デフォルトの名無しさん (ワッチョイ 51f6-ACnl)
垢版 |
2019/09/19(木) 16:38:05.33ID:1k0/HGmS0
タイミングの問題だ
#defineはコンパイル前に解釈されるが
関数仮引数の値は実行時に渡される

実行時とはコンパイル〜リンクまで全て終わった後の話だ
だから関数仮引数の値を#defineで置き換えることができない
0058デフォルトの名無しさん (ワッチョイ 0dd2-jgJV)
垢版 |
2019/09/20(金) 15:15:19.52ID:X5/vL2CD0
                            __、
                iー'゙゙゙゙''''ー-,/^´  ゙';
                |      ゙ゝ....‐  .}
                !           |,
                   i____________......r'".'''゙ヽ  . ..,,、
                ,,. -/        `'ー  |      .' 、
             ,..-'"  l゙          __.. -''′     ./
        . ,/     .`''''〜- ....---''''"゛        ,/
       /.,,                           ,,..r'"
         `''ー、,、                 _,,,-'"  `!、
               /'r‐、          ,/´ /゙゙',    ヽ
            / レ'゙ ´゙リ´ . `^^゙゙゙゙゙゙厂j  .! │    . l
           /  |  .l.      丿/ / . /      !
            l  !  .,,....--ー'''''''″ /  .| (、     . !
         _  .ィ‐¨゙゙'广゛ ......    ./  ,ノ.l.  `'ィ ..,,_/
     ..-‐'"゛  'l_゙'ーノ`' ..........,,_ .,, -"  / │   .!   ゙''''-.
   .i''i       ヽ、          /  .!    !
   ,)イ      : ..,,,,,>u;;;;,、.__ _,,,.. /    |    "
  / . 、          !  .`             |
     !,                     ,!
     ."                        ゙
0060デフォルトの名無しさん (ワッチョイ 02ad-9GzD)
垢版 |
2019/09/23(月) 14:43:33.00ID:995jKG080
グローバル変数を宣言する時、ヘッダファイルでextern int hogehoge;ってするよね。
*.cからヘッダファイルをincludeすると、
extern int hogehoge;を毎回書いたのと同じ状態になるの?
0062◆QZaw55cn4c (ワッチョイ e247-TpwJ)
垢版 |
2019/09/23(月) 15:58:05.13ID:ZLX7TvLd0
>>60
被参照側(メイン)に int hogehoge と書く
参照側(サブ)には extern int hogehoge と書く

これが基本です、*.h を使うのなら

*.h に extern int hogehoge と書く
被参照側(メイン)に int hogehoge と書き、*.h をインクルード…@
参照側(サブ)は *.h をインクルード
@でヘッダと実体に矛盾がないかチェックします
0064デフォルトの名無しさん (アウアウウー Sa8b-dyKo)
垢版 |
2019/09/29(日) 22:13:04.83ID:wBLVWLTJa
お前がC言語を 使う前に
言っておきたい 事がある
かなりきびしい話もするが
俺の本音を 聴いておけ
初期化前の変数を 使ってはいけない
gets()関数も 使ってはいけない
文字列の長さと 配列サイズは別物だ
使い終わったバッファは ゼロクリアしろ
できる範囲じゃなくて 全部やって

https://twitter.com/satoru_takeuchi/status/1176429522687676416?s=03
https://twitter.com/5chan_nel (5ch newer account)
0066デフォルトの名無しさん (ワッチョイ e77c-Sxlc)
垢版 |
2019/09/30(月) 08:11:22.10ID:gJLA2fQe0
パスワードやらなんやらの機密情報を保存したバッファは解放前にゼロクリアしようねという話です。
任意のバッファという意味ではありません。失礼しました
0070デフォルトの名無しさん (アウアウウー Sa8b-dyKo)
垢版 |
2019/09/30(月) 09:14:54.65ID:eZfyppwla
>>66
元のツイートした本人か。
ここ見に来ているとは思わなかった。
0074デフォルトの名無しさん (アークセー Sxbd-BjtM)
垢版 |
2019/10/04(金) 10:40:51.28ID:0WBkPtDcx
そもそもゼロクリアされてるbss領域なんて重要なもの以外にも大量に存在してるので攻撃者がピンポイントで判断することなどまず不可能。
逆に綺麗すぎる乱数のほうが目立つ。
0080デフォルトの名無しさん (アウアウウー Sa21-8Spd)
垢版 |
2019/10/04(金) 14:20:51.26ID:hcjI0QEWa
スワップされてディスクに書き込まれたら終わりなのでスワップされないようにする必要がある。
0081デフォルトの名無しさん (ワッチョイ 8d88-LHep)
垢版 |
2019/10/04(金) 14:34:25.76ID:TDKY2TUM0
windowsの細かな動きがわからんけどスリープとかでメモリ内容を全部ディスクに保存する動きしない?
するなら言語レベルではどう頑張ってもディスクにデータを書き込まずにスルーする術なんてないんじゃなかろうか?
ということは漏洩防止目的でバッファをゼロクリアする意味は無い?
windows以外は知らん
0084デフォルトの名無しさん (ドコグロ MMb1-XtwS)
垢版 |
2019/10/04(金) 15:25:19.34ID:uYF9K7e8M
スワップに書いてある内容がどのプロセスのものかをどうやって知るつもりなんだろう…
てかそんなのがわかる状況ならそもそもセキュリティうんぬん言ってもしょうがないと思う
0085デフォルトの名無しさん (アウアウウー Sa21-8Spd)
垢版 |
2019/10/04(金) 15:35:25.79ID:hcjI0QEWa
Linuxにはmlock()がある。
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/mlock.2.html
多分他のOSにも似たようなのはある筈。
なければ高度なセキュリティが必要なプログラムは作れない。
0086デフォルトの名無しさん (アウアウウー Sa21-8Spd)
垢版 |
2019/10/04(金) 15:43:12.94ID:hcjI0QEWa
サスペンドでメモリ内容が全てディスクに書き込まれるような場合は暗号化サスペンドイメージを使うように予め設定しておくしかないようだ。(もはや言語の問題ではない。OSの問題)。
0087デフォルトの名無しさん (ワッチョイ 8d88-LHep)
垢版 |
2019/10/04(金) 15:53:58.62ID:TDKY2TUM0
最終的にはOSやらハードウェアファームやらのレベルの話に行き着くんで上位レイヤーでの完全対応は無理
ならば他アプリが自アプリのバッファにアクセスできないよう下位レイヤーが保証してるならバッファクリアは不要ということになる?
そんなレベルで心配が必要なことは個人的に触ることは無いと思うけど
0097デフォルトの名無しさん (アウアウウー Sa21-8Spd)
垢版 |
2019/10/08(火) 10:23:23.04ID:UHIrT7RMa
Chupa Chups
0099デフォルトの名無しさん (アウアウウー Sa5b-DLKC)
垢版 |
2019/10/10(木) 20:53:57.73ID:f2z6TkRsa
まずは燃料投下する必要があるんじゃないかな。C言語はダメとかクソとか、あるいは引数にvoidなんて見たことないとか、そういったことを書けば火が付いて3スレぐらいあっという間に消費すると思うよ。
0102デフォルトの名無しさん (ワッチョイ 9f79-NJTS)
垢版 |
2019/10/10(木) 23:54:41.04ID:a+kHg1ZD0
C言語がクソなのは誰の目にも明らかだから燃料にもならない

何を犠牲にしてでも最速を求めなければならないとか
今時キロバイト単位のメモリしか載ってないとかで渋々使わざるを得ないだけ
0111デフォルトの名無しさん (アウアウウー Sa43-n65Q)
垢版 |
2019/10/18(金) 13:50:16.30ID:Re5f6/3aa
誰かYouTuberになって布教活動すれば良いんじゃないか?
この際VTuberで美少女だけど実はおっさんがやってるってのでも良い。
0114デフォルトの名無しさん (アウアウウー Sa43-n65Q)
垢版 |
2019/10/18(金) 22:18:29.15ID:Re5f6/3aa
そう言えば中国にもYouTubeみたいなのがあってYouTuberのようなのをやってる人も居るのだが、顔を若く変換するアプリ使って40代だか50代のおばちゃんが20代ぐらいに見せかけてやっていたってのがあったなあ。

そういうの使えばお前らのハゲもフサフサになるに違いない。
0115デフォルトの名無しさん (ワッチョイ d2c5-S3Tg)
垢版 |
2019/10/21(月) 17:55:25.84ID:SxBFh1HX0
顔を変換するアプリと言えばアダルトサイトに芸能人の顔を合成したAVが上がってたな
見た感じ本物と区別付かないぐらい精巧だった
個人的にここ最近の技術革新では一番衝撃的だったな
0118デフォルトの名無しさん (ワッチョイ de8c-U7Hu)
垢版 |
2019/10/22(火) 11:58:42.07ID:w6Pn7J3f0
printf("%*d", width, num);

printf("%2$*1$d", width, num);
がなぜ等価でですか?だいたい等価?正確に等価?
0120デフォルトの名無しさん (ワッチョイ c3b0-ecnW)
垢版 |
2019/10/24(木) 00:19:19.09ID:Wak+wQ5e0
ずばり日本人って利己的な奴ばっかだから会話から何まで発展しようがないんだな。
後はもう負の連鎖。
0121デフォルトの名無しさん (ワッチョイ ffad-LHKE)
垢版 |
2019/10/24(木) 04:25:22.54ID:nZ5fKqYm0
おまえ利己的だな
0124デフォルトの名無しさん (アウアウウー Sa27-nFuE)
垢版 |
2019/10/24(木) 16:43:51.20ID:gElHX+jGa
荒らされることで活気を保つというのもまたナンだなあ
0125デフォルトの名無しさん (ワッチョイ c3b0-ecnW)
垢版 |
2019/10/25(金) 06:37:52.18ID:2lz/0LgC0
本音だけど、何処の板もそうだけど、噛みついてくるのはすぐさま来るけど親身になって
答えてもそのまま逃げる奴ばっかだし、そりゃ人減るよ。
答える奴には聖人を求める癖に自分がカスすぎるじゃん。
0127デフォルトの名無しさん (アウアウウー Sa27-nFuE)
垢版 |
2019/10/25(金) 12:45:36.00ID:f89Z34lqa
期待が大きいというか、依存だよね。
0129デフォルトの名無しさん (アウアウウー Sa27-nFuE)
垢版 |
2019/10/25(金) 20:51:37.05ID:f89Z34lqa
道具に依存している
0132デフォルトの名無しさん (ワッチョイ ffad-LHKE)
垢版 |
2019/10/26(土) 21:16:39.88ID:2eoY+VbT0
依存できなくなると怒るんだよ
0134デフォルトの名無しさん (ワッチョイ 8b7b-iL8/)
垢版 |
2019/11/07(木) 06:31:27.14ID:+Fv/+mh50
>>133
ctags --c-kinds=+p -R /usr/include/alsa
でどうだろ。
見当つくだろうけど「Cのプロトタイプ宣言部分も出力に加える」の意。

どうして、の答えは「デフォルトではプロトタイプ宣言部は対象外だから」だね。
0139デフォルトの名無しさん (ワイーワ2 FF3f-tB+Q)
垢版 |
2019/11/12(火) 09:36:57.66ID:uG6HIbdYF
>>135
普通

>>137
便利だよね
0140デフォルトの名無しさん (アウアウウー Sacf-aSoi)
垢版 |
2019/11/12(火) 11:31:00.10ID:H6DlknKxa
>>135
C++がCへのコンバータだった頃はクラスをそんな風に変換してたんじゃないかな。
今はコンパイラが内部的にやってるんだろうけど。
0141デフォルトの名無しさん (アウアウウー Sacf-xE2t)
垢版 |
2019/11/12(火) 19:07:08.23ID:4xumfLcka
組み込みプログラマになりたいんだけど入門書やった後は何したらいいの?
0142デフォルトの名無しさん (ワイーワ2 FF3f-tB+Q)
垢版 |
2019/11/12(火) 19:10:21.84ID:I0vQskxnF
中学生なら高校逝け
高校生なら大学逝け
0143デフォルトの名無しさん (アウアウウー Sacf-xE2t)
垢版 |
2019/11/12(火) 19:20:12.48ID:4xumfLcka
社会人なら?
0144デフォルトの名無しさん (ワイーワ2 FF3f-tB+Q)
垢版 |
2019/11/12(火) 19:24:17.50ID:I0vQskxnF
そんな質問の仕方で生きていけると思ってるのか?
自分で考えろ
0145デフォルトの名無しさん (ワッチョイ ef8c-msxt)
垢版 |
2019/11/12(火) 19:26:00.59ID:D/uXBQyj0
LチカへGo
0146デフォルトの名無しさん (アウアウウー Sacf-xE2t)
垢版 |
2019/11/12(火) 19:29:46.05ID:4xumfLcka
>>144
サンキューポークピッツ
0149デフォルトの名無しさん (アウアウウー Sacf-aSoi)
垢版 |
2019/11/12(火) 20:52:53.27ID:krWpkqwCa
組み込み用の何かを買ってきて何か作れば良いのでは?

まあしかしこの頃は小さい組み込み用のやつでもLinux動くのあるし、良い時代になったもんだな。
0153デフォルトの名無しさん (アウアウウー Sacf-xE2t)
垢版 |
2019/11/13(水) 17:39:08.11ID:G8O1eV9/a
30日でできる!OS自作入門ってやつは組み込みの知識としては全く必要ない?
なんか楽しそうだからC言語の入門書終わったらやろうと思ってるんだけど
0154デフォルトの名無しさん (オイコラミネオ MM7f-DJ9s)
垢版 |
2019/11/13(水) 18:01:06.50ID:IhNMqz4FM
>>153
あの本はCPUの知識ないと何をしてるか分からないまま終わると思う
だから知識が増えた実感も感動も少ない(経験談)
揃えるツールも多いし著者が用意した奴だし

個人的にオススメの勉強法は自分で考えたオリジナル言語をCのソースに変換することかな
文字列処理の知識で実現できてなおかつC言語に詳しくなれるし、他言語の構文を学ぶきっかけにもなる
0156デフォルトの名無しさん (アウアウウー Sacf-xE2t)
垢版 |
2019/11/13(水) 18:17:24.08ID:G8O1eV9/a
Arduinoはダメ?
0159デフォルトの名無しさん (アウアウウー Sacf-xE2t)
垢版 |
2019/11/13(水) 19:10:14.39ID:G8O1eV9/a
>>157
ラズパイはダメってレスがあるからさ。Arduinoもダメなのかな?と思ってさ。
とりあえずやってみるわサンキュー
>>158
なんで?
0160デフォルトの名無しさん (ラクッペ MM0f-ChRG)
垢版 |
2019/11/13(水) 19:19:54.35ID:puH+izSFM
組み込みは扱うものの範囲がベラボーに広いからターゲットが決まってないないなら
予備知識なんてそれこそ有りとあらゆる事を学ばなきゃならなくて時間の無駄
いきなりやりたいことに手を付けるとか目的の会社に就職する算段するとかの方が現実的
0162◆QZaw55cn4c (ワッチョイ 1f47-eDwC)
垢版 |
2019/11/13(水) 20:14:16.53ID:ESFhNQze0
>>161
>興味あるところを片っ端からやればいいよ

至言ですね…
つまるところアドバイスできるとすれば、この言葉にまとまってしまいますね
0163デフォルトの名無しさん (ワッチョイ ef9e-DaD1)
垢版 |
2019/11/13(水) 21:24:12.52ID:h+5DYY+D0
ラズパイでもArduinoでもPICでもブレッドボード用意してまずはLチカから
トランジスタや7セグをやって、スイッチからの入力などとれるようになったら
またそこで考える
0164デフォルトの名無しさん (アウアウウー Sa45-coos)
垢版 |
2019/11/14(木) 03:35:32.04ID:YiNpU217a
>>154
この本アセンブリとC言語の勉強になったりしない?
0166デフォルトの名無しさん (ワイーワ2 FFca-/nAh)
垢版 |
2019/11/14(木) 11:24:43.32ID:Owl20mAsF
>>164
ならない

はじめて読む486の方が486倍マシ
0167デフォルトの名無しさん (ワッチョイ e9aa-coos)
垢版 |
2019/11/14(木) 12:42:01.31ID:bgqE36PV0
じゃあやーめた
0168デフォルトの名無しさん (スップ Sd02-lusp)
垢版 |
2019/11/14(木) 13:11:45.63ID:hMO8QTtJd
まずはLチカでオームの法則を押さえよう
次はhFEだ フォトトラとダーリントン
フォトカプラとHブリッジあたりまでできるようになれば
あとはどうにでも
0169デフォルトの名無しさん (ワッチョイ 068c-ENPG)
垢版 |
2019/11/14(木) 13:13:53.45ID:HGG0mhgt0
リレーかちゃかちゃも捨てがたい。
0171デフォルトの名無しさん (ワッチョイ 7e7c-G967)
垢版 |
2019/11/14(木) 13:23:50.41ID:pX7h0rWU0
制御系の場合は、LTIシステム、Z変換など制御理論の基礎知識がないとそもそもプログラミングが出来ない
どの様にプログラムすれば良いのか迷い途方に暮れることになる
0173デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/14(木) 13:47:33.26ID:YSMwOav4a
そういえば抵抗のカラーコードって色弱の人とかには辛いんじゃないか?

と、今ごろ気づく。
0174デフォルトの名無しさん (アークセー Sx11-PSUN)
垢版 |
2019/11/14(木) 14:24:10.71ID:tET/gf2zx
おじさんが若い頃は新人はPIOドライバを書くことから始めてたけど今じゃそれさえも最初からドライバやSDKで用意されてるものが多いしな。
組み込みソフト技術者を自称してる人でも最近じゃリセットエントリからSDRAM設定やスタック設定やセクション初期化とかmainがコールされるまでの部分を書ける人は少なくなってるね。
0177デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/14(木) 18:45:54.05ID:YSMwOav4a
なるほど。やはりそうか。
スマホアプリあってよかったな。
0179デフォルトの名無しさん (アウアウウー Sa45-coos)
垢版 |
2019/11/14(木) 19:41:22.93ID:YiNpU217a
ものづくりC言語塾とかいうプログラミングの勉強サイト見つけたんだけどわかりやすいのここ
0182デフォルトの名無しさん (ワッチョイ 068c-ENPG)
垢版 |
2019/11/15(金) 00:45:20.33ID:r8gV+bPL0
建築土方で分ける方が良いかも。知らんけど
0183デフォルトの名無しさん (ワッチョイ c27c-6iPJ)
垢版 |
2019/11/15(金) 00:59:59.43ID:YJCQuSug0
ポインタを返す関数の中身を他の変数にコピーしたいとき
int a;
a = *func();
みたいな事をしても良いんでしょうか?
コンパイルしたら動きましたが…
普通こういうことはしませんか?
0191デフォルトの名無しさん (ラクッペ MM81-G967)
垢版 |
2019/11/15(金) 11:25:31.01ID:rGVJWIdvM
極論すれば対象をモデル化して状態方程式をプログラムで逐次演算するアルゴリズムを実装するのが本来の制御系の組み込みソフト
論理回路のソフト処理への代替はコストダウンの一環で取り込むことはあってもあくまでオマケ
0192デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/15(金) 11:37:39.91ID:qkK0C17la
>>178
抵抗って昔からカラーコードで抵抗値表してるのでは?今は変わったの?
0194デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/15(金) 11:46:04.74ID:qkK0C17la
>>183
良いんだけどNULL返されたらおしまいなのでそのためにワンクッション入れるのが普通なのではないな。

実際 localtime() なんかはエラーの時にNULL返す事になってるしな。自分の所の変数にコピーする場合はまずポインタで受けてNULLでなければポインタの指してる先がコピーされるように書くよ。
0196デフォルトの名無しさん (ワイーワ2 FFca-/nAh)
垢版 |
2019/11/15(金) 14:54:35.89ID:76R0IrhIF
>>180
典型的なアフィwebサイトと同じ造りなんだよな
一目でそっとじ
0197デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/15(金) 15:03:20.79ID:qkK0C17la
>>193>>195
あの小さい四角いやつか。
電子工作何十年もやってなくて知らなかった。
ググって画像見た。
0202デフォルトの名無しさん (ワッチョイ 8233-iGNt)
垢版 |
2019/11/15(金) 17:44:35.54ID:DqSPL00u0
https://ideone.com/y2Ogra
で0.3がFalseになるのはわかるのですが、0.2がTrueになるのはなぜですか?
0204デフォルトの名無しさん (ワッチョイ 8233-iGNt)
垢版 |
2019/11/15(金) 17:49:38.82ID:DqSPL00u0
精度の問題?
0205デフォルトの名無しさん (ワッチョイ 8233-iGNt)
垢版 |
2019/11/15(金) 17:50:48.82ID:DqSPL00u0
>>203
ありがとうございました
0208デフォルトの名無しさん (スプッッ Sd02-iD2J)
垢版 |
2019/11/15(金) 17:57:08.67ID:pd2oXw5yd
小数は無限個あるが
doubleやfloatで表現出来る値は有限個
だから正確に表す事が出来る小数はごく一部となる

ほとんどの環境では0.1を正確に表す事が出来ない
だから近似になる

0.1の近似を3個足したものの近似と
0.3の近似

これが同じ値になるかどうかは運しだい
0209デフォルトの名無しさん (スプッッ Sd02-iD2J)
垢版 |
2019/11/15(金) 18:11:10.06ID:pd2oXw5yd
多くの環境では

floatで24bit整数の範囲は正確に表現出来る
doubleで53bit整数の範囲は正確に表現出来る

floatでもdoubleでもlong doubleでも
元の値に対して2^nをかけても2^nで割っても
(それが普通に表現出来る範囲であれば)誤差はない

1/n は、nが2^mの形でない場合は必ず誤差が出る

このくらい覚えて置けばいい
0211デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/15(金) 18:24:08.60ID:uUFlvtLt0
趣味でC言語で遊んでるんだけど入門書読んで、
printf scanf if else switch等使ったプログラム作ったんだけど次に何をしたらいいかわからへんわ。
0212デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/15(金) 18:24:52.50ID:uUFlvtLt0
あんまりしっかりとポインタは勉強できてないんだけど、
ポインタっていつ使うの?って感じ。
組み込みやらんと基本的には使わない?
0215デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/15(金) 18:43:16.92ID:uUFlvtLt0
全く実感ない
printfってどうやってできてんの
0216デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/15(金) 19:07:35.33ID:uUFlvtLt0
とりあえずポインタの勉強はやり直すわ。
次にArduinoでも触ってみるか
0218デフォルトの名無しさん (ワッチョイ 7188-L4DL)
垢版 |
2019/11/15(金) 19:17:48.26ID:SL2qDcaa0
>>215
関数に値を渡すのはわかるよね?
printfって関数に出力して欲しい数値や文字を渡してる
この渡すときにCPUの動き的には複製されたものが渡される
数値なら複製しても対して問題ないけど文字列の場合なんかだと複製することで消費されるメモリが増えてしまう
だから文字列全部を複製なんかせずに文字列の先頭の場所だけ渡す
受け取ったprintf側ではその場所を元に文字列にアクセスする
この場所を指し示す仕組みがポインタと呼ばれるもの
10文字でも1000文字でも先頭の場所、つまりアドレスは4byteとかで表せるので情報の受け渡し効率が良い

正確には間違ってる部分もあるかもしれんがだいたいこんなイメージ
0222デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/15(金) 19:32:48.14ID:uUFlvtLt0
産休。関数とポインタをもう一度やり直してくる
0226デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/16(土) 08:31:42.30ID:ptZ6lm890
int main()しか使ってないわ。どういう時に使うんだっけそれ
0231デフォルトの名無しさん (アウアウウー Sa45-coos)
垢版 |
2019/11/16(土) 10:31:31.82ID:jtqy6mRLa
C言語でOS作ってみたいんだけどなぁ。入門レベルじゃきびしいな
0237デフォルトの名無しさん (ワッチョイ 82ad-6d/E)
垢版 |
2019/11/16(土) 22:07:42.30ID:gv6Xc8ej0
>>234
大半はCで行けそうな感じはするけどな。実際にUNIXやLinuxはそうだし。
厳密に完全に100%Cにするとなると最初からそれを考慮してCPU作らないとできないとは思うが、かといってその必要性はないな。研究目的ならわかるが。
0238デフォルトの名無しさん (ワッチョイ 8202-y756)
垢版 |
2019/11/17(日) 00:21:50.66ID:CjHjsj5F0
>>237
こういう知ったかして無知晒すバカはどうにかならんのかいな
0249デフォルトの名無しさん (ワッチョイ 65e5-6HYk)
垢版 |
2019/11/17(日) 15:17:17.70ID:cZKVuoHK0
231 CでOS作ってみたい
233 RTOSでさえ無理
234 Cだけで?そりゃ無理
237 100%Cは最初からそれを考慮したCPUならできる ←キ
238 237はシッタカ
240 特権命令は?Cプログラムが動き出せる準備は?
241 大半は100% ←キ
243 スタートアップ不要のmainとは?
244 OSの話だよ?
247 話を逸らすな
248 スタートアップだOSじゃない ←キ
0253デフォルトの名無しさん (スップ Sd02-iD2J)
垢版 |
2019/11/17(日) 16:31:19.54ID:Mp5WsRX6d
いや、
どっちかっていうと趣味みたいなもんで
いろんなCPUでやってるけど

ただ単に
Cプログラムが動き出せる最低限の条件
と書いてあるんだからOS起動ではないでしょ
0255デフォルトの名無しさん (スップ Sd02-iD2J)
垢版 |
2019/11/17(日) 16:58:35.66ID:Mp5WsRX6d
Cプログラムと書いてあるんだからCプログラムだろ
OSが起動出来る十分条件ではなく、必要条件の1個
特権命令もその一つ
もっとも特権命令が存在しないCPUや使わなくてもOSがつくれるCPUがあるので
必要条件ではないけど
0257デフォルトの名無しさん (ラクッペ MM81-G967)
垢版 |
2019/11/17(日) 17:02:57.82ID:0F7CIe0FM
ベアメタルであれば尚更main関数を呼び出す前に割込みベクターやスタックポインタの初期化などいろいろ準備が必要だろ
OSに頼れないので自分で準備しないとC
のプログラムは動き出せない
0258デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/17(日) 17:04:33.98ID:8gWobnsKa
さて、次にどんな燃料を投下すれば炎上するか・・・
0259デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/17(日) 17:06:07.28ID:8gWobnsKa
とりあえずCでOSでスレが活性化することはわかった。機会があったら他の掲示板でもやってみよう。
0262◆QZaw55cn4c (ワッチョイ 6247-kMGZ)
垢版 |
2019/11/17(日) 18:50:25.01ID:kPaO6TXK0
>>261
>スタックポインタの初期値はリセット時に決められた番地から読み出す
プログラムカウンタの方じゃないですか?
0272デフォルトの名無しさん (ワッチョイ 7188-L4DL)
垢版 |
2019/11/18(月) 09:05:45.96ID:tFTaAL8Z0
OSの無い組み込み環境なんて山ほど存在してて、その環境の中で全部Cのもで書いてるとこも存在してる
そもそもOS入れられるような環境とは言えないけど、こういうとこでCで書いてるものにOS的な動作をさせればそれはCのみで作ったOSと言えるのか?
おそらくどこからどこまでがOSの領域か?がずれてるから延々と罵り合いになるのでは?
0274デフォルトの名無しさん (ワッチョイ e9aa-coos)
垢版 |
2019/11/18(月) 09:59:14.55ID:FeTeb+YA0
私のために争わないで!
0277デフォルトの名無しさん (ワッチョイ cdda-JEG5)
垢版 |
2019/11/18(月) 10:27:02.98ID:7xBgQ7dd0
組み込み用の処理系についてはメーカ独自拡張の独壇場

コンパイラ本体は
__section
__bank
__interrupt
など独自拡張多し

プリプロセッサも
#pragma
で設定弄らないといけないので注意
0280デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/18(月) 12:06:28.17ID:vV3s+CrDa
ピクピク
0285デフォルトの名無しさん (アウウィフ FF45-/Df3)
垢版 |
2019/11/18(月) 12:59:12.61ID:ahZzeXy3F
CP/MにはBDSCが定番だった
0289デフォルトの名無しさん (ワッチョイ d11d-7HT4)
垢版 |
2019/11/18(月) 14:18:07.35ID:+ljooU2/0
ビジネスで優秀な人材育成する上司は何を教えているのか?
https://www.youtube.com/watch?v=apxtSqxjw08&;t=13s
マクドナルド伝説の店長が教える、最強店長になるために必要なこと
https://www.youtube.com/watch?v=0wMbR7JIeeQ&;t=3154s
「最強の働き方」長時間労働やノウハウよりも大切なこと
https://www.youtube.com/watch?v=JnMHbI1-e3E&;t=3606s
美容師の楽しさ再発見!やる気スイッチが入る働き方セミナー
https://www.youtube.com/watch?v=DGzXQT799oY
視覚障がいを乗り越えた活法家
https://www.youtube.com/watch?v=6IuY_K3uFdo&;t=805s
0292デフォルトの名無しさん (アウアウウー Sa45-coos)
垢版 |
2019/11/18(月) 20:54:33.04ID:Ufz4tuHsa
ものづくりC言語熟ってサイトいいじゃん!
0294デフォルトの名無しさん (アウアウウー Sa45-coos)
垢版 |
2019/11/18(月) 21:06:39.12ID:Ufz4tuHsa
>>293
もしかしてキ○ガイ?
0295デフォルトの名無しさん (ワッチョイ 1102-coos)
垢版 |
2019/11/18(月) 21:29:13.55ID:9xSA7Xxe0
ものづくりC言語塾のポインタの説明わけわからん
0296デフォルトの名無しさん (ワッチョイ 2905-n3bN)
垢版 |
2019/11/18(月) 22:06:08.02ID:WvhlQmiy0
C言語のポインタはCPU機械語における間接アドレシングの抽象化だろ?
それ以上でも以下でも無い
0299デフォルトの名無しさん (ワイーワ2 FFca-/nAh)
垢版 |
2019/11/19(火) 12:48:33.17ID:8naC8O/UF
>>296
インクリメントは良く出来てるな

あとポインタのポインタと配列へのポインタの文法を混乱して覚えてる人が居て
そいつらのせいで劣化コピーが出回ってるのがさらなる混乱の原因

正しく理解して正しく使えばCのポインタは何も難しくない
0301デフォルトの名無しさん (スッップ Sda2-lusp)
垢版 |
2019/11/19(火) 13:26:52.18ID:O502C4IMd
二次元配列は二重ポインタで扱うという自分の勘違いを正当化したくて
mallocでポインタの配列を作るやり方を唯一正統と強弁するアホが
fjで暴れてたな、そういえば
0303デフォルトの名無しさん (ワイーワ2 FFca-/nAh)
垢版 |
2019/11/19(火) 14:08:13.34ID:8naC8O/UF
>>300 みたいなのを炙り出せたのであれば
レスに意味があったと言えよう
0307デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/19(火) 20:16:56.03ID:c65LTQ+sa
>>299
アセンブラやったことのない人は中々正しく理解できないようで、それでポインタの事だけ書いてある本が沢山出ちゃうんだろうな。
0308デフォルトの名無しさん (アークセー Sx11-9KXC)
垢版 |
2019/11/19(火) 21:33:52.66ID:pHwegslWx
何年も書かないと忘れるな〜

ポインタのポインタは、ポインタの値を参照渡しするときくらいしか思いつかん

char *p;
foo(&p);

void foo(char **p) {…}

みたいな、
305のような書き方はピンとこないわ
0314デフォルトの名無しさん (ラクッペ MM81-G967)
垢版 |
2019/11/20(水) 05:59:16.05ID:6t1gUx2GM
関数の引数に限って言えば
func(**p)
func(*p[])
func(p[][])
func(p[][10])
どれでも同じ
引数として配列を引き渡す方法はない
どれも先頭要素へのポインタが値渡しされる
関数側で引数がポインタへのポインタ(いわゆる二重ポインタ)なのか、ポインタの配列なのか、配列の配列(いわゆる二次元配列) なのか区別する手段はない
引数に配列として要素数を渡してもエラーにはならないだけで無視される
0318デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/20(水) 09:49:56.67ID:gQNT2Wxfa
>>314
プロトタイプ宣言しておけばC言語としては違う状態になるよ。
0320デフォルトの名無しさん (ワイーワ2 FFca-/nAh)
垢版 |
2019/11/20(水) 12:01:08.83ID:grCkJCm3F
>>308
あほか
>>305 は間違いの例だから
ピンと来なくて当然
0321デフォルトの名無しさん (ワイーワ2 FFca-/nAh)
垢版 |
2019/11/20(水) 12:06:59.82ID:grCkJCm3F
>>311
何を目的に書いてるのか知らんが

A: mul(double** x, double** y, int n, int m){

B: mul(double x[][20], double y[][20], int n, int m){

C: mul(double (*x)[20], double (*y)[20], int n, int m){

AとBは等価じゃないぞ
0322デフォルトの名無しさん (ワッチョイ cdda-JEG5)
垢版 |
2019/11/20(水) 13:41:25.47ID:CxWhIUNe0
変数としてのxは
A:double型のポインタを指すポインタ
B:double型の配列を要素とする配列の先頭要素を指すポインタ
C:double型の配列を指すポインタ

関数の引数としてのxは
A,B,Cすべてdouble型の参照オブジェクト(何でもいい)を指すポインタ
0324デフォルトの名無しさん (ワッチョイ cdda-tLD+)
垢版 |
2019/11/20(水) 15:27:36.91ID:CxWhIUNe0
まあ実際C:のような例は見たことはないけど、少なくともA:とB:は関数の引数としては同じと解釈される
中身は受け取った関数側でプログラマが処理する事案であってdouble型の何かを指すポインタという以上の意味はない
0326デフォルトの名無しさん (アウウィフ FF45-/Df3)
垢版 |
2019/11/20(水) 16:26:53.96ID:ACUpjjQJF
>>311 しね
>>324 お前は黙ってろ
0329デフォルトの名無しさん (アウウィフ FF45-/Df3)
垢版 |
2019/11/20(水) 16:54:14.17ID:ACUpjjQJF
>>327
>>314 func(p[][])
似たようなもんだな
0332デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/20(水) 17:18:03.94ID:gQNT2Wxfa
>>324
いや。AとBは違う。
0333デフォルトの名無しさん (アウウィフ FF45-/Df3)
垢版 |
2019/11/20(水) 17:19:03.29ID:ACUpjjQJF
>>330
>>319 の言ってるのは >>322 のとは違うだろ

これは正しい
>プロトタイプ宣言 void func(char *p[]);
>関数定義 void func(char **p) {}

これは間違い
>プロトタイプ宣言 void func(char p[][20]);
>関数定義 void func(char **p) {}
0334デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/20(水) 17:36:55.77ID:gQNT2Wxfa
その通り
0336デフォルトの名無しさん (アウアウクー MMd1-+hLn)
垢版 |
2019/11/20(水) 18:37:56.75ID:lnMf/X4/M
初めて書き込む初心者ですが
配列存在そのものがポインタと違う
という話と
ポインタとして渡して同じように扱える
という話の食い違いをしてるのですか?
0337デフォルトの名無しさん (アウウィフ FF45-/Df3)
垢版 |
2019/11/20(水) 19:19:34.26ID:ACUpjjQJF
ポインタの配列はポインタのポインタとして扱えるが
配列へのポインタはポインタのポインタとして扱ってはいけないって話
そりゃ無理に使おうとすれば使えない訳じゃないが止めた方が良い
0340デフォルトの名無しさん (アウアウウー Sa45-nhir)
垢版 |
2019/11/20(水) 20:34:14.51ID:gQNT2Wxfa
そしてまたポインタ解説本が一冊増えるのであった
0343デフォルトの名無しさん (ワイーワ2 FF63-KqLj)
垢版 |
2019/11/25(月) 13:13:12.61ID:pjJuONFZF
余命何年かな
0347デフォルトの名無しさん (ワッチョイ 2b7c-QS5Z)
垢版 |
2019/11/25(月) 14:10:49.09ID:ZBE9lLbs0
>>345
===は比較演算子で、&はビット演算子(扱いは算術演算子と大差ない)だから。
funcと&funcが同じなのは単なるシンタックスシュガー。 配列のそれと変わらん。
charは符号もへったくれも無かったため。 最上位がパリティなことも多かったし。
0348デフォルトの名無しさん (ワイーワ2 FF63-KqLj)
垢版 |
2019/11/25(月) 14:13:37.69ID:pjJuONFZF
char hoge[10][10];
があったとして
hoge と &hoge[0][0] が一緒なのは判るが
&hoge とか hoge[0][0] は一緒じゃない
0349デフォルトの名無しさん (ワッチョイ 3988-+jxl)
垢版 |
2019/11/25(月) 14:40:15.02ID:xlCLCIdV0
算術演算子と大差無いと言うならなおさら優先順位が逆転するのは不思議
つうか神様への質問なんだからなんでそういう仕様になったかを答えてほしんでしょ
0352デフォルトの名無しさん (ワッチョイ 997b-H1eq)
垢版 |
2019/11/25(月) 16:42:52.23ID:Z7hJDN/t0
わたしゃ神様じゃないけど、カーニハンとパイクの『プログラミング作法』には
「カッコを使って演算子の優先順位の曖昧さを避けよう」みたいな項があるね。
もちろん規格では厳格に決まってるけど、使用者の記憶があやふやって話。

あの辺を読むと「ビット演算子より比較演算子を優先したのは誤りだったかも」と
ご当人が思ってたんじゃないかと感じるわ。
0355◆QZaw55cn4c (ワッチョイ d347-PF5/)
垢版 |
2019/11/25(月) 19:12:09.16ID:2aQAGKkK0
>>342
K&R1 から K&2 への相違で強烈に疑問を持っているのが
引数に配列をとったときは、配列の先頭のポインタが渡るのに、引数に構造体をおいたときは、構造体の実体がコピーされて渡されるのはなぜ?
馬鹿が
struct A {
int a[1234567890];
};
とかやったときには、これが関数の引数に乗ったときには、正気でコピーする気なのですか?
0357352 (ワッチョイ 997b-H1eq)
垢版 |
2019/11/25(月) 19:27:41.70ID:Z7hJDN/t0
2点ほど訂正させてくれ。

カーニハン先生はC言語に大きな貢献をしてるけど、C言語の設計は
リッチーさんの仕事でカーニハンさんは手を出してないんだね。
だからこの場合「ご当人」と呼ぶのは正しくなかった。
「ビット演算子より比較演算子を優先するとは、デニスの野郎め
下手コキやがって」と思ってるんじゃないかと感じるわ。
…という具合に訂正。

もうひとつ。カーニハン先生は今の時点で健在らしい。
実は先の投稿の時点で亡くなってると勘違いしていた。
これもリッチーさんと混同したのが原因。
0359◆QZaw55cn4c (ワッチョイ d347-PF5/)
垢版 |
2019/11/25(月) 19:42:04.68ID:2aQAGKkK0
>>342
可変長引数のプロモーション(格上げ)が理解できない
なぜ float は double に、char, short, は int に格上げされるのか?
0362◆QZaw55cn4c (ワッチョイ d347-PF5/)
垢版 |
2019/11/25(月) 20:19:59.47ID:2aQAGKkK0
>>360
関数の引数には、構造体のポインタではなくて、構造体そのものを渡します、構造体そのものを渡せるようになったのは K&R2 から可能になりました
C の神 >>342 に、この改変―個人的には改悪について、一度お聞きしたいと思っていたんです
0364デフォルトの名無しさん (ワッチョイ fb8c-qZD/)
垢版 |
2019/11/25(月) 20:35:27.76ID:NzDv81TY0
ヘッダファイルには何を書きますか?
こめおしだるまとかですか
0375デフォルトの名無しさん (ワッチョイ 13ad-c8oy)
垢版 |
2019/11/26(火) 04:17:51.19ID:q8waUqPK0
これからの時代のcharは64bitで
0381デフォルトの名無しさん (アウアウウー Sa9d-Pqlv)
垢版 |
2019/11/26(火) 18:23:04.66ID:UD9MC/mBa
>>377
キーッ
0383デフォルトの名無しさん (アウアウウー Sa9d-Pqlv)
垢版 |
2019/11/26(火) 20:29:20.89ID:UD9MC/mBa
もっとはんなりと言ってください
0386デフォルトの名無しさん (ワッチョイ 13ad-c8oy)
垢版 |
2019/11/27(水) 00:28:00.77ID:0YyUhowx0
constどすえ
0387デフォルトの名無しさん (ワッチョイ 9202-KPDH)
垢版 |
2019/11/28(木) 01:13:55.51ID:omfIxgsG0
void君いる?
0391デフォルトの名無しさん (ワッチョイ 9202-KPDH)
垢版 |
2019/11/28(木) 09:18:13.24ID:omfIxgsG0
void君見てんだろ?
またあの名言聞きたいよ

てかspて何だ?
0395デフォルトの名無しさん (アウアウウー Sacd-8Irb)
垢版 |
2019/11/28(木) 12:49:27.76ID:pgFu+V4ea
はなしししししし
0398デフォルトの名無しさん (アウアウウー Sacd-8Irb)
垢版 |
2019/11/28(木) 17:13:55.23ID:pgFu+V4ea
(´-`).。oO(今の人は newsgroup なんて知らないんだろうなあ・・・)
0403デフォルトの名無しさん (ワッチョイ 1902-UMS6)
垢版 |
2019/11/28(木) 18:46:29.37ID:+WcD/xQQ0
C++やるで
0405デフォルトの名無しさん (ワッチョイ 1902-UMS6)
垢版 |
2019/11/28(木) 19:29:09.73ID:+WcD/xQQ0
C++あかんの?
0408デフォルトの名無しさん (アウウィフ FFcd-Qbqw)
垢版 |
2019/11/29(金) 10:41:44.97ID:N/f9f1S7F
つかき君いるのかな
0410デフォルトの名無しさん (ワッチョイ 5ef2-zAiV)
垢版 |
2019/11/29(金) 17:04:48.86ID:F/drosec0
>>407
某ゲームで、ボスバトルまでの待ち時間が結構ありまして、そのちょっと前のタイミングを知るのに
ストップウォッチ兼タイマー ver 0.1 を愛用しております。 自分で作ってもよかったのですが
蟻さんので必要十分だったのでありがたく使わせてもらっています。
ありがとうございました!
0423デフォルトの名無しさん (ササクッテロ Sp79-YC6P)
垢版 |
2019/12/01(日) 19:27:28.70ID:QQlcLgdJp
大学の課題でフーリエ変換を利用した画像保存プログラムを作成せよっていう
課題が出ました…

もうお手上げです。助けてください
0426デフォルトの名無しさん (ササクッテロ Sp79-YC6P)
垢版 |
2019/12/01(日) 19:37:50.36ID:QQlcLgdJp
>>424
>>425
そうです。
実際に本気で組んだら何行くらいになるんでしょうか?
それだけでも目安を教えてほしいです。

例えば
木の絵をピクチャーボックスに描きました。
フーリエ保存してファイルを作成します。
ファイルを再現できました。
同じ絵です。
成功です。

こんな感じです。
0429デフォルトの名無しさん (ワッチョイ 9e2d-UfrM)
垢版 |
2019/12/01(日) 22:21:33.72ID:9XVhluJD0
画像圧縮でフーリエ変換は罠だな、最初からDCT使って提出しようず
0431デフォルトの名無しさん (スップ Sdb2-4gZL)
垢版 |
2019/12/02(月) 00:41:46.52ID:RIgVO6ZZd
>>426
何でも良いなら
1x8に区切って1次元でフーリエ変換して
適当にビット数を減らして保存

読み出してビット数を元にもどして逆フーリエ変換

フーリエ変換は
abcdefghhgfedcba
のようにすると
同じ結果が2個ずつ出るので
半分だけ保存する
0435デフォルトの名無しさん (ラクッペ MM69-iMJF)
垢版 |
2019/12/02(月) 02:45:05.18ID:uImhRr2lM
大学の課題と言うくらいだから画像云々はただの手段で目的はフーリエ変換というかFFTのアルゴリズムを実装できるか
というのが評価基準だと思う
間違って外部ライブラリを使ったり変に出題者の意図を捻じ曲げて解釈したりすれば減点される可能性高いから注意しろよ
0436デフォルトの名無しさん (ワッチョイ f514-3RYV)
垢版 |
2019/12/02(月) 09:05:35.78ID:cSs5r0tn0
>>435
みんな大学の課題という前提を忘れて実務的実用的な話になってるよね
フーリエ変換と逆変換をプログラムで実装できているかが採点基準であって
画像はバイナリデータがちゃんと元に戻っているか確認する手段にすぎないと思う
0445デフォルトの名無しさん (ワイーワ2 FF1a-YC6P)
垢版 |
2019/12/02(月) 14:56:19.28ID:9YVAThVAF
>>423
>>426
離散コサイン変換じゃいかんのか
0446デフォルトの名無しさん (ワイーワ2 FF1a-YC6P)
垢版 |
2019/12/02(月) 14:59:03.83ID:9YVAThVAF
>>432
どうせ課題なんだしそこまで求めてないというか
もしすごいのが出来たら教授が自分の成果にして発表するんやろ
0447デフォルトの名無しさん (エムゾネ FFb2-YC6P)
垢版 |
2019/12/02(月) 15:03:30.60ID:HSnksJTzF
>>442
ほんそれ

ただし無限な
0449デフォルトの名無しさん (ワッチョイ b5da-mphH)
垢版 |
2019/12/02(月) 15:06:19.88ID:R6hiSLip0
講義での学習課題としては非圧縮でないと判定が面倒だな
単にデータを間引いただけなのか演算を間違っているのか確認に手間が掛かる
むしろ完全可逆で実装した方が採点する側としては分かりやすいだろう
出題者の意図はどこにあるか質問者は理解しているのだろうか?
0451デフォルトの名無しさん (ワッチョイ 12a5-dfs3)
垢版 |
2019/12/02(月) 15:18:11.07ID:az4xQt0G0
「オメーの気持ちなんてしったこっちゃねー
 オレに分かるように話せ」
が今の潮流

分からないように反為さないヤツは無視していいし排除していい
なんつったってオレが理解出来ないヤツは何言ってるか分からないコミュニケーション不可能な敵に近いからな
気持ち悪いから排除してもいいし、何よりオレに理解されようと思ってない
だから排除していいでしょ

……という思考で動くのが現代の日本社会
0464デフォルトの名無しさん (ワッチョイ b5da-mphH)
垢版 |
2019/12/02(月) 19:40:44.78ID:R6hiSLip0
フーリエ変換はフーリエ級数展開の一般化
フーリエ級数展開の基本周期を無限大まで拡大すると周波数成分は離散から連続となる
要するに周波数成分を連続スペクトルとして扱うのがフーリエ変換
0475デフォルトの名無しさん (ラクッペ MM69-iMJF)
垢版 |
2019/12/04(水) 13:33:37.43ID:ayTFyO7RM
ラプラス変換やz変換あたりだと完全に工学分野だけどフーリエ変換くらい汎用なものは数学分野でも活用されてると思うけどね
フーリエ級数はローラン級数などと同じ複素解析の基本的な考え方でしょ
べきに展開するか指数に展開するかの違いくらいのもの
0479デフォルトの名無しさん (アウアウウー Sacd-8Irb)
垢版 |
2019/12/04(水) 21:02:14.66ID:wHBVaWfta
沖縄音階は適当にランダムに音出しても曲に聞こえちゃうけどな
0480デフォルトの名無しさん (アウアウウー Sacd-3/Yl)
垢版 |
2019/12/04(水) 22:00:13.57ID:Ibv81ciOa
>>479
それは沖縄音階に馴染みがないから、沖縄音階が使われているだけで沖縄っぽいと感じてるだけなんじゃないかな?
沖縄の人からしたら、そんなデタラメでは曲として成り立ってないと思わないのかな。
0481デフォルトの名無しさん (ラクッペ MMa1-sSJf)
垢版 |
2019/12/05(木) 00:53:08.83ID:MEu1VAiTM
そういった抽象的な感覚を数値化して扱うための手段がフーリエ解析やスペクトル解析と呼ばれる分野
音楽の音階(周波数)やリズム(時系列)を分解して客観的に評価するのが科学的なアプローチ
0482デフォルトの名無しさん (ワッチョイ 4dda-vpIn)
垢版 |
2019/12/05(木) 03:51:45.82ID:6S4oFaeF0
>>481
どちらかといえばウェーブレット解析の方が適しているような気がする
フーリエ変換では周波数特性を求める際に時間領域の情報は失われる
https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%83%BC%E3%83%96%E3%83%AC%E3%83%83%E3%83%88%E5%A4%89%E6%8F%9B

プログラムで扱うなら離散ウェーブレット変換
https://ja.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E3%82%A6%E3%82%A7%E3%83%BC%E3%83%96%E3%83%AC%E3%83%83%E3%83%88%E5%A4%89%E6%8F%9B
0483デフォルトの名無しさん (ラクッペ MMa1-sSJf)
垢版 |
2019/12/05(木) 07:07:45.12ID:MEu1VAiTM
確かにフーリエ解析では周波数成分の変化の時系列データを扱うのは難しい
少し浅はかだったなすまん
それにしても数学者が理論を確立して証明しそれをベースに開発が進むという典型例だな
0484デフォルトの名無しさん (アウウィフ FFa9-MVf8)
垢版 |
2019/12/05(木) 11:04:28.35ID:IbmhSLeWF
200年くらいかかってるな
ベイズで100年ちょっとか
0485デフォルトの名無しさん (アウアウウー Saa9-uArc)
垢版 |
2019/12/05(木) 12:56:44.93ID:esMh+bxMa
>>480
さあ?まあ、実際にやってみな。自分でピアノやオルガンのキーを沖縄音階で適当に押すだけでわかる。
0489デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/05(木) 23:45:36.26ID:5h4sz8350
質問失礼いたします。
以下のpopcountは引数xを2進数で表したときの1の数を返す関数なのですが、
動作原理がよく理解できないため考え方のヒントなどをいただけないでしょうか。

int popcount(unsigned long long x)
{
  x = (x & 0x5555555555555555) + (x >> 1 & 0x5555555555555555);
  x = (x & 0x3333333333333333) + (x >> 2 & 0x3333333333333333);
  return (int)(((x & 0x0f0f0f0f0f0f0f0f) + (x >> 4 & 0x0f0f0f0f0f0f0f0f)) % 0xff);
}

以下のpopcount2は自分で作ったもので、これならうまくいくことは分かるのですが、
上のpopcountも本質的には同じことをやっていると考えていいものなのでしょうか。

int popcount2(unsigned long long x)
{
  int n = 0;
  for (int i = 0; i < 64; i++)
  {
    if ((x & 1ull << i) != 0ull)
    {
      n++;
    }
  }
  return n;
}

どうぞよろしくお願いいたします。
0491デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/06(金) 00:02:45.40ID:lGRN9wM80
>>490
reallocが成功した場合古いポインタに対してfreeは呼ばなくていいと思いますよ。
reallocの戻り値は古いポインタと異なるものになる保証はないはずなので、
freeを呼んでしまうとせっかくreallocした領域まで解放されてしまうかも。
0493デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/06(金) 00:12:50.26ID:lGRN9wM80
>>492
ちゃんとコードを読んだら↓の部分はケアされてましたね。失礼しました。
> reallocの戻り値は古いポインタと異なるものになる保証はないはずなので、

ただ、reallocが成功したらfreeは呼ばなくていいのは間違いないと思います。
0496デフォルトの名無しさん (ワッチョイ 1563-FbR7)
垢版 |
2019/12/06(金) 01:07:01.79ID:Rsc9FZ2h0
>>489
超高速ビットカウント
でググって出てくるページでちゃんと解説してくれてる
この手のよく見るやつはちょっとググれば解説見つかる

何を本質と置くかによるけど両者はそもそもアルゴリズムが違うのでその観点からなら違う
どちらのコードも結果は同じでも前者のほうが圧倒的に処理速度が早い
ビット数などが必要になる処理では速度が重要になるケースも多々あるので結果が同じでも後者は使い物にならない場合もある
0497デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/06(金) 01:36:02.35ID:lGRN9wM80
>>496
レスありがとうございます。紹介していただいた記事を読ませていただき、大変勉強になりました。

ただ、>>489 の場合だと「ビットカウントするデータ列がある程度長い場合」には
当てはまらないため記事の前半の内容がアルゴリズムの基本になるとか思うのですが、
私が理解した範囲で記事の内容を参考にして関数を作成しても以下のようにしかできませんでした。

int popcount(unsigned long long x)
{
  x = (x & 0x5555555555555555) + (x >> 1 & 0x5555555555555555);
  x = (x & 0x3333333333333333) + (x >> 2 & 0x3333333333333333);
  x = (x & 0x0f0f0f0f0f0f0f0f) + (x >> 4 & 0x0f0f0f0f0f0f0f0f);
  x = (x & 0x00ff00ff00ff00ff) + (x >> 8 & 0x00ff00ff00ff00ff);
  x = (x & 0x0000ffff0000ffff) + (x >> 16 & 0x0000ffff0000ffff);
  return (int)((x & 0x00000000ffffffff) + (x >> 32 & 0x00000000ffffffff));
}

しかし >>489 の関数はこれを途中で打ち切って % 0xff をくっつけたような形になっており、
やはり完全な理解には至っていない状況です。
もし可能であれば、この部分についてもヒントをいただけると大変嬉しく思います。
たびたび申し訳ありませんが、どうぞよろしくお願いいたします。
0498デフォルトの名無しさん (ラクッペ MMa1-sSJf)
垢版 |
2019/12/06(金) 04:41:11.15ID:hd4ipDIZM
>>497
64ビット長のビットカウントの最大値はたかだか64なので8ビット(最大255)で表現できる
一方、64ビットデータの分割統治による畳み込み計算は1回目で2ビット×32組、2回目で4ビット×16組、3回目で8ビット×8組の結果が得られる
ビット数を求めるだけなら3回目の結果が得られた時点で8ビットの最大数(255)で3回目の畳み込み結果の剰余を求めてやればそれぞれの組の重み(ビット数)が計算できる
(64を超えることはないことが明らかなので)
0500デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/06(金) 05:11:25.02ID:lGRN9wM80
>>498
わかりやすいご説明どうもありがとうございます!ほぼ理解できたと思います。
たとえば十進数の123を十進数文字の最大値9で割った余りは
1+2+3と等しくなりますが、これと同じ原理ということですよね?

ただよくよく考えてみると、そもそも十進数の各桁の合計を9で割った余りが
元の数を9で割った余りと等しくなることについても
お恥ずかしながら豆知識として知っているだけで原理を理解できていませんでした。
ただこれに関してはもはやC言語ではなく算数の問題なので、
その方面の解説サイトをググって勉強しようと思います。
なにはともあれ、回答してくださった皆様方、どうもありがとうございました。


>>495
読みやすい記事を提供してくださっているので、もう少しだけコメントさせてください。

現状だと、MemoryReAllocateを呼び出す側は関数の成否を確認するために
Mem->Memoryを覚えておく必要がありますので、MemoryReAllocateの引数に
参照渡しを使われるならMemoryReAllocateの戻り値はMomeryではなくて
成否を表すboolなどにされてはいかがでしょうか。

また、reallocは第一引数としてNULLを許容しているので
MemoryReAllocateは入力のMem->MemoryがNULLであっても
Mem->ElementSizeが正しい値であれば正常に動作しますが、
その一方でMemoryAllocateは失敗するとElementSizeがゼロの構造体を
返すので少しアンバランスかなと思いました。

あと、MemoryFreeがboolを返すのであれば、freeの前にNULLチェックを入れて
その結果をMemoryFreeの戻り値としてもいいかなと思いました。
(free関数自体はNULLを渡しても何もしないだけで問題は起こりませんが)

以上お目汚し失礼しました
0501デフォルトの名無しさん (スプッッ Sd03-FAUo)
垢版 |
2019/12/06(金) 05:15:04.10ID:PFBD6caPd
1回進むごとに
2bitずつに区切って、1の数を各2bitに入れる
4bitずつに区切って、1の数を各4bitに入れる
8bitずつに区切って、1の数を各8bitに入れる
...

となるので
>>489だと各バイトの1の合計が、各バイトに入る

各バイトなので256バイトのテーブルを使う方法もある
チープなCPUだとこちらの方が速い

逆にリッチなCPUだと数える命令が最初から備わってたりするしベクタ化も可能

Icelake以降だとAVX512VBMIの命令を使って
超高速に64バイト分カウント出来る
0505デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/06(金) 05:56:22.53ID:lGRN9wM80
>>501 >>504
レスありがとうございます。

> 各バイトなので256バイトのテーブルを使う方法もある
確かにある程度のビット幅ごとにテーブルを使って計算する方法は
シンプルですが効果が高そうですね。

> 逆にリッチなCPUだと数える命令が最初から備わってたりするしベクタ化も可能
> 4命令で64バイト分
勉強になります。本当に速さが必要ならCPU自体の理解から始めるべきなんですね。
このあたりのハードウェアの違いは標準ライブラリ関数が吸収してくれると最高なのですがw


>>502
10進数の話の数式どうもありがとうございます!大変勉強になりました。

そうすると、>>489 の popcount の最後にやっているのは
2進数というか0x100進数で、

0x1000000*a+0x10000f*b+0x100*c+d
=0xffffff*a+0xffff*b+0xff*c+a+b+c+d
=0xff*(0x01010x*a+0x0101*b+c)+(a+b+c+d)

ということになると思うのですがいかがでしょうか。
0507デフォルトの名無しさん (スプッッ Sd03-FAUo)
垢版 |
2019/12/06(金) 06:20:08.91ID:PFBD6caPd
最後の % 0xff を見てなかった
なので各バイトの1の個数と勘違いしてました

>>506はその通り

%は、除算命令を使うと遅いので
コンパイラは
0x0101010101010101
との乗算とシフトに置き換えそうです

PCの64bit環境だとPOPCNT命令がそのまま1命令
Icelake以降だとVPOPCNTQで8個を1命令
で出来ます
0511デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/06(金) 06:37:31.16ID:lGRN9wM80
>>507-508
レスありがとうございます。

> x % 0xff
> よりは
> x * 0x0101010101010101 >> 56 & 0xff
> の方が直接的でコンパイラを頼らない記述でしょう
コンパイラの最適化によって一行目が三行目に
置き換えられる可能性があるということですか!?
難しそうですがちょっと考えてみたいと思います。

> PCの64bit環境だとPOPCNT命令がそのまま1命令
> Icelake以降だとVPOPCNTQで8個を1命令
本当に速度を求めるならCPUの命令を直接使えということですね。
覚えておきます。
0513デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/06(金) 06:54:43.75ID:lGRN9wM80
>>512
ありがとうございます。そのようにしたいと思います。

ご親切に甘えてしまい申し訳ないのですが、
もう一つ質問させてください。今、
@ = x % 0xff

A = x * 0x0101010101010101 >> 56 & 0xff
について考えていたのですが、
x = 0xff のとき、
@ = 0x00, A = 0xffのように、別の値になりませんか?
これは、どこか書き間違いがあるとういことでしょうか。
それとも、この違いは今回の用途では問題にならないということでしょうか。
0515デフォルトの名無しさん (スプッッ Sd03-FAUo)
垢版 |
2019/12/06(金) 06:57:55.91ID:PFBD6caPd
除算命令、
Skylakeで最大90クロックだそうで...
簡単な命令だと1クロックで3〜4個実行出来る事を考えると劇遅ですね

Icelakeだと18クロックなので
改善されてるみたい
0516デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/06(金) 07:06:52.23ID:lGRN9wM80
>>515
> 除算命令、
> Skylakeで最大90クロックだそうで...
なんと!しかも、「最大」という表現が付くんですね。
つまり、ただの数値計算なのに
クロックの数がデータに依存する可能があるということ…?
0517デフォルトの名無しさん (スプッッ Sd03-FAUo)
垢版 |
2019/12/06(金) 07:12:58.28ID:PFBD6caPd
>>516
除算命令の実行時間はデータに依存します
内部的にループしてるようなものなので

SIMDの除算は多分一定
Icelakeももしかしたら一定かもしれません

SIMD乗算も非常に小さな値だと遅い事があったような
0520デフォルトの名無しさん (ワッチョイ 4dda-vpIn)
垢版 |
2019/12/06(金) 07:59:35.87ID:/1U5BHO/0
そりゃ並列処理できるような相互依存性の低い大量のデータでもあるならともかく
小さなデータ塊対象だとパック化やアンパック化する手間が掛かる分だけ
総合的にはSIMD使った方が遅くなるだろ
馬鹿となんとかは使いようと言うだろ
0523デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/06(金) 15:17:31.13ID:lGRN9wM80
>>519
勉強になります。
非正規化数という言葉はちらっと聞いたことはありますが、こういうデメリットもあるんですね。
そして、それでも非正規化数を使うのは
「浮動小数点数の加減算は決して『アンダーフローによるゼロ』にならない」
という理由があるのだということも初めて知り、とても興味深く感じました。


ところで、ビット演算に関してもう一つ相談させていただいてもよろしいでしょうか。

動的メモリ再確保のコストを減らすために確保するメモリのサイズを必ず 2ⁿ-1 の形にしたくて、
与えられた数を下回らない最小の 2ⁿ-1 の値の値を返すような関数を作って使っています。
つまり引数xを2進数で表したときの一番上位の1以下をすべて1に置き換えるような関数で、
具体的には以下のように記述しています。

int fill_lower_bits(int x)
{
  x |= x >> 1;
  x |= x >> 2;
  x |= x >> 4;
  x |= x >> 8;
  x |= x >> 16;
  return x;
}

この関数は割と使用頻度が高いので、PCの64bit環境にPOPCNT命令があるように、
もしfill_lower_bitsと似た振る舞いをする命令があれば名前を教えていただけないでしょうか。

(続く)
0524デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/06(金) 15:18:25.28ID:lGRN9wM80
(続き)
また、こちらはあまり使い道は思いつきませんが、

int fill_higher_bits(int x)
{
  x |= x << 1;
  x |= x << 2;
  x |= x << 4;
  x |= x << 8;
  x |= x << 16;
  return x;
}

という関数を考えることもできて、これなら

int fill_higher_bits(int x)
{
  return -(x & -x);
}

のように簡単な書き方に変更できます。
fill_lower_bitsについてもこういうテクニックがあればいいなと思っているのですが、
もし何かご存知であれば教えていただけると嬉しいです。
0526デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/06(金) 19:33:49.52ID:lGRN9wM80
>>525
何度も本当にどうもありがとうございます。大変勉強になります。

> _BitScanReverse64
こんな命令があったとは!
この名前で検索したら、今まで知らなかった興味深いページがたくさんヒットしました。
ReverseじゃなくてForwardというのもあるみたいですが、
Forwardの方はマイナスを使う方法でも十分高速になりそうなので、
どちらが速いか検証してみようと思います。

> x | -x
確かに…。
ド・モルガンの法則で ~(x & ~x) が ~x & x に書き換えられるのはすぐに分かるのですが、
もしかしてそれと同じことがマイナスでもできるのでしょうか。
-x が ~x + 1 と同じになることは理解しているので、ちょっと考えてみたいと思います。
0527デフォルトの名無しさん (ワッチョイ 23b9-QX1D)
垢版 |
2019/12/06(金) 19:53:04.32ID:lGRN9wM80
>>526
> ド・モルガンの法則

-(a & b) = -a | -b が成り立つかなと期待したのですが、
a = 0, b = 1 のときにつまずいてしまいました。

でも、>>525 に書いていただいた -(x & -x) = -x | x は間違いなさそうです。

こういう式の変形って、どこかテキストに載っていたりするのでしょうか。
0528デフォルトの名無しさん (ワッチョイ e573-FAUo)
垢版 |
2019/12/06(金) 20:51:24.53ID:DDupnuWl0
自分で頑張って探すんです

~x
x-1
-x
&
|
^

これらを組み合わせれば
一番右のビット関連がいろいろと出来ます

???10000
に対して
11110000
11100000
00010000
00011111
00001111
これらを得る最小回数の演算を考えてみてください
0529デフォルトの名無しさん (ワッチョイ a501-gDf/)
垢版 |
2019/12/06(金) 21:03:52.43ID:vzfmAUcv0
ド・モルガンと似た問題で、
「君たち2人は注意されないならば、君たち2人は私語を止めない」
の対偶、
「君たち2人が私語を止めるならば、君たち2人は注意される」
って矛盾にちょっと考えてしまったわ。
0532デフォルトの名無しさん (ワッチョイ e573-FAUo)
垢版 |
2019/12/06(金) 23:44:25.67ID:DDupnuWl0
>>523
メモリ確保やアクセスの時間に比べれば
サイズ計算の時間は無視出来る

ビット演算の趣味として楽しむ分には良いけど
普通にループでもパフォーマンスは変わらない

パフォーマンスが重要じゃないところ
(つまりほとんどの部分)は
移植性、見やすさ、工数、...
などが優先される

ということは知っておいた方が良いですね
0538デフォルトの名無しさん (エムゾネ FF43-MVf8)
垢版 |
2019/12/07(土) 19:02:43.91ID:Tn5G8ZSlF
解明って言うんか?これ
0539デフォルトの名無しさん (アークセー Sxdf-bz61)
垢版 |
2019/12/14(土) 01:27:42.96ID:TU6i1yGkx
C言語というか、WindowsのCですが、
たとえば strcpyの lstrcpyと _tcscpyの違いは何なのでしょうか
前者は WindowsAPI、後者は VC++CRTという説明を見たのですがよくわからないのです
両者とも UNICODE(後者は_UNICODE) の有無で charとwchar_tを切り替えるようですが、どちらをどんな時に使用するのかが分かりません。
0540デフォルトの名無しさん (ワッチョイ c612-wY8Q)
垢版 |
2019/12/14(土) 10:20:34.10ID:00Pm6Tju0
crtへの依存を減らせる分、常にlstrcpyを使えばいいと思うよ。lstrcpyは不正アクセスしたときに例外投げてくれるみたいだし。
自分なら依存減らす&安全性のためにstrncpyとwcsncpyを選ぶけど
0541デフォルトの名無しさん (アークセー Sxdf-bz61)
垢版 |
2019/12/14(土) 23:23:03.56ID:ECY2395Ex
>>540
ありがとうございます。
539です。

今後は気をつけようと思いますが、過去に書いたコードは何ともいたし難く…orz
なぜ先に lstrcpyを見つけなかった 2014年のオレ…

でも、内容が古いのかもしれませんが、ある記事によると CRTの依存を断ち切るのも容易ではないようで。。。
0542デフォルトの名無しさん (ワッチョイ 6261-drM2)
垢版 |
2019/12/15(日) 00:22:25.61ID:ay8KMh7A0
むしろlstrcpyなんて16bit時代から引きずってる過去の遺物なんじゃ?
今はlstrcpyも非推奨、代替のStringCchCopyはWindowsAPIの体だけどkernel32.dll等を呼び出すのではなくstrsafe.h内にコードが書いてある変わり種なのでtchar.h系の_tcscpy_sでよくね?っていう
0548デフォルトの名無しさん (ブーイモ MM13-R69Q)
垢版 |
2019/12/15(日) 23:21:27.87ID:z0zgGhJDM
そもそもCはUNIXの為に作られた言語だから
UNIX系以外のOSで使うと齟齬が出るよね
0549デフォルトの名無しさん (ワッチョイ e202-F3ta)
垢版 |
2019/12/16(月) 09:15:32.91ID:poPvuM4I0
何言ってんだこのバカ
0553デフォルトの名無しさん (ブーイモ MM13-RJaD)
垢版 |
2019/12/16(月) 10:34:38.41ID:WErHXUGxM
テキストファイルといえば
歴史上どっかの段階で文字列操作や汎用IO関数を捨て専用のもちっと使いやすい内蔵スクリプト言語に任せ
どうしても処理速度を求めるマは自作、非標準ライブラリで配列イジクール形にしたらよかったのにね

システムコールの頻度とか毎度読み解く指定子とかで標準ライブラリも爆速ってほどじゃないしー
printfのうじゃうじゃ増える非互換指定子とか似た使い分け迷う関数の増殖とかを防げたろうに
0556デフォルトの名無しさん (ワッチョイ 4b5f-EbeN)
垢版 |
2019/12/16(月) 13:05:02.49ID:ErLMiOjL0
file の lock とかか >>552
0559デフォルトの名無しさん (ブーイモ MM13-0eUy)
垢版 |
2019/12/16(月) 13:21:15.05ID:k2txnuEDM
Cは文字列をヌル終端するのが「ほぼ」前提になってるよね。
もしそれ以外の文字列表現を使うつもりだったら、
文字列専用の型を用意していたし、ポインタより配列を重視していたはず。
0560デフォルトの名無しさん (ワッチョイ 4b5f-EbeN)
垢版 |
2019/12/16(月) 13:22:41.90ID:ErLMiOjL0
>>557
おまいがOSに特化したとか言い出したんじゃないのか
0564デフォルトの名無しさん (ドコグロ MM7a-ECc1)
垢版 |
2019/12/16(月) 14:13:38.79ID:3ha1TSe5M
>>562
> 建前としては「ちゃんと定数使え」じゃない?
建前はともかく0777とか0755とかバンバン書かれてるし…

とまで書いてなんだけど、ちょっとググったらどうも8進数はC言語発祥じゃなくてB言語でも使えたみたいw
PDPシリーズは触ったことないからよくわからんけどHPのミニコンは命令コードが3bit単位に区切られて表記されてた
ブートローダーは手入力してて16個並んでるスイッチでアドレスや命令コードをセットするんだけど見ての通り3bit単位に区切ってある
もう記憶があやふやだけどアセンブラとかも8進表記ができたような気がする
http://www.hpmuseum.net/images/2108A-37.jpg
多分PDPも似たような感じだったんじゃないかと思う
なので8進数云々はあまり関係なかったわ、すまん
0576デフォルトの名無しさん (ワッチョイ 0e8c-r0mJ)
垢版 |
2019/12/17(火) 05:16:47.62ID:YPw71Sxa0
8進数いらない
0579デフォルトの名無しさん (アウウィフ FF3b-EbeN)
垢版 |
2019/12/17(火) 12:28:51.79ID:rApV4krMF
int main()
{
return 0;
}
8進数ですほんとうにありがとうございました
0582デフォルトの名無しさん (ワッチョイ 7735-c7hN)
垢版 |
2019/12/17(火) 23:43:40.20ID:FF2dVpsc0
Ubuntu
0597デフォルトの名無しさん (ワイーワ2 FFfa-EbeN)
垢版 |
2019/12/18(水) 11:30:30.49ID:RQBBPl9vF
>>593
floatやdoubleとcharのunionにするやつか
0606◆QZaw55cn4c (ワッチョイ 8247-uUlA)
垢版 |
2019/12/18(水) 23:59:36.80ID:tbeJyQYA0
>>605
それはコンパイラが判断することではなく、人間様が判断することなのでは?気分次第で inline にならない inline 指定なんて何の役にもたたないと思います
0607デフォルトの名無しさん (ブーイモ MMbf-knCy)
垢版 |
2019/12/19(木) 00:13:43.37ID:S/u3JoW1M
ループ展開して中のinline関数をぶちまけたら・・・
命令の並べ替えで案外コンパクトに成るかもしれんし
指数は言い過ぎだと思うがね
0610デフォルトの名無しさん (アウアウウー Sa5b-eVP7)
垢版 |
2019/12/19(木) 19:43:05.94ID:0uPukb6za
ついうっかり再帰する関数を inline にしてし(ry
0616デフォルトの名無しさん (アウアウウー Sa5b-eVP7)
垢版 |
2019/12/20(金) 21:46:42.87ID:BqL6wPJ0a
真の無限ループは作れない。
コンピュータは何れ壊れるし停電になったら終わりだからな。
0625デフォルトの名無しさん (ワッチョイ 9fad-v8Vi)
垢版 |
2019/12/22(日) 02:44:33.39ID:lBW/6Z3k0
>>617
そう。つまり、心の中にあるのさ。
0626デフォルトの名無しさん (ワッチョイ 9fad-prDO)
垢版 |
2019/12/22(日) 02:51:43.79ID:lBW/6Z3k0
goto は技を極めた者だけが使うことが許される。半端な者が手を出せばおかしなことにしかならない。
0632デフォルトの名無しさん (ワッチョイ d746-5DI4)
垢版 |
2019/12/22(日) 10:21:23.25ID:OI05XeSt0
>>631
goto文以外のジャンプ・ステートメントとハナから書きなされ。
というか、goto文を乱用せずcontinue、break等で代用しなさいという教条だべ。
ジーオーティーオーでないgotoを平気で使うのは教条に反しないので、「ながら」と矛盾を指摘する言い方はおかしい。
0643デフォルトの名無しさん (ワッチョイ bf8c-vyMa)
垢版 |
2019/12/22(日) 20:25:06.85ID:o2lyx4Qb0
局所でGOTOは有りだろう。
0644デフォルトの名無しさん (ワッチョイ bf8c-vyMa)
垢版 |
2019/12/22(日) 21:00:22.05ID:o2lyx4Qb0
全部論理式で書けば制御構造なぞ要らない。
0658◆QZaw55cn4c (ワッチョイ 9f47-lwDA)
垢版 |
2019/12/23(月) 07:50:11.10ID:GiJKkL8M0
C99 later の C++ 非互換部分は、どうでもいいとおもいますね
C++ にあわせて欲しかったのですが、独自色を強めてしまったのは疑問手です
0661デフォルトの名無しさん (ワッチョイ 977b-w6Xz)
垢版 |
2019/12/23(月) 08:29:28.17ID:hJXMwG4B0
>>647 の質問への直接の答えじゃないけど、
bool(実体は_Bool)型って汎整数拡張の対象だっけ?

拡張されるならprintfの中では引数がbool値だったか整数値だったか、
もう区別がつかないんじゃないか。
区別できなきゃ 0/1 で表示すべきか false/true で表示すべきかも
決められないと思うんだけど。
0663661 (ワッチョイ 977b-w6Xz)
垢版 |
2019/12/23(月) 08:40:36.25ID:hJXMwG4B0
可変個引数の整数値が char でも short でも int になるのは
「汎整数拡張」とは違う動作、別の用語だったかも知れん。
言語に詳しい人の指摘をお願いしたい。
0665デフォルトの名無しさん (ワッチョイ ff63-prDO)
垢版 |
2019/12/23(月) 13:42:09.95ID:hXczb3NL0
https://ja.wikipedia.org/wiki/C99

>GCC、Clang、Intel C++ Compiler 等はC99の新機能の大半をサポートしている。
>ただし、GCCは、ほとんど準拠しているが、規格への100%完全準拠は果たしてい
>ない。GCC 4.x までのデフォルトは C89 に GNU 拡張を加えた -std=gnu89、
>Clang のデフォルトは C99 に GNU 拡張を加えた -std=gnu99 である。GCC 5.0
>から C11 に GNU 拡張を加えた -std=gnu11 がデフォルトになる。

>Microsoft Visual C++ は 2013 から C99 の大半を実装した。ただし、tgmath.h
>や snprintf() などが未実装。

>Open Watcom C compiler は標準のうち最もよく使われている部分を実装している。
>かつては、ドキュメント化されていないコマンドラインスイッチを指定しないと
>有効化されなかった。2010年現在の最新版である 1.9 では -za99 オプションを
>付けることで有効化される旨、明記されている。

>Sun Studioは、サン・マイクロシステムズによればC99を完全にサポートしている。

主なコンパイラは大体対応している様だが、まだ完全ではないみたいだ。
GCCだと独自拡張もあるのでややこしそう。すでにC11に向かっているし。
0678デフォルトの名無しさん (ワッチョイ 9769-mhYo)
垢版 |
2019/12/23(月) 18:37:06.44ID:CGp0hW9r0
bool 型があったとしても、
printf の引数(... で受ける) に渡すタイミングで暗黙に数値化しちゃうんじゃないかな?

C++での引数型により別のものが呼ばれる機構は期待できない部分
0679◆QZaw55cn4c (ワッチョイ 9f47-lwDA)
垢版 |
2019/12/23(月) 19:24:17.92ID:GiJKkL8M0
>>674
それは名案ですね、正直言って C89=K&R2 で必要かつ十分ですし、C99 になって追加されたことといえば C++ と均整のとれない糞仕様が多くて役に立つものは一つか二つか…
0680◆QZaw55cn4c (ワッチョイ 9f47-lwDA)
垢版 |
2019/12/23(月) 19:49:25.53ID:GiJKkL8M0
>>663
たしかに規格ISO/IEC9899:1999 のどこにあるか?というと、ちょっとみつからないですね
default argument promotion とはいうみたいですが
これは char, short -> int
float -> double
だったかと
0681◆QZaw55cn4c (ワッチョイ 9f47-lwDA)
垢版 |
2019/12/23(月) 20:06:06.16ID:GiJKkL8M0
>>675
ジジイ、ジジイか…
それじゃお前はなんだ、この餓鬼が
おれはお前さんがこの世に落っこって来る前からバグつくってんだ
0698デフォルトの名無しさん (ワッチョイ b7b2-r9Jq)
垢版 |
2019/12/24(火) 13:37:43.29ID:Uve8u0PJ0
そもそもC89とC17の違いがそんなに問題になるか?
C89さえ分かっていればC17を差分で憶えるのは大した話じゃない
不勉強なやつが自己弁護のために騒いでるだけだろうが
0701デフォルトの名無しさん (ワッチョイ ff63-prDO)
垢版 |
2019/12/24(火) 16:17:11.27ID:4UlhXCkA0
勉強家はこのスレに入らないから,さっさと移動したらどうか?
粗大ゴミしかいないスレなんだから,こんな所に居続ける必要ないだろ
お前自身が粗大ゴミだと自覚しているなら仕方がないが
0708デフォルトの名無しさん (スップ Sd3f-x674)
垢版 |
2019/12/24(火) 17:52:25.07ID:vOfEkls8d
C言語は
非常にチープな環境でも動く
低レベルな記述が可能
非常に多くの環境で動作する
コンパイラの作成が容易

ということで未だに多くの場所で使われている
これらのメリットを減らす拡張は不要

これらのメリットが不要な環境ではC言語は不要
C++や、よりリッチな言語を使うべき
0710◆QZaw55cn4c (ワッチョイ 9f47-lwDA)
垢版 |
2019/12/24(火) 18:19:52.82ID:Kb/HLSFP0
>>693
>C++コンパイラでC非互換の機能を使わない縛りこそ何の役にも立ちゃしねえ
K&R2 の範囲で書くことができるというのは必須の技能だと思いますよ、それができない、そもそもなにが K&R2 の範囲でなにがそうではないかを知らないようでは馬鹿と謗られてもしかたがない
0712◆QZaw55cn4c (ワッチョイ 9f47-lwDA)
垢版 |
2019/12/24(火) 18:26:03.59ID:Kb/HLSFP0
>>698
>C89さえ分かっていればC17を差分で憶えるのは大した話じゃない

そのとおり

できる奴にとっては、C99 だろうが C11 だろうが C17 だろうが、どれも大差がなく自由に行き来できるしどうでもいい
しかし、ここで敢えて「C89=K&R2 こそ正義」と煽ってみると、案外「老害死ね」という反応が続出する
そういう点から推察するところでは、このスレに出入りする人間の 50% は K&R2 すらわかっていないレベルではないだろうか、と考えさせられるのですよ
0713◆QZaw55cn4c (ワッチョイ 9f47-lwDA)
垢版 |
2019/12/24(火) 18:29:06.28ID:Kb/HLSFP0
>>708
ライブラリとして、他の言語から直に呼んで貰うことを目指すため、C で書き直してしまうという話もよく聞きます、この手の用途を他の言語で聞いたことがない
0714◆QZaw55cn4c (ワッチョイ 9f47-lwDA)
垢版 |
2019/12/24(火) 18:34:23.41ID:Kb/HLSFP0
>>692
我々がしているのはヌルポインタの話だ
ただ 0 と書けば済む話のものに誰がタイプ数をつぎ込む?
まして #define NULL (void *)0 と構えて運用するようなものじゃない
マクロ NULL が存在すること自体なにかの間違いなのだ
0715デフォルトの名無しさん (ワッチョイ b7b2-r9Jq)
垢版 |
2019/12/24(火) 18:47:31.01ID:Uve8u0PJ0
>>710
K&R2の範囲で書くという具体的な案件を1つでも知っているか?
俺も含め、その案件に携わることになったとして困る者は極めて少数だと思うぜ
50%もいるようには全く思わない

K&R1の案件でさえ、今の若いのでもすぐ慣れるだろうさ
0718◆QZaw55cn4c (ワッチョイ 9f47-lwDA)
垢版 |
2019/12/24(火) 18:55:16.45ID:Kb/HLSFP0
>>717
可変長引数関数に (void *)0 を渡すときだけは (void *)0 は必要ですが、それ以外は 0 と書いてそれがポインタか整数かは文脈で判定できると思っています
0722デフォルトの名無しさん (ワッチョイ 9773-x674)
垢版 |
2019/12/25(水) 08:01:19.10ID:LrSoTBV60
あった
フラグを一個も立って無いことを示す0もdefine
デバイスの特性を多項式近似した関数も
各係数を全てdefine
縦と横のそれぞれの座標計算、ループで処理にした方が記述が簡単なので2でループしたら
その2もdefine

他にも意味不明のコーディング規約が多数
0726デフォルトの名無しさん (ワッチョイ 7f7c-prDO)
垢版 |
2019/12/25(水) 09:53:45.40ID:WMMCG2Dq0
値まで書いたアホっぽい定数 はわりと使うかな・・・

#define EGGCOUNT30 30
みたいに書いちゃうやつ

コード中に即値書きたいけど書くとリファクタリングで死ぬから
リファクタリングのためだけに定数書いてる感じ
0727デフォルトの名無しさん (アウウィフ FF5b-hPjh)
垢版 |
2019/12/25(水) 10:17:23.56ID:2ymVLaRcF
当たり前だがリファクタリング以前に定数調整だけで死ぬぞ
#define EGGCOUNT 30
なら
#define EGGCOUNT 40
で済むのに

#define EGGCOUNT30 30
だと
#define EGGCOUNT40 40
で全置換する気か
0733デフォルトの名無しさん (ワッチョイ 7f7c-prDO)
垢版 |
2019/12/25(水) 13:45:41.90ID:WMMCG2Dq0
>>727
そのとおり、全置換をする前提なんよ

置換するのはIDEのお仕事だから漏れは無いと信頼してるし、なにより
ソース改変による影響範囲の割り出しとテストしなおしの強制を兼ねてる
0737735 (ワッチョイ 9f2c-1ZZR)
垢版 |
2019/12/25(水) 15:17:44.07ID:ZI663GBY0
x != 0
は、yes/no の2値しかないでしょ?

実質的には、bool 値として使っている
0739デフォルトの名無しさん (ワッチョイ bf8c-vyMa)
垢版 |
2019/12/25(水) 16:13:24.55ID:xjd+p9Q20
直接コードを書くことを禁止する。スクリプトを使って書け。
0741735 (ワッチョイ 9f2c-1ZZR)
垢版 |
2019/12/25(水) 16:42:38.50ID:ZI663GBY0
文法は関係ない。
あくまでも、コードの品質・可読性を上げるための、MISRA-C のルール!

if, while などの条件式には、実質的なbool 値しか書けない

条件式に、単なる整数などを書けない。
整数の0 を偽とみなした、条件判断を書けない

MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw
0744デフォルトの名無しさん (アウウィフ FF5b-hPjh)
垢版 |
2019/12/25(水) 18:22:33.85ID:2ymVLaRcF
>>735
if(!!x)
0746◆QZaw55cn4c (ワッチョイ 9f47-lwDA)
垢版 |
2019/12/25(水) 19:56:23.47ID:Fvp/Fpps0
>>741
また MISRA ですか…
MISRA 適合かどうかを診断してくれるプログラムでも配布してくれているんだと思っていましたが、そうではなく、ただ人を縛る規則を決めるのが好きな人間の集団なんですね…
0747デフォルトの名無しさん (ワッチョイ b7b2-r9Jq)
垢版 |
2019/12/25(水) 21:01:12.18ID:HhfzRslS0
> MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw

MISRA-Cを守っていれば、高品質で、審査に通ると言いたいのか?
もう罵倒語が喉まで出かかっているんだが
0750デフォルトの名無しさん (ワッチョイ 9f01-fd2f)
垢版 |
2019/12/25(水) 22:31:21.33ID:W4j7C6dU0
>>747
>> MISRA-Cを守っていないと、低品質で、審査に通りませんよと言うことw
これを読んで
> MISRA-Cを守っていれば、高品質で、審査に通ると言いたいのか?
と解釈する奴はもれなくバカ
0752デフォルトの名無しさん (ワッチョイ 9f01-fd2f)
垢版 |
2019/12/25(水) 22:55:02.25ID:W4j7C6dU0
>>751
マジでバカなのか?w
AならBである
から
AでないならBでない
(当たり前だが真ではない)
って書けばお前のアホさが理解できるかな?
これでわからないなら中学の数学からやり直せ
0756デフォルトの名無しさん (ワッチョイ 5e1d-fJ/L)
垢版 |
2019/12/26(木) 01:10:46.52ID:SdIj1xpo0
main関数の{ }についてお聞きしたいんですが、
int main(void) {
____/* コード */
}
という表記ではいけないですか?
スッキリCや各種サイトを見ると、
int main(void)
{
____/* コード */
}
となっていることがほとんどなのですが
0759756 (ワッチョイ 5e1d-fJ/L)
垢版 |
2019/12/26(木) 01:20:09.70ID:SdIj1xpo0
ありがとうございます。
後者にしないといけないという決まりとかあるんですか?
0760デフォルトの名無しさん (ブーイモ MM98-La8A)
垢版 |
2019/12/26(木) 01:22:32.15ID:B3/URd3+M
文法じゃなくてコーディングスタイルのこと聞いてるんでしょ。
チーム内で決まったスタイルがあるならそれに従えばいいし、
そうでなければ自分の好みで決めればいい。
俺の好みは1行減るし統一感のある前者。
0768デフォルトの名無しさん (ワッチョイ 2f7b-keN1)
垢版 |
2019/12/26(木) 08:06:43.81ID:GqOej4nw0
>>756
int func(int arg)
{
...
}
という具合に「関数本体を開始する波括弧を次の行に書く」方式だと
ヘッダファイルにプロトタイプ宣言として書き写す際に
1行コピーして行末に ; 追加で完了、楽チンという利点があるわね。

main() の場合は当てはまらないのがやや弱いけど。
0776デフォルトの名無しさん (ワイーワ2 FF7a-v1fK)
垢版 |
2019/12/26(木) 11:17:42.33ID:qmNoWNu8F
>>731
一般的に特定の非正規形は特定の分析用途には使いやすくても
違う観点で分析しようとすると正規形からデータ変形するよりも多くの手間がかかる
参照オンリーの場合でもデータの利用方法が定型化していない場合は正規形から考えるメリットは大きい

特にRDBで分析用途のDBを用意する場合は参照オンリーでも正規形から考えとかないと手間が異常に増える
0777デフォルトの名無しさん (ワイーワ2 FF7a-v1fK)
垢版 |
2019/12/26(木) 11:21:50.00ID:qmNoWNu8F
>>752
高品質で、審査に通っていれば、MISRA-Cを守っている

やっぱり違うなω
元の命題からして可笑しいωωω
0778デフォルトの名無しさん (ワッチョイ 6c88-hRE6)
垢版 |
2019/12/26(木) 11:31:06.38ID:F8ujXl8x0
元の命題の真偽ではなく元の命題を真と仮定した場合、対偶は真か?という話
本来、対偶は真であるが747は対偶ではない命題を挙げてそれが真であるかのようにレスしているので突っ込まれた
対偶の挙げ方の間違いを指摘したのになぜか元の命題の真偽についてギャーギャー言うから話が噛み合わない
0782デフォルトの名無しさん (ワッチョイ 79da-DGYe)
垢版 |
2019/12/26(木) 12:48:48.88ID:nqqh6plV0
そもそも集合関係と因果関係を混同しているのが間違いの原因
「事象Aが真ならば事象Bは真」の対偶「事象Bが真でないならば事象Aは真ではない」は常に正しい
一方「原因Aが真ならば結果Bは真」に対して「結果Bが真でないならば原因Aは真ではない」は正しいとは限らない
0784デフォルトの名無しさん (ワッチョイ 9bb2-HfLM)
垢版 |
2019/12/26(木) 13:06:48.52ID:RfJEL4eB0
>>782
おまえ747の時点で俺がそう言っているのが読めてないもんな
そうやって教科書を朗読するのもいいことだから頑張んなw

お勉強はまず憶えることが初手だが
現実問題に応用できるようになって始めて完成するんだよ
0789デフォルトの名無しさん (ワッチョイ 2135-5PNG)
垢版 |
2019/12/26(木) 16:58:23.55ID:sEyHy/3c0
ダッサ。
0796◆QZaw55cn4c (ワッチョイ ea47-7AkR)
垢版 |
2019/12/26(木) 20:35:37.78ID:oR6l+tOb0
>>794
あなたのほうが滑っていますよ…
そもそも MISRA 推しな時点でこのスレの住人から疑問の声が挙がっているのに、まだそれに気づかないの?

末期ですね
0798デフォルトの名無しさん (ワッチョイ ae2c-fJ/L)
垢版 |
2019/12/26(木) 22:55:46.00ID:T0QuicHn0
トヨタの車が暴走した問題で、米国議会でも言ってただろ

トヨタは、MISRA-C で、10点ぐらいしか取れてないってw
100ルール中、90に違反してる

守ってない企業があるから、人命を預かる、ロケット・医療系組み込みなどでは、
特に厳しい資格が必要だと議論になってる

組み込みでは、バグで簡単に、人が死ぬから

だから、何十年も研究してる、Elixir みたいな関数型を使う
0799デフォルトの名無しさん (アウアウクー MMd2-Ap2Z)
垢版 |
2019/12/26(木) 23:26:05.24ID:46flAZOsM
プログラムを書くのに●●は駄目だとか使いにくくなるほど制限かけてもさぁ
書きたい事に必要な関数とか書き方とか知らないようなのに投げてるだけなので脆弱性になるようなバグは出てくるし意味がない
むしろ知ってるような人にとっては制限になって害でしかない
0800798 (ワッチョイ ae2c-fJ/L)
垢版 |
2019/12/26(木) 23:35:54.81ID:T0QuicHn0
JavaScript で言えば、TypeScript, ESLint とか

違反を警告してくれる、lint ツール
0805デフォルトの名無しさん (ワッチョイ 6e14-K0SF)
垢版 |
2019/12/27(金) 11:33:33.48ID:4UHOi1400
>>798
トヨタなんて下請け丸投げでソース読めなくてレビューもしてくれなくてテスト仕様書も丸投げで無駄なエビデンスばかり要求してる
10点ぐらいしか取れてないのは下請けなんだけどそれを指摘もできない
0808デフォルトの名無しさん (ワッチョイ 328c-M7II)
垢版 |
2019/12/27(金) 13:04:42.76ID:8p+LGuzl0
作業は指示するが仕事は教えないクソ野郎が増えたから
この先の見通しが暗い。
0819798 (ワッチョイ ae2c-fJ/L)
垢版 |
2019/12/27(金) 21:01:30.94ID:G2Hqp8Jj0
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006

この研究会は、トヨタなど大企業から、数十人のベテが集まって、
欧州人に聞きながら、作った本。
未だに、コーディングルールのバイブルだろ

元々は、Andrew Koenig の本

C Traps and Pitfalls, 1988, c1989
Cプログラミングの落とし穴

この本から、Lint が始まったのじゃないか?
0823◆QZaw55cn4c (ワッチョイ ea47-7AkR)
垢版 |
2019/12/27(金) 21:33:22.44ID:9iE1xeZJ0
>>819
>この本から、Lint が始まったのじゃないか?

違います
初期の lint はベル研の V7 と同時、1979 にはリリースされています
K&R1 は特に引数まわりはスキのある仕様でしたので細かくチェックをいれる lint は必要であったのも理解できます、これは K&R2 になってかなり改善されました
それに最近のコンパイラは lint に似た warning も出せるようになったし
0824798 (ワッチョイ ae2c-fJ/L)
垢版 |
2019/12/27(金) 22:09:21.87ID:G2Hqp8Jj0
はじめてのOSコードリーディング UNIX V6で学ぶカーネルのしくみ、青柳 隆宏、2013

そう言えば昔、こういう本も読んだ
0829デフォルトの名無しさん (ワッチョイ 9bb2-HfLM)
垢版 |
2019/12/28(土) 08:04:30.24ID:b9pc6wBR0
>>815
俺に言わせれば、おまえ文系くせえんだよ
俺はハード設計もやるから負論理だのド・モルガンだのは息をするくらい当たり前なことで
待遇だの裏だのという用語で得意がるやつは専門分野は何だろうと思ってしまうのさ

それから突っ込まれてるのはおまえだぞ、741本人よ
0835798 (ワッチョイ ae2c-fJ/L)
垢版 |
2019/12/28(土) 11:10:17.46ID:vnZXJluZ0
電子回路・HDL などの組み込みでは、
AND, OR, NOT, NAND,NOR などの回路、
負論理、ド・モルガン、カルノー図とか、初歩だぞw

まず、情報処理の組み込みの教科書を読め!
0836デフォルトの名無しさん (ワッチョイ 2135-YzVQ)
垢版 |
2019/12/28(土) 11:11:43.15ID:CljHkVQA0
>>831
負論理とかドモルガン知ってる人が対偶の意味知らないと思ってるの?
0837デフォルトの名無しさん (ワッチョイ 328c-M7II)
垢版 |
2019/12/28(土) 11:18:29.36ID:BVlwLEoZ0
双対は知らないだろう?
0838デフォルトの名無しさん (アウアウウー Sa83-JRPA)
垢版 |
2019/12/28(土) 11:34:08.50ID:KhDEPBLca
このスレっていつも下らない喧嘩を延々と続けてる奴らがいるけど、何なんだろう。どっちが正しいとか以前に言ってる中身(議論の仕方)が下らなくて他人からはどっちもバカにしか見えないから消えてくれないか。
0841デフォルトの名無しさん (ドコグロ MM2e-Nxir)
垢版 |
2019/12/28(土) 12:53:03.04ID:1RUtvmltM
>>836
さあどうだろうね、「ド・モルガンの定理知ってる」なら「待遇を理解してる」という命題が証明されたとか聞いたことないし
そもそもド・モルガン知ってるとか言うのも>>829が言ってるだけだし、>>747が対偶でない事を知ってるのかすら怪しいしなw
0842デフォルトの名無しさん (ワッチョイ 2135-YzVQ)
垢版 |
2019/12/28(土) 13:01:09.99ID:CljHkVQA0
読んでないから知らんけどこんな雑談に対偶ガーとか論理ガーとか証明ガーってのは馬鹿馬鹿しいね。
0844デフォルトの名無しさん (ラクッペ MM4b-HCDf)
垢版 |
2019/12/28(土) 13:09:43.37ID:1WIkADffM
正直、アスペ馬鹿が下らないことを追求したがってるだけにしか見えない
0846825 (ワッチョイ 5e1d-fJ/L)
垢版 |
2019/12/28(土) 13:19:13.30ID:Td7wq8Cw0
>>826
いえ、typedefの文はスッキリCを参考にしましたが、
あとのアルゴリズムはオリジナルです

こんなところで意見を求めるのは図々しいと分かってはいますが、
何とかお願いします
0848デフォルトの名無しさん (ワッチョイ f6d2-Bxcu)
垢版 |
2019/12/28(土) 15:05:05.31ID:VCBq52Cm0
C言語のBNFって何種類あるの?
知ってるだけ全部教えて
0869デフォルトの名無しさん (ワッチョイ e2ad-sLG6)
垢版 |
2019/12/31(火) 00:15:56.34ID:Qb6UeAHn0
>>825
これは危険なので普通はやらない。

scanf("%s", nextStr);
0873デフォルトの名無しさん (ワッチョイ 5dcd-kIX1)
垢版 |
2020/01/02(木) 09:27:06.04ID:9VSdJ8Nx0
ポインタを受け取る関数先頭では必ずnullチェックを行うコーティングルールが有るのですが
malloc失敗したポインタをそのまま渡した時ぐらいしか使い道が思い付きません…
0877デフォルトの名無しさん (ブーイモ MM62-kvXh)
垢版 |
2020/01/02(木) 10:24:26.88ID:Lvb+z/bpM
get_state()みたいな関数があって失敗時はnullを返す。それを知らずに別の関数に戻り値を直接渡してしまったとか、nullが誤って渡されるケースなんていくらでもあると思うが。

873が超天才でそんなミスは絶対ありえないとしても、他人のコードやドキュメントが間違ってる可能性もある
0878デフォルトの名無しさん (ワッチョイ c2a5-s4wZ)
垢版 |
2020/01/02(木) 10:39:04.82ID:Dgcghn810
Player*とEnemy*を取るRPGのバトル関数で
どちらかが死んでたらplayer->attack()関数は盛大に失敗する

この時の当該playerは消滅したわけでは無いが
enemyはメモリ上から消えている

ついでにこのattack関数が実は関数ポインタに付けられたプレイヤーのスキルだった場合、
attackがカラッポだと、徒手空拳になるか防御するか何もしないか、何故か敵味方全員が即死していきなりエンディングが始まるかのどれかになる
0879デフォルトの名無しさん (ワッチョイ e179-E95m)
垢版 |
2020/01/02(木) 11:31:53.70ID:FHRar1Ix0
安全性を取るならいついかなる時もNULLチェックは行うべき

だがそもそもパフォーマンス至上主義だから
Cという太古の言語を危険を冒してまで使っているということを考えると微妙

パフォーマンスが重要でないならCを使っていることからして論外
0880デフォルトの名無しさん (ブーイモ MMb6-vILD)
垢版 |
2020/01/02(木) 11:38:58.14ID:ZKet2vMyM
成否を含んだtupleを渡し実行時に判別、式全体を読み飛ばす粒度の小さい隠れた分岐構文みたいなの有ればいいのにねー
成否要素だけの反転は !!tulpevalue みたいな感じで

c言語の仕事じゃないだろうしそもそもtupleなんて持ってないし
うんこマが技巧駆使してわけわからんコード書くツールになるだけかもしれんし弊害いろいろ思いつくけど
0884デフォルトの名無しさん (アウウィフ FFa5-p4uH)
垢版 |
2020/01/02(木) 14:45:20.78ID:fRqsjLPxF
Release build だと assert 消えるって知らない人意外と多いんですね
0886デフォルトの名無しさん (アウウィフ FFa5-p4uH)
垢版 |
2020/01/02(木) 15:47:44.05ID:NYIo0K4bF
その意見を完全にスルーしてコメントしてる人がいるよね
0893◆QZaw55cn4c (ワッチョイ 2247-70g7)
垢版 |
2020/01/02(木) 19:35:59.09ID:VmmTWzwp0
C++11 の static_assert は便利なんですけれどもね…これ、C に入らないかな…
assert も static_assert と同じ用途・考え方で使うべきものかと思いますね
0901デフォルトの名無しさん (ブーイモ MM6d-vILD)
垢版 |
2020/01/02(木) 22:22:27.18ID:oLW+m36dM
深いところで拾ったエラーを浅層に戻して対応する必要がなく「ダメよ」と述べ落ち許されるプログラムならば
assert残すのも有りよね
実際#ifdef DEBUGで包んでるだけだし
imagemagickなんかも引数チェックを通った後の個々パラメータ内で不整合出たらassertでメッセージ流して落ちるし
0902◆QZaw55cn4c (ワッチョイ 2247-70g7)
垢版 |
2020/01/02(木) 22:27:00.54ID:VmmTWzwp0
>>900
assert が発動してアプリが止まるのは終わり方として最悪だとおもいますよ
もし assert が発動する可能性があるんだったら assert ではなくて、きちんとしたエラー処理を記述するべきなのでは?

assert って辞書をみると「断言」「主張」「出しゃばり」くらいの強い意味ですね
私は assert はコメントの一種一様態として使います=>>893
0904デフォルトの名無しさん (ワッチョイ 2252-rouQ)
垢版 |
2020/01/02(木) 22:30:49.81ID:+UNtt4nj0
>>901
assertに引っ掛かったときの挙動は置いとくとしても、assertの処理内容や頻度によっては実行時コストが問題になる可能性も無くはないから、単純にやってよしとはならないと思うぞ。
0905デフォルトの名無しさん (ブーイモ MM6d-vILD)
垢版 |
2020/01/02(木) 23:00:40.06ID:oLW+m36dM
効率厨はログ出力を見れるGNUemacsのeshell辺りででもwindowsプログラム立ち上げてみ?
プロプラ、オープンソースに関係なく大半のリリースビルドが膨大な出力を出しっパになってる現状に絶望するだろうから
0907デフォルトの名無しさん (ワッチョイ 2252-rouQ)
垢版 |
2020/01/03(金) 01:04:07.68ID:kXvb5Zcs0
>>905
処理内容や頻度によって実行時コストが問題になる可能性があると言っただけで効率厨扱いとはw
既存プログラムでログを大量に出しているからと反論しているが、だからそれがどうしたというのだ? ログを出しても性能的に問題ない範囲、頻度、量で出しているだけだろう。
0909デフォルトの名無しさん (ワッチョイ e173-ALt1)
垢版 |
2020/01/03(金) 08:42:01.33ID:3k7MKqlh0
組み込みだとタイミング込みで評価するから
ビルドを切り替えられないんだよね

assertはログだけ出すようにしてるが
ウォッチドッグを効かすってのもありかな

起こり得ないところで使うってのはその通り
0911◆QZaw55cn4c (ワッチョイ 2247-70g7)
垢版 |
2020/01/04(土) 21:11:48.66ID:rVQt0/h/0
uint64_t を配列の添え字に使えるかどうかって何か規格はありますか?
手元の環境は unsigned int のようなんですが、gcc/ming32-x64
0914デフォルトの名無しさん (ワッチョイ 42da-hqVv)
垢版 |
2020/01/04(土) 22:28:50.08ID:HbavYk5j0
>>911
ISO/IEC 9899:2011 (E)

6.5.2.1 Array subscripting
1 One of the expressions shall have type "pointer to complete object type", the other
expression shall have integer type, and the result has type "type".

7.19 Common definitions <stddef.h>
size_t
which is the unsigned integer type of the result of the sizeof operator;

どこにもunsigned intに限定するとは書いてねえぞ
unsigned integerと書いてあるのが
おまえはunsigned intに見えるのか?
0915◆QZaw55cn4c (ワッチョイ 2247-70g7)
垢版 |
2020/01/04(土) 23:21:44.72ID:rVQt0/h/0
>>912-914
コメントありがとうございます
uint64_t と int をいいかげんにチャンポンに使っていたための祟りに襲われてしまっているところでして…
a[i] = *(a + i)
を考えれば、i が int = int32_t, であろうと uint64_t であろうと、うまくやってくれると予想できますね
0918デフォルトの名無しさん (ワッチョイ 41e8-W/+2)
垢版 |
2020/01/05(日) 12:50:09.43ID:+e7zv/8B0
STLの配列の添え字は、std::size_tと同じ範囲が使えるように思う。
このstd::size_tには長さの制約は多分ない。
常識的に考えて、32ビットのプログラムで64ビットの配列を使うことはあまり現実的ではない。
なので、std::size_tの長さはNビットプログラムにフィットするようにコンパイル時にスイッチされる。はず。
0919デフォルトの名無しさん (ワッチョイ 42da-hqVv)
垢版 |
2020/01/05(日) 12:58:44.11ID:JLxpDEWT0
思うんじゃなく確認しろ、多分とか寝言ぬかしてねえで

N4713

26.2.1 General container requirements
Table 83 ? Container requirements
X::size_type
size_type can represent any non-negative value of difference_type

26.3.8.1 Class template deque overview
// element access
reference operator[](size_type n);
const_reference operator[](size_type n) const;
0920デフォルトの名無しさん (ラクッペ MM61-Gr30)
垢版 |
2020/01/05(日) 13:25:51.85ID:qO+R3XJXM
教官湧いててワロタ
0921デフォルトの名無しさん (ワッチョイ 9901-8/Ff)
垢版 |
2020/01/05(日) 13:55:25.64ID:+b/hvkzN0
教官使い倒そうぜ。
タダだし。
0922デフォルトの名無しさん (ワッチョイ 417b-wLQD)
垢版 |
2020/01/05(日) 15:43:26.81ID:Apdi0tl00
具体的な規格の文面を引用して示してくれるのは有難いことでしょ。
手元にPDFとかで持ってても場所を見つけるのが苦労で諦めることが多いし。

size_type can represent any non-negative value of difference_type
の部分を見ると size_t の大きさは difference_type の大きさに依存する、
少なくとも difference_type の正の範囲より広い、で合ってるかな。
ならば difference_type の範囲はどうなってるの? って具合に
疑問の先が移動するね。答えに近づいたけれど到達はしてない感じ。
0923デフォルトの名無しさん (アウアウエー Sa4a-p4uH)
垢版 |
2020/01/05(日) 20:35:48.07ID:eK7nc1Ssa
添え字は size_t が良き
0930デフォルトの名無しさん (ワッチョイ 9901-skQ4)
垢版 |
2020/01/06(月) 13:04:19.40ID:UJayP8xu0
いつになるか激的アーキテクチャの進化でも迎えない限り
64bitでmsbまで使い切る正数アドレスなんて無いから
相対はヌルチェック+自動整数変換に頼っときゃいいんじゃね
fseek/off_tはなんかもやもや放置気味?誰が完全な解決をもたらすのか
0931デフォルトの名無しさん (ワイーワ2 FF8a-p4uH)
垢版 |
2020/01/06(月) 19:21:49.21ID:OSGVopulF
変なセグメント跨がないだけまだマシ
0933デフォルトの名無しさん (ワッチョイ 42ad-cEPd)
垢版 |
2020/01/07(火) 00:34:22.49ID:MpiZXKP+0
>>925
しかし俺の心の中にあるのだ。
0938デフォルトの名無しさん (ワッチョイ 5f2c-fsjN)
垢版 |
2020/01/10(金) 20:53:06.96ID:z03T2m7q0
2019年に成長したプログラミング言語ランキング、第1位は? 2020/01/10 09:18 後藤大地
https://news.mynavi.jp/article/20200110-952052/

TIOBE Softwareがこのほど、2019年に最もインデックス値を伸ばしたC言語が2019年のプログラミング
言語・オブ・ザ・イヤーに輝いたと伝えた。第2位はC#で、これにPythonとSwiftが続いている。

C言語のインデックス値が伸びた理由として、IoTおよび小型のインテリジェントデバイスにおいて需要が
高いためだという。C言語は短時間で習得が可能な上、すべてのプロセッサにおいてCコンパイラを利用
できる。TIOBE Softwareは、こうした状況がC言語のインデックス値上昇を招いたのではないかと分析
している。

発表された2019年におけるインデックス増加率と順位は次のとおり。[順位]プログラミング言語(増加率)
[1]C(+2.4%)、[2]C#(+2.1%)、[3]Python(+1.4%)、[4]Swift(+0.6%)、

2019年のプログラミング言語・オブ・ザ・イヤーは、2018年に引き続きPythonが受賞するだろうと考え
られていた。これは、Pythonが2018年に入ってから長期にわたって増加傾向を維持しているためだ。
しかし、2019年はC言語の増加率がPythonを超えて1位となった。C言語は2016年に一気にインデッ
クス値を下落させており、2017年後半から逆に増加に転じている。ずでに減少以前の水準まで戻って
きており、今後も同様のペースで増加を続けるかどうかはわからない。

仮に、今後も同様のペースでC言語の増加傾向が続いた場合、JavaとC言語のポジションが逆転して
C言語が首位になる月が出てくる可能性もある。しかし、過去の動向として、JavaとC言語は推移が同調
する傾向が強く、Javaが第1位でCが第2位という順位のまま推移する可能性もある。(中略)

TIOBE Programming Community Index (PCI)は、複数の検索エンジンの検索結果から、対象となる
プログラミング言語がどれだけ話題になっているかをインデックス化したもの。2020年1月におけるイン
デックスは次のとおり。

1月TIOBE Programming Community Index / 円グラフ
https://news.mynavi.jp/article/20200110-952052/images/002.jpg
0946デフォルトの名無しさん (ワッチョイ ff8c-GYCx)
垢版 |
2020/01/11(土) 10:17:43.71ID:MvVD+3kL0
APIでいろいろある。
0948デフォルトの名無しさん (ワッチョイ 7fad-W3qw)
垢版 |
2020/01/11(土) 16:02:03.38ID:j7/IvFvR0
Kotlin もよろしく
0949デフォルトの名無しさん (ワッチョイ df35-e1y7)
垢版 |
2020/01/11(土) 16:06:43.26ID:tdQ2h9sk0
覚えることが少ないというか物理的で直感的だからわかりやすい
クラスとか言われても初心者には「?」だし
0950デフォルトの名無しさん (ワッチョイ 7f47-soYg)
垢版 |
2020/01/11(土) 16:32:40.71ID:Mi8oZktw0
C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために
さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが
簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを
追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。

C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら
Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、
それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる:

- うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が
安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、
もはや笑えるレベルを超えている)

- 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに
効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の
コードがその素晴らしいオブジェクトモデルに依存していて、直すためには
アプリ全体を書き直さなきゃなんない。

言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある
C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
0951デフォルトの名無しさん (ワイーワ2 FF7f-Eg5K)
垢版 |
2020/01/11(土) 17:09:55.20ID:l/QLWHKHF
const 禁止のことを言ってるなら同意
0954デフォルトの名無しさん (ワッチョイ ff8c-GYCx)
垢版 |
2020/01/11(土) 22:53:33.52ID:AUXeR2Nj0
初心者がC++を使うのはクラスが便利とかではなくて便利そうなライブラリを引っ張てこれるからだろう。
0957デフォルトの名無しさん (ワッチョイ df01-ErPi)
垢版 |
2020/01/11(土) 23:31:10.93ID:r5wulSj/0
単純に便利だからじゃないの。
0962デフォルトの名無しさん (ワッチョイ ff8c-GYCx)
垢版 |
2020/01/12(日) 07:25:04.57ID:t6zFaymS0
>>947
でも日本は失敗したんだよね。
0963デフォルトの名無しさん (ワッチョイ 5f02-tgR8)
垢版 |
2020/01/13(月) 14:02:27.58ID:JUx858UH0
質問です。32bitで確保できるメモリの上限近く(windowsなので1.5GBとか)を
色々なデータで確保した後、いっきに半分以上解放し、またいっきに色々なデータで
上限近く確保しようとするとmalloc()が失敗します(NULLを返す)。
プロセスのメモリを見ても500MBくらいまで落ちてから再確保しているようですがダメです。
これは内部で何が起こっているのでしょうか?断片化とかでしょうか??
0964963 (ワッチョイ 5f02-tgR8)
垢版 |
2020/01/13(月) 14:50:30.36ID:JUx858UH0
追加ですが殆どのデータを解放して使用量50MBくらいにしてから
しばらく待ってから再確保すると上手く行くようです。ただ500〜1000MBくらい残してから
また上限近くまで確保しようとすると失敗します。何故でしょうか?
0966デフォルトの名無しさん (ワッチョイ df01-ErPi)
垢版 |
2020/01/13(月) 15:42:12.61ID:WUoSHY6Y0
アリ人間は何故なまえを変えたのか。
0969デフォルトの名無しさん (アウウィフ FFa3-tgR8)
垢版 |
2020/01/13(月) 16:31:54.68ID:axFuJyFlF
断片化だろ
しばらく待つことに何の意味も無い
0970963 (ワッチョイ 5f02-tgR8)
垢版 |
2020/01/13(月) 16:37:34.93ID:JUx858UH0
>>967-969
やっぱり断片化ですか… 一旦使用量50MBまで減らしたら
断片化がかなり無くなったので確保が上手く行ったという事になりますかね。
更にうまくメモリ管理するか64bit化も考えようと思います。ありがとうございました。
0971デフォルトの名無しさん (アウウィフ FFa3-tgR8)
垢版 |
2020/01/13(月) 17:38:12.46ID:axFuJyFlF
細切れにならないように自分ででかく確保して
その中をさらに自分で管理すると良い
0976デフォルトの名無しさん (ワッチョイ 7f36-///2)
垢版 |
2020/01/14(火) 16:16:37.73ID:MAaOflfD0
メモリをポインタではなくハンドルで管理すれば
メモリコンパクションができる

ただし、そんなことをしなくても実容量を超えるメモリが提供できるようにするために仮想記憶があるんだが
0979デフォルトの名無しさん (ワッチョイ df35-e1y7)
垢版 |
2020/01/14(火) 17:28:42.27ID:Cb2SImdL0
あるけど
0982デフォルトの名無しさん (ワッチョイ df73-AxFo)
垢版 |
2020/01/14(火) 18:01:20.77ID:vjAz2zAO0
32bit Windows の普通のプロセスのアドレス空間は2GB

OSやAPIを改造してFARポインタを扱えるようにするか
ロックアンロック方式のメモリ管理を自力で実装するか

そんなことをするよりは
素直にアプリのメモリ確保の方法を変えるのが早い
もちろん64bit化出来るならそれが一番
0985デフォルトの名無しさん (ワッチョイ 5f02-tgR8)
垢版 |
2020/01/14(火) 18:15:32.64ID:Ae/uveiQ0
>>980-981
そうやっても必要な時にメインメモリに読み込んで使う必要がないですかね?
しかも上手くやりくりして読み込んでもそこで断片化の問題もありますし。
その場合プールを自分で管理するしかなさそうな気がします。途中でその話をしてましたが。
0986デフォルトの名無しさん (ワッチョイ df2d-G18V)
垢版 |
2020/01/14(火) 18:31:15.17ID:jSZPoIDP0
32bitOSで4GB以上のオブジェクトをメモリに読み込んでどうにかしろ、と言われたら。
最初に検討するのはファイルマッピングだろうなあ。それ以外だとやる気がおきない。
APIを叩く必要があるので、WindowsならCreateFileMappingとかMapViewOfFileとか。
0988デフォルトの名無しさん (ワッチョイ 7f01-qx2z)
垢版 |
2020/01/14(火) 18:32:29.78ID:RxBpnTJ90
>>984
> そちらを調べてみようと思います。
いやいや、オーバーレイとかバンク切替とかは半分ネタだから今更そんなもん調べなくていいよw

>>985
> しかも上手くやりくりして読み込んでもそこで断片化の問題もありますし。
アホほどでかいサイズでなきゃそれほど問題にならないよ

> その場合プールを自分で管理するしかなさそうな気がします。途中でその話をしてましたが。
どうしてもでかい領域を確保/解放する必要あるならそれしかないように思う
0990デフォルトの名無しさん (ワッチョイ 5f02-tgR8)
垢版 |
2020/01/14(火) 18:41:07.63ID:Ae/uveiQ0
>>988
>いやいや、オーバーレイとかバンク切替とかは半分ネタだから〜
ネタでしたかw 了解しました。

>アホほどでかいサイズでなきゃそれほど問題にならないよ
細かいのと途中で500MBくらいを二つとかがあるので時々断片化のせいでmallocが失敗するんですよねえ…

>どうしてもでかい領域を確保/解放する必要あるならそれしかないように思う
とりあえず作業領域様に500MBの領域を確保して再利用すると他の部分でmalloc失敗はなかったですね。
仰るように小さい領域はかなり確保しても問題にならないですね。大きな領域用にメモリスペースを予め確保しておく方法がよいかもしれないと思いました。
0992デフォルトの名無しさん (ワッチョイ 5f63-hsX7)
垢版 |
2020/01/14(火) 18:48:32.63ID:iQtyfXTR0
もう64bitが当たり前になってかなり経つ昨今、そんな案件ごろごろある
映像をリアルタイムでごにょごにょとか言われたら簡単にギガ単位のメモリ使う
稀有な例では無いけど32bit環境でやれって言われたらヤダナとは思う
0993デフォルトの名無しさん (ワッチョイ 5f02-tgR8)
垢版 |
2020/01/14(火) 18:55:05.49ID:Ae/uveiQ0
>>991
そうなんですね。了解しました。

>>989 >>992
詳細はあまり言えないのですがメモリ中に
動画データを一部展開しなければいけなくて
メモリ不足や断片化の問題で困ってました。
しかも周辺で使ってるライブラリが32bitで64bit化が難しくて。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 149日 20時間 47分 30秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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