C言語なら俺に聞け 143

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ b375-rVGZ)
垢版 |
2017/10/27(金) 21:28:08.20ID:pAogLeJi0
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/

前スレ
C言語なら俺に聞け 142
http://mevius.2ch.net/test/read.cgi/tech/1502364083/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/10/27(金) 21:56:32.94ID:/LUCvRWS0
おっつ おっつ
3デフォルトの名無しさん (ブーイモ MMeb-gj0X)
垢版 |
2017/10/27(金) 23:12:15.85ID:67YjQzLBM
>>1
2017/10/28(土) 08:25:42.00ID:VIxhg0oq0
「新スレッドは○番に書き込んだ人が立てる」みたいなガイドラインを
テンプレートに盛り込んだ方が安心じゃないかな。

前スレッドの終了まで新スレッド(ここ)が立たなかったし、
999番で「誰か立ててくれ」と書き込まれたのに応じて
「立てたよ、リンク先は…」と誘導に使われるべき1000番が
無意味な「あぼーん」で潰されたし。
5デフォルトの名無しさん (ワッチョイ d18a-bYcA)
垢版 |
2017/10/28(土) 09:22:16.51ID:6bG+Py6x0
あぁあああもうポインタ全然分かんねえよおおお
6デフォルトの名無しさん (ワッチョイ 6b15-OCcV)
垢版 |
2017/10/28(土) 10:32:21.81ID:QoaQu2To0
前スレへのリンクがあって、スレタイにも番号がついてるわけで
1000いったら次スレなんて言われんでもわかるし望む者がいるから立っている
それだけのことで、別に何かする必要はないと思うな
7デフォルトの名無しさん (ワッチョイ 719f-WLyz)
垢版 |
2017/10/28(土) 13:13:54.08ID:cK0+9veY0
>>5
文字通り何かを指し示すものだよ。
8デフォルトの名無しさん (ワッチョイ 21d2-Eec1)
垢版 |
2017/10/28(土) 13:25:50.21ID:NBGUhvqo0
data8<7-0> にdata32<31-00>の中のdata32<07-00>を抜き出して代入したい

data8 = data32 % 256 ;

と書いてもコンパイラが素直に推論してくれません
キャリー処理のコードっぽいものをつけてきやがります
どうしたらいいでしょうか?
2017/10/28(土) 13:30:10.44ID:z7fGPvzs0
あまりにも挫折者が多すぎる
教え方が悪いとか例題が少ないとかじゃねえのかと

変数とか言うふわふわしたモンがいきなり具体的なものになるから分かりにくいんじゃないのかね
メモリとかアドレスとかいきなし言われても分んねーよ、とかなるし
しまいにはアドレスの値だって気にかけなくなる

