C言語なら俺に聞け 141 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/07/17(月) 21:06:47.63ID:J4JGo3XO
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/


http://mevius.2ch.net/test/read.cgi/tech/1494508803/
http://www.geocities.jp/c_cpp_cs/about_c/
2017/07/29(土) 18:01:14.53ID:14mINgXT
強要隊に親を殺された?
2017/07/29(土) 18:01:47.45ID:gxbujSGs
>>471
つかお前C#知らんだろ。
それはレガシー用であって、レガシー以外でそれ使ったら殺されるぞ。
2017/07/29(土) 18:04:09.87ID:14mINgXT
実際に共用体はいろいろで使われているわけで
2017/07/29(土) 18:08:03.01ID:FQLMCr49
争いは同じレベルの者同士でしかうんたらかんたら
476デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:10:06.13ID:vlC06Wfm
union 使っても
いいじゃないか
C言語だもの
2017/07/29(土) 18:10:09.26ID:zJVnUUbX
>>473
お前の糞職場は知らんけどMSはレガシー用なんて言ってないぞ
恥の上塗りかっこ悪 w
https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.fieldoffsetattribute(v=vs.110).aspx
2017/07/29(土) 18:17:23.76ID:gxbujSGs
>>474
だから、レガシー以外は使われてないんだよ。
とはいえ、OSのAPIが共用体を返してくるんだから、
それを受け取れないのはまずいから手段も用意してはある、という話で。

>>364はC++/Java/C#なら継承で実装される。
その他の言語でも大体こうなる。理由は共用体がそもそも無いから。
俺は逆に、何故お前らがunionを使いたがるのかが分からんね。メリットは何もないだろ。

>>477
レガシー=obsoleteという意味ではないぞ。
2017/07/29(土) 18:26:02.72ID:eThbJX9n
C言語での組込み開発では共用体は普通に使われてる
>>468で示唆したような特殊機能レジスタの多重定義などが代表例
480デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:26:39.61ID:vlC06Wfm
レガC
2017/07/29(土) 18:27:18.82ID:14mINgXT
使いどころでは使えって話
gotoといっしょ
>>364が使いどころかどうかは別として
482デフォルトの名無しさん
垢版 |
2017/07/29(土) 18:27:46.17ID:vlC06Wfm
>>479
てか、あると便利だよね。
よくわからないまま使うとハマるだけのことで。
2017/07/29(土) 18:28:35.21ID:14mINgXT
>>479
charにunsignedが無いのが気になってるわけだが
2017/07/29(土) 18:29:51.58ID:zJVnUUbX
>>478
> レガシー=obsoleteという意味ではないぞ。
バカってなんで言ってもないことに突っ込むんだろう?
みずから恥の上塗りすることもないだろうに w
2017/07/29(土) 18:30:55.63ID:gxbujSGs
>>479
それは知っているしそれはいいんだよ。
それ以外のケース、>>364みたいな使い方をお前らはやるのか?
2017/07/29(土) 18:32:39.97ID:eThbJX9n
>>483
ビットフィールド構造体の定義にはunsignedどうでもいいだろ
共用しているchar型変数の方にはunsigned付けたけど
2017/07/29(土) 18:33:12.58ID:vlC06Wfm
>>481
そうそう。わかってて使うなら gogo もありだ。

ていうかC言語だと使わないと変な書き方になってかえって読み辛くなることあるな。
try catch みたいな例外処理が書けないから。複数個所でエラーが出る可能性が
ある場合に処理を飛び越えて先に進ませる方法が for(;;) ブロックの中で break
使うぐらいしかなかったりして、ループでないのに for (;;) 使うぐらいなら goto 使った
方がまだ分かり易い。
2017/07/29(土) 18:34:01.67ID:14mINgXT
char, unsigned char, signed char
この辺は規格がいまいち

文字をunsignedにしなかったのもいまいち