いきなり「変数は値と場所、二つの数字をもちます」とか言われると混乱するんだよ
10デフォルトの名無しさん (ワッチョイ 719f-WLyz)
垢版 |
2017/10/28(土) 13:51:05.54ID:cK0+9veY0
>>8
君の言いたいことがよくわからない。とりあえず全部日本語に翻訳してくれ。
2017/10/28(土) 14:04:12.56ID:4nXMq3qA0
先にメモリとアドレスから入ればいいのさ
2017/10/28(土) 14:07:01.68ID:tCIUZaJu0
ビットが取れればいいだけなら、data8 や data32 の型を符号無しにするだけで
いけそうな気もするが、よく分からん
13デフォルトの名無しさん (ワッチョイ 21d2-Eec1)
垢版 |
2017/10/28(土) 14:11:40.74ID:NBGUhvqo0
両変数ともunsigned宣言はしています
2017/10/28(土) 14:16:17.83ID:MGjkWSIK0
>>13
こーゆー事?
data8 = data32 & 0x000000ff;
適宜 cast してね
2017/10/28(土) 14:18:02.62ID:fKJ32+jb0
printf で
data8 の実際の型にあった表示フォーマット使ってなかったとかのオチ?
(data8 の最上位ビットが足ってるとかサ-
16デフォルトの名無しさん (ワッチョイ 1be7-DNJs)
垢版 |
2017/10/28(土) 16:17:52.03ID:DjUYz3cS0
int *a = 0;
*a = 1;
これは入るけど1は入るん?0の番地って存在するん?
2017/10/28(土) 16:21:22.21ID:U1K93bKt0
>>16
ワープに成功しましたってメッセージが出る
2017/10/28(土) 16:29:25.72ID:MyIroYJQ0
>>16
0番地の住人に怒られる
2017/10/28(土) 16:50:59.06ID:IMJtHdwY0
ぬるぽ
2017/10/28(土) 17:33:04.44ID:VIxhg0oq0
>>8
「リテラルの数値256での剰余だから結果の範囲は0-255、
unsigned char の範囲からはみ出す可能性はない」
ということまでコンパイラが見抜いてくれないってことだよね。

data8 = (unsigined char) data32;

てな具合に明示的なキャストで上手くいかんかな。
あるいはコンパイラの最適化オプションを強めにするか。
21デフォルトの名無しさん (ワッチョイ 21d2-Eec1)
垢版 |
2017/10/28(土) 17:42:28.64ID:NBGUhvqo0
ちょっと勘違いしてました
>>8の質問はとりさげます
ちなみに%256の推論はしているみたいです
2017/10/28(土) 18:42:28.70ID:STqPADGQ0
リファクタリングして短いコード吐くかなと思ったら
がんがんループ展開されて元より長いコードを出すこともあるよね
23デフォルトの名無しさん (ワッチョイ 6b15-OCcV)
垢版 |
2017/10/28(土) 18:54:14.85ID:QoaQu2To0
希望的観測でタカをくくって結果を見もしないやつが一番悪い
2017/10/28(土) 20:47:38.03ID:VLfN62TLH
>>16
現代のマルチタスクOSではアドレスをずらしたりして0番地付近は見えなくされる




じゃなかったかな
2017/10/28(土) 20:49:51.90ID:i6LcJWfh0
物理0と論理0が違うってのなら、仮想記憶なOSなら
普通そうだよ
2017/10/28(土) 20:54:20.70ID:uE8IWkSS0
>>16
ヌルポインタに関しては、なんかややこしい事情があるみたいね。
規格ではいかなるオブジェクトとも一致しない特殊なポインタってことになってるようだけど、
自分が使ってる組込み用のコンパイラではただの 0 になる。しかも0番地から普通の RAM なんで、
値も普通に格納される。
どうなるかは確認するしかないんじゃなかろうか。
27デフォルトの名無しさん (ワッチョイ 9150-FcU6)
垢版 |
2017/10/28(土) 21:07:29.96ID:gfV3l07s0
>>20
32bitの範囲の数値を8bitの最大値で割るんだから
最大24bitの数値になるんじゃないの?
data8 = *(unsigined char*) &data32;
リトルエンディアンだと仮定するとこうなると思う
28デフォルトの名無しさん (ワッチョイ 9150-FcU6)
垢版 |
2017/10/28(土) 21:24:13.85ID:gfV3l07s0
すみません
剰余を除算と勘違いしていました
無視してください
29デフォルトの名無しさん (ワッチョイ 719f-WLyz)
垢版 |
2017/10/28(土) 23:08:15.00ID:cK0+9veY0
>>16
あるけど今時のだいたいのOSではアクセスすると例外発生してプログラムが停止させられると思う。
そうでなくてもCPUによってアドレス0付近が特別扱いされている事が多いのでアクセスできたとしても要注意だったりする。
なのでそういうのが必要な時というのはOSそのものやデバイスドライバを作る時ぐらいしかないと考えて良い。
30デフォルトの名無しさん (ワッチョイ 1be7-DNJs)
垢版 |
2017/10/28(土) 23:16:46.23ID:DjUYz3cS0
最近ヤフー知恵袋で初心者なんですけど将来プログラマになりたくてC言語やってみたいんですけどどうですかって
質問が多いがプログラマが時代の流行になってきたか?
31デフォルトの名無しさん (ワッチョイ d18a-bYcA)
垢版 |
2017/10/28(土) 23:27:04.65ID:6bG+Py6x0
>>30
とりあえずみんなc言語やるんだな
32デフォルトの名無しさん (ワッチョイ 1be7-DNJs)
垢版 |
2017/10/28(土) 23:47:39.21ID:DjUYz3cS0
>>31
おすすめの本やらおすすめの開発アプリやらおすすめのサイトやら学校のカリキュラムの評価やら色んな質問が多いしC言語やるならC#やった方が良いと思うんだけどなstring型ないだけで文字列処理とか大変だし不規則な空白・カンマ区切りとかの処理大変だし
そうゆうのを除外してくれる関数あるから楽なのになC言語はchar型で文字列操作してから処理しないとint型にしたりするのが大変だからな
2017/10/29(日) 00:35:52.85ID:CCoHsvZa0
義務教育のカリキュラムなもんで実用性の1側面に問題の作り易さもある
ペーパーテストにはうってつけだろC言語は
2017/10/29(日) 06:18:21.91ID:7nxu6Zdr0
教育だと一般性ってのも考えなきゃならないからね。
次々出てくる「Cを改良したネット時代の言語」とかの新しいやつも
10年たったら別の新言語と置き換わってるかも知れないし。
その点、Cなら古くさくても基本として残ってるだろう。

資格試験はまた別だがね。時々変えないと商売にならん。
35デフォルトの名無しさん (JP 0Hc5-xXVv)
垢版 |
2017/10/29(日) 10:11:30.74ID:NWVP0NdTH
Cは一人でやるとちょっとしたミスで手も足も出なくなるから論外
右も左も分からない初心者に基本はC言語とか言い出すヤツは老害
2017/10/29(日) 10:24:35.50ID:S9avFBtQ0
package test;

class Test
{
  public static void main(String[] args)
  {
    System.out.println("test");
  }
}
2017/10/29(日) 10:27:47.96ID:tz+cuQEW0
組込やOS開発まで視野に入れるとCが一つの王道なのは間違いない
初学者にすすめるべきかと聞かれるとそれはまた別の話
2017/10/29(日) 12:49:29.42ID:DRVQfTKK0
>>35
それはお前が無能てだけだろw Cなんて仕様がコンパクトだから簡単だわ
2017/10/29(日) 13:08:01.23ID:48yStxT20
実際に使うには多くの仕様外な環境依存のことを理解しないといけないから
C言語を勉強してもC言語は使えない
2017/10/29(日) 13:12:59.45ID:oFRxn/Jf0
しようがないな
2017/10/29(日) 13:24:51.26ID:DRVQfTKK0
アホか。それは言語の話じゃねーだろ
42デフォルトの名無しさん (ワッチョイ 719f-Akqv)
垢版 |
2017/10/29(日) 13:36:30.43ID:oFRxn/Jf0
環境依存の部分はどんな言語でも影響受けるから結局は覚える事になるんじゃないのかな
43デフォルトの名無しさん (ワッチョイ e1c3-bYcA)
垢版 |
2017/10/29(日) 16:45:37.57ID:Qj29lsVR0
まずはcでゲーム作ってみようかな
44デフォルトの名無しさん (ワッチョイ 1be7-DNJs)
垢版 |
2017/10/29(日) 17:07:01.40ID:eJZsCyOV0
win32で作ってみる?
45デフォルトの名無しさん (ワッチョイ 7116-rVGZ)
垢版 |
2017/10/29(日) 17:13:50.83ID:X7Kr9qJt0
OpenGLの方がいい
2017/10/29(日) 17:17:11.04ID:TdUzVMA70
まずコンソールアプリで
47デフォルトの名無しさん (ワッチョイ 1be7-DNJs)
垢版 |
2017/10/29(日) 22:58:38.22ID:eJZsCyOV0
その前に開発環境を整えるのが大変だわプログラミングはできるけどそれぞれ出してる開発アプリがあるしその中で開発ツールだっけXNAやらwin32やらで解らんことばっかりや
48デフォルトの名無しさん (ワッチョイ d18a-bYcA)
垢版 |
2017/10/29(日) 23:13:28.81ID:cx6N475a0
>>47
ほんそれ
2017/10/29(日) 23:38:03.44ID:tz+cuQEW0
大抵「C言語は何でも出来る」(嘘ではない)
に騙されるパターンだね
2017/10/29(日) 23:48:24.03ID:XyYI0EpP0
ビットローテイトってどう書くんですかね
51デフォルトの名無しさん (ワッチョイ f1ca-OCcV)
垢版 |
2017/10/30(月) 01:28:40.64ID:ObFQilr40
キャリーを含む9bitローテートか
それとも含まない8bitローテートか
2017/10/30(月) 02:41:46.16ID:z+u7+Cu/0
ボローがある奴で
2017/10/30(月) 04:58:13.48ID:oEYvBlvb0
性能優先ならインラインアセンブリでCPUのローテート命令かねぇ。
移植性が大事なら正直にマスクしてシフトしてビットorで重ねる。

8bitや16bitならテーブル使えば両立できるかな。
2017/10/30(月) 13:11:03.28ID:Oa6tPdXR0
苦C勉強してるんだけどファイルの辺りって重要?
あんま考えずにやってたんだが
55デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)
垢版 |
2017/10/30(月) 13:22:56.64ID:LaVtZ0d2p
ストリームの概念はUNIX譲りの万能概念だから未来永劫絡んで来るぞ。
56デフォルトの名無しさん (アウーイモ MM95-bYcA)
垢版 |
2017/10/30(月) 13:37:21.46ID:/ejdYHINM
fopen
fclose
2017/10/30(月) 14:12:51.37ID:z+u7+Cu/0
fdopen / fileno を理解すれば大体は困らないかと
58デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)
垢版 |
2017/10/30(月) 17:55:35.83ID:LaVtZ0d2p
read/writeが無いと意味が無いだろ。
2017/10/30(月) 18:00:53.98ID:YGvWSIyjr
初心者です。
4ビット目以降に文字(ASCII3文字)が格納されてる場合、どうやって取ればいいですか?
60デフォルトの名無しさん (ガックシ 068b-rVGZ)
垢版 |
2017/10/30(月) 18:06:29.16ID:6LR7RaNa6
char c1=data&0b000000000000000011111111000;
char c2=data%&0b000000001111111100000000000;
char c1=data%&0b111111110000000000000000000;
61デフォルトの名無しさん (ガックシ 068b-rVGZ)
垢版 |
2017/10/30(月) 18:07:40.57ID:6LR7RaNa6
char1重複エラー
62デフォルトの名無しさん (ガックシ 068b-rVGZ)
垢版 |
2017/10/30(月) 18:09:07.45ID:6LR7RaNa6
演算子オペランドエラー
2017/10/30(月) 18:14:50.15ID:ki8heFlTa
ファイルとストリームを結びつけるのって、具体的に何がどうなってるんですか?
その辺りがわかるサイトや書籍があれば英語でもいいので教えていただけるとありがたいです
2017/10/30(月) 18:16:13.85ID:ct0tj9Za0
long n = 12345678;
n >>= 4;
putchar(n & 0xFF);
n >>= 4;
putchar(n & 0xFF);
n >>= 4;
putchar(n & 0xFF);
2017/10/30(月) 18:17:57.46ID:ct0tj9Za0
>>63
LinuxなどのオープンソースのOSのカーネル部分を読めばいい。
Windowsのカーネルは、非公開だが、ReactOSで近いものが読める。
66デフォルトの名無しさん (ガックシ 068b-rVGZ)
垢版 |
2017/10/30(月) 18:19:48.86ID:6LR7RaNa6
シフト演算子でやろうと思ったら先越されてた
2017/10/30(月) 18:21:54.38ID:S5mFuOM00
>>63
これ普通はどうやって勉強すんだろうな 興味あるわ