あとは演算子の優先順位にも不満がある
ビット演算が弱すぎる

代入が = / 比較が ==
なのもいまいち

いろんな歴史的な理由があるんだろうけど
2017/07/29(土) 18:34:26.21ID:zJVnUUbX
>>481
> 使いどころでは使えって話
まあそういうことだね
環境も目的も制約も様々だから絶対unionでないとダメとかunionはレガシーしか使っちゃダメとか言う奴はたいていちょっとアレな人なんだと思う
まあ引っ込みつかなくなっちゃったんだろうね
2017/07/29(土) 18:35:03.24ID:14mINgXT
>>486
えっ?
本気で言ってるの?
2017/07/29(土) 18:36:30.47ID:14mINgXT
gogo

MP3関連のツールか?
2017/07/29(土) 18:54:34.75ID:F0OdFQYT
>>485
>>364 までして型をとる,というのも疑問だな‥
2017/07/29(土) 19:02:45.32ID:A0tSwWs4
バークレーソケットのソケットアドレス等で使わされてる感じだけど
自分から積極的に union を記述することは少ないな
2017/07/29(土) 19:18:41.24ID:gxbujSGs
というかマジで急にエアプ増えてね?

FieldOffsetを数字でベタ書きとか、かなり最悪のコードだぞ。(>>471内URL)
保守する場合は全部書き直しになる。(今更そこが変更されることもないはずだが)
真面目にこれを言っているID:zJVnUUbXはエアプだろ。
引っ込みつかないのはお前だ>>489

>>492
型を取るなら普通はC++的テンプレート解決だよな。
型なしがよければvoid*でいいし。
2017/07/29(土) 19:43:57.40ID:zJVnUUbX
反論できなくなってエアプとか w
分かりやすすぎるだろ
496デフォルトの名無しさん
垢版 |
2017/07/29(土) 20:48:24.50ID:vlC06Wfm
エアプってなに?
2017/07/29(土) 21:21:36.23ID:VkCqDRe3
エアプレーン
2017/07/29(土) 21:34:56.85ID:vlC06Wfm
エアーおならプ
499デフォルトの名無しさん
垢版 |
2017/07/29(土) 21:53:33.37ID:qAu/jA2x
>>468
ANSI C 規格への Microsoft 拡張機能を使用すると、ビット フィールドに対して char および long 型 (Signed と unsigned の両方) が許されます。
2017/07/29(土) 23:41:43.43ID:KxGqyxM3
知らない書き方だと思ったら、MSのCコンパイラの独自仕様なのか
どうやらそのビットフィールドをchar境界に制約するものみたいだけど、
こういう書き方だとビットフィールドの幅に見えて気持ち悪い
2017/07/29(土) 23:46:26.91ID:14mINgXT
マイクロソフト以外でも結構良くある
型指定可能なコンパイラ

enumの型指定とかも
2017/07/29(土) 23:49:52.99ID:14mINgXT
signedとunsignedはビットフィールドでも意味がある

1bitでsignedだと、符号ビットしか存在しない
値でいうと 0と-1
2017/07/29(土) 23:50:32.30ID:14mINgXT
>>486の「どうでもいい」の意味が不明
2017/07/30(日) 00:02:03.96ID:1+DcPeTw
1bitで表現できるのは0か1しかないのでは?
意味的には-1だろうが値としては1以外に表現する方法がない
2017/07/30(日) 00:25:20.56ID:FGe2lUf3
sizeof(int)==4とすると
468のsizeof(SFR)==1だが
468のcharをintに変えると sizef(SFR)==4 になる
(略)
アクセス違反でbitfieldが使えん可能性あり
2017/07/30(日) 02:07:11.27ID:LfAaUMEW
>>504
問題になるのは保存時じゃなくて読み出し時
507デフォルトの名無しさん
垢版 |
2017/07/30(日) 02:36:29.18ID:FQwxQ4LP
初学者なんだが教えて欲しい