おれはいきなりデバドラ書かされたんで理解を強制されたけど
あのへんの概念なしで腑に落ちる理解できるもんなん?
2017/10/30(月) 18:47:24.58ID:6zI0CLS+0
>>65
なんでファイルとストリームの結びつきでLinuxカーネルが出てくるの?
69デフォルトの名無しさん (ワッチョイ 7102-rVGZ)
垢版 |
2017/10/30(月) 19:47:29.26ID:4jg/LOEr0
>>68
ストリームを作ってるのがカーネルだからだろ。
2017/10/30(月) 19:50:12.31ID:ct0tj9Za0
>>68
CランタイムならLLVMのlibc++か、GNUのlibstdc++を読めばいい。
カーネル見ずに読めればね。
2017/10/30(月) 19:56:28.17ID:oEYvBlvb0
>>60 0b...で2進数のリテラル表現ってできるんだっけ?

>>64 エンディアネスに対する配慮が…。
2017/10/30(月) 19:59:34.77ID:w02M5Pe50
8進 16進はあるけど 0b... な2進リテラルは余所の言語じゃね?
2017/10/30(月) 20:01:52.91ID:ct0tj9Za0
2進数リテラル(C++14)
https://cpprefjp.github.io/lang/cpp14/binary_literals.html

C++14の機能らしい。D言語やC#にもあったよね。
2017/10/30(月) 20:07:07.38ID:ct0tj9Za0
int bigendian(void)
{
union { int i; char c[sizeof(int)]; } u;
u.i = 1;
return !u.c[0];
}
この関数でエンディアンをチェックすれば? XScreenSaverから拾ったものだけど。
2017/10/30(月) 20:14:13.81ID:ct0tj9Za0
union endian_checker_union
{
int i; char c[sizeof(int)];
} endian_checker = { 1 };