状況:作ったプログラムが思うように動かないから途中の値をprintfで出力して検証中

コードの内容を大雑把に書くと

A[1] = 12
・・・
for( j = x - 1; j >= 0 ,--j ) (jは最初1)
・・・
if ( j != 0 )
printf( "a1=%d, j=%d\n", A[j], j )
if
 ・・・
 else
 if
printf( "a2=%d, j=%d\n", A[j], j )
   ・・・
みたいな処理をさせると出力結果が

a1=12, j=1
a2=0, j=1

階層が深くなると値が変わるんだが、何が原因かわかる人いる?
2017/07/30(日) 02:41:51.54ID:pLyoXQEm
原因はバグ。これ以上は再現するソースコードがないと分からない
2017/07/30(日) 02:45:37.97ID:LfAaUMEW
変な状態が発生する状態を保ったまま
処理を削っていく
削っていって発生しなくなったら
その削ったところに何かヒントがあるかも

1レスに収まる範囲になったらここにすべてアップ
2017/07/30(日) 03:02:39.88ID:FQwxQ4LP
そんなに簡単にバグるものかと思って聞いてみたけど、汚ねえプログラムを添削してもらうのも申し訳ないからそういうものだと納得するよ、thx
2017/07/30(日) 03:29:48.70ID:KxWScrhl
>そんなに簡単にバグるものかと思って聞いてみたけど
次はコンパイラのバグとか言い出して大騒ぎして
そのうち人間のいい加減さに絶望する

普段から人間がどれだけ間違えてるか思い知るがいい
2017/07/30(日) 04:54:25.66ID:0PJrZm1n
>>507
初心者がやりそうな間違い。

1. 配列の A の要素数が足りない。
2. A を int *A; 等と宣言しておきながらメモリ確保していない。
3. メモリ確保しているがバイト数が足りない。
4. if 文を多重に使っているが階層を誤解している。
5. 自分で変数や配列の内容を書き換えている事に気付いていない。

4は例えば if (...) ...; if (...) ...; else ...; のようになっている場合に if (...) { ...; if (...) ...; else ...; } となると勘違いしている場合。
実際は if (...) { ...; } if (...) { ...; } else { ...; } になって最初の if と次の if は別物。
インデントがおかしいと騙される。しかしCコンパイラはインデントなど見ていない。
2017/07/30(日) 04:59:02.25ID:9ZftmVJd
--j  最近は前置が流行ってるのか?
2017/07/30(日) 05:07:33.79ID:7dS2HrxN
じゃあ俺のあてずっぽうの勘だと主たる原因はフォントサイズが小さすぎること
メインの原因はA[i]が紛れ込んでいること
2017/07/30(日) 05:21:48.22ID:0PJrZm1n
>>513
http://bokko.hatenablog.com/entry/20080606/1212695409
2017/07/30(日) 05:50:22.55ID:3UqYvyNk
>>507
for( j = x - 1; j >= 0 ,--j ) (jは最初1)
--j の前が ; であるべきなのに , てことはないよな。
投稿時のtypoだろうな。

if ( j != 0 )
printf( "a1=%d, j=%d\n", A[j], j )
if
の感じから見て、元のifのthen節を{}で囲ってなかったところに
printf() を挿入したから実行条件が変わっちゃった、かな。
「ぶらさがりif文にまつわる問題」てやつ。
(>>512 の指摘 4.)
517デフォルトの名無しさん
垢版 |
2017/07/30(日) 06:32:09.81ID:bW/sP0k9
>>515
C++訛りとは限らんぞ
機械語のオートインクリメントは++が後置で--が前置になっていて
それが透けて見えるように書いていると--は前置だし
2017/07/30(日) 06:41:47.40ID:9ZftmVJd
オーバロードした++やイテレータは前置と後置で速度が違うのか。後置使うやつがいなくなるじゃないか。

C++は欠陥品だな。++Cって名前にしろよ。
2017/07/30(日) 07:03:49.82ID:1+DcPeTw
>>517
機械語の仕様や挙動はCPUの種類による
昔の話だけど8ビットCPUの頃は、インテル(ザイログ)とモトローラでは逆になっていた記憶がある
520デフォルトの名無しさん
垢版 |
2017/07/30(日) 07:39:01.94ID:bW/sP0k9
>>519
LDIとLDDは逆じゃなく両方後置だ
そんな重箱の隅じゃなく本当に逆な例を挙げられるか?
2017/07/30(日) 07:40:09.47ID:9ZftmVJd
オートインクリメントってなんだ?
z80や6809にそんなのあったか?
2017/07/30(日) 07:42:23.87ID:9ZftmVJd
なんだ、ブロック転送のことか。
2017/07/30(日) 08:18:53.67ID:1+DcPeTw
Z80と6809でスタックポインタを弄るときのPUSH/POPでポインタの増減が前置後置逆になってたはず
2017/07/30(日) 08:36:50.77ID:1+DcPeTw
少し調べてみたらやはり逆っぽい
C言語風に表現すれば
6809のPUSHは前置 *--SP、POPは後置 *SP++
Z80のPUSHは後置 *SP--、POPは前置 *++SP
525デフォルトの名無しさん
垢版 |
2017/07/30(日) 09:05:35.12ID:bW/sP0k9
スタックポインタを意識してCのコードに--rとか書かねえよ
526デフォルトの名無しさん
垢版 |
2017/07/30(日) 13:04:06.19ID:0PJrZm1n
ま、そういうのは最近のコンパイラなら最適化で跡形もなく消えちゃう事もあるので普通は考えても意味ないと思う。
527デフォルトの名無しさん
垢版 |
2017/07/30(日) 13:29:40.49ID:bW/sP0k9
そういう問題じゃねえんだよ
話についてこれないならROMってろ
2017/07/30(日) 14:11:56.37ID:W8z6HKGT
C言語始めるためにいろんなサイトを転々としてVScodeとかVS2017とかをインストールしてみたんだけど訳がわからん
サイトに沿って設定とかしたけどどうすればいいかわからなくてどうしょうもない
Javaも少しやっててメモ帳に書いてたんだがあれくらい簡単じゃないのか
つまりどうしたいかというと
助けてくださいお願いします
2017/07/30(日) 14:31:49.48ID:0PJrZm1n
>>528
Linux インストールしちゃえよ
530デフォルトの名無しさん
垢版 |
2017/07/30(日) 14:47:05.86ID:bW/sP0k9
>>528
Javaはどんな環境でやってるんだ?
それに近いC環境がとっつきやすいと思うぞ
2017/07/30(日) 14:48:46.05ID:1+DcPeTw
>>528
とりあえずプロジェクトを新規作成して、テンプレートからWin32コンソールアプリケーションを選択、オプションで空のプロジェクトをチェックする
その後、ソースファイルに新しい項目を追加してC++ファイルを選択
この時デフォルトではC++(*.cpp)が選択されるので、気になるなら拡張子を*.cに変更すればC言語のソースが記述できる
2017/07/30(日) 15:22:25.39ID:W8z6HKGT
>>530
【Java】ゲームプログラミング超入門: http://www.youtube.com/playlist?list=PLJ86MSrhnFKVQPf-E8y0FZKv7uzR4L4Dt
この動画の人にずっとついていってやってた
Part32くらいで少し飽きて一二週間離してて久しぶりにやったら結果が違っててよくわからなくなって別のやつやろうとしてた
2017/07/30(日) 16:31:40.47ID:FGe2lUf3
A[j]のjの型は size_t か?
2017/07/30(日) 17:51:36.41ID:AatiOL5G
有名な土方プログラマーの、T Umezawa の動画だろw