#define IS_BIG_ENDIAN() (!endian_checker.c[0])
2017/10/30(月) 20:16:20.68ID:6zI0CLS+0
>>70
なんでC言語の話でlibstdc++が出てくるの?

fopenやらのストリームなんて、setvbufの説明読めばバッファリングしてるだけって理解できるだろ
カーネルやらlibcのソースなんて読む必要性なんてねーよ
77デフォルトの名無しさん (ササクッテロラ Sp9d-jmG0)
垢版 |
2017/10/30(月) 20:33:32.20ID:LaVtZ0d2p
ストリームなんて、なんでもかんでも先頭から順番に処理するってだけの概念だけどな。
ランダムアクセスメモリーも読み飛ばしと巻き戻し駆使してアクセスするのさ。
78デフォルトの名無しさん (ワッチョイ 719f-Akqv)
垢版 |
2017/10/30(月) 23:47:44.78ID:nQXUW6Dj0
>>49
マシン語には何でもできるねw
2017/10/31(火) 00:10:44.27ID:TMBeGW2t0
>>75
こんなのどう?

#define IS_BIG_ENDIAN (htons(1) == 1)
2017/10/31(火) 02:08:26.69ID:yucmEvc2r
>>64
あざます!
2017/10/31(火) 03:25:37.26ID:TMBeGW2t0
>>64
そういえばそれ、それでいいの?2回目以降は n >>= 8 では?
82デフォルトの名無しさん (ワッチョイ 1387-jmG0)
垢版 |
2017/10/31(火) 08:48:27.57ID:sbQ4uuQC0
>>79
それって、htons()のあるライブラリ間違えたら全く意味が無いマクロだよね?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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