Java, C# を、テキストエディタで書いて、端末でコンパイルする
2017/07/30(日) 18:00:05.83ID:2PlgEyLl
>>533
配列のサイズの範囲内ならなんでもいい
536デフォルトの名無しさん
垢版 |
2017/07/30(日) 20:43:35.11ID:OOsADo1S
>>528
gcc入れろ。
2017/07/30(日) 22:04:46.57ID:7dPqlOSS
tcc オススメ
2017/07/30(日) 22:18:32.51ID:pLyoXQEm
>>528
自分の場合はcygwinでgcc使ってる。インストール楽だし
2017/07/30(日) 23:12:47.40ID:W8z6HKGT
>>536
>>538
やっぱGCCがいいのかな
でもなんかVS2017使いたいんだよね
一回入れてみたことあるけどなんかよくわからんというか
その点VS2017は安心するというか
使ったことないけど
2017/07/31(月) 00:11:52.08ID:M3mLjUUM
clコマンド使えばいいんじゃねえのか

IDEの機能なんて初心者は1%も使えない
普通のエディタでも初心者だと5〜10%くらいの機能しか使えない
541デフォルトの名無しさん
垢版 |
2017/07/31(月) 05:37:23.56ID:VZjnFU9V
>>539
普通のコマンドプロンプト出して、↓のバッチファイルを実行するとclが使えるようになる。
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"

cl your_program.cpp /EHsc
2017/07/31(月) 08:29:21.54ID:XaGlTjBV
プロジェクト作成
http://i.imgur.com/7qtR3n9.png
http://i.imgur.com/ZgnClpW.png
http://i.imgur.com/bNyynXB.png
http://i.imgur.com/8aLQd1Y.png
http://i.imgur.com/KTIzIfq.png
http://i.imgur.com/yKIKgn8.png
http://i.imgur.com/Zi9GQTT.png
http://i.imgur.com/owrBvd7.png
2017/07/31(月) 08:29:31.01ID:XaGlTjBV
コーディング、ビルド
http://i.imgur.com/nnrqbkH.png
http://i.imgur.com/djr81Jj.png
http://i.imgur.com/HyI9a1R.png
2017/07/31(月) 08:29:39.14ID:XaGlTjBV
実行、デバッグ
http://i.imgur.com/M2aVKo8.png
http://i.imgur.com/ZtiQAYM.png
http://i.imgur.com/TnFClZ0.png
545kadesu
垢版 |
2017/07/31(月) 10:32:48.65ID:RVdenN8P
Selenium WebDriverでHTTP refererを設定する方法をご教授下さい。
chromeを使用しています。

■やりたい事
http://referer.com/http://target.com/

■実装イメージ
options->AddArgument("--referer=http://referer.com/";);
driver->Navigate()->GoToUrl("http://target.com/";);

■環境
Win7 64bit
visual studio
Chrome driver
2017/07/31(月) 10:37:24.99ID:yrizDXBC
>>542-544
ってVS2017だけ?
もしかしてVScode入れる意味なかった?
547デフォルトの名無しさん
垢版 |
2017/07/31(月) 18:53:16.57ID:Y/tHh3+o
>>539
別にVSでも良いけど、差し当たっては新規作成とビルド->実行くらいは覚えんと。
(デジタルネイティブって言葉はどこ行ったんだろう。。。30代の自分が子供の頃でも迷った記憶は無いのに)

新規だけど、何も無いところから初めたい。
新規作成で空の何とか選べば意図通りに行きそう?とか、直感が働くのがデジタルネイティブの筈なんだが。

最初はcppファイルでCの勉強とかでも良いと思う。
むしろその方が型にうるさいから好都合だし。
2017/07/31(月) 21:16:14.24ID:v4rHNYrD
リアルなプログラミングネイティブなのはベーマガ世代だけだよ。
549デフォルトの名無しさん
垢版 |
2017/07/31(月) 21:53:07.86ID:VZjnFU9V
トラ技世代はどうなるんだよ
2017/07/31(月) 22:05:43.56ID:v4rHNYrD
ネイティブになるには小中学生時代に大量のコードを読む必要があるから。
その頃からトラ技読んでたらリアルデジタルネイティブになれるだろうな。
おれは回路はスラスラ読めない、書けない。このコンデンサは何用で〜とか考えないと無理。
母国語と同じ感覚、ネイティブになるには高校からじゃ遅すぎるよ。
2017/07/31(月) 22:05:52.73ID:KcGONOHk
Z80とメモリとPIOの回路図から始まるんですかい
552デフォルトの名無しさん
垢版 |
2017/07/31(月) 22:12:45.15ID:VZjnFU9V
>>550
ごめんな、俺は社会人デビュー後だ
学生時代はhFEすら知らなかった
553デフォルトの名無しさん
垢版 |
2017/07/31(月) 22:18:29.43ID:h/AGTSOY
バックアップ活用テクニック
2017/07/31(月) 22:24:57.05ID:7wcG+43N
紙テープみて、「ここバグだよ」ってぼそっと言う人
2017/07/31(月) 22:29:30.63ID:nnrvrhsw
学生の頃はZ80や6809のアセンブリを手書きしてハンドアセンブルしてたなあ
>>523で書き込んだスタックの構造の違いに気付いたのもその頃
2017/07/31(月) 23:15:45.49ID:MZt0w9cd
Cマガ復活させればここの難民は少しは救われるかな
2017/08/01(火) 05:31:22.97ID:o6jic4cS
CJJ かDDJでも良いけど
558デフォルトの名無しさん
垢版 |
2017/08/01(火) 06:09:11.07ID:CJO4kzTH
ざべ
2017/08/01(火) 06:45:19.65ID:bsIAKS/0
ハード指向なら トラ技
ソフト指向なら Interface

最近はかなり曖昧になってきてるけど…
2017/08/01(火) 14:13:56.93ID:dby33sg7
>> 557-558
それなんですか?
561デフォルトの名無しさん
垢版 |
2017/08/01(火) 14:36:29.29ID:CJO4kzTH
ざべ=THE BASIC 技術評論社
元々は名のとおりBASICの雑誌だったが
いつしかオタッキーなPC雑誌へと変貌していった
http://ikura.2ch.net/test/read.cgi/i4004/1010850340/
2017/08/01(火) 16:13:23.83ID:8vfI5Dp4
CJJ
http://iss.ndl.go.jp/books/R100000002-I000000074061-00

DDJ
Dr. Dobb's Journal Japan
563デフォルトの名無しさん
垢版 |
2017/08/01(火) 22:24:59.83ID:DyBYTlGz
547だけど、ごめん。。。
変なおっさん呼び込んじゃったね。。。
2017/08/01(火) 22:38:50.29ID:vXOO0+4J
ここは同窓会みたいなものだから
昔話が大好きなんだよ
2017/08/01(火) 22:54:03.38ID:6pzqaY7a
実装の話にバズワードぶっこんでくるガキはすっこんでろ。
2017/08/02(水) 07:28:23.46ID:mfenbxuD
>>565
何をバズワードと思ったの?
2017/08/02(水) 09:02:58.28ID:ytmpxP9x
>>566
同窓会
2017/08/02(水) 09:17:35.26ID:a1RMIIdL
なんの実装の話だっけ?
2017/08/02(水) 10:49:51.86ID:nZqt0zvZ
Facebook
2017/08/02(水) 23:13:24.31ID:pW5qBrxf
Dr. 弩ブス Journal
571デフォルトの名無しさん
垢版 |
2017/08/03(木) 02:45:12.28ID:CXemL7CS
x^2+y^2=5をみたすx、yを求めたいんだけどどんなプログラムがええのかな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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