X



C言語なら俺に聞け 142 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 8a6f-bDrV)
垢版 |
2017/08/10(木) 20:21:23.44ID:hEocmkh50
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/1500293207/
http://www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0487デフォルトの名無しさん (ガックシ 06cb-huvM)
垢版 |
2017/10/04(水) 17:28:20.90ID:VznoOWf36
PCでも上じゃね?
0488片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-sxBl)
垢版 |
2017/10/04(水) 17:40:04.96ID:HMkkIXOid
>>484

#ifdef BIG_ENDIAN
# define ENDIAN_FIX(a,b,c,d) a,b,c,d
#else
# define ENDIAN_FIX(a,b,c,d) d,c,b,a
#endif

struct I2C_MEM I2C_MEM[3] =
{
{ 0x7C , 0x01 , {ENDIAN_FIX(0x12, 0x34, 0x56, 0x78)} },
{ 0x7C , 0x02 , {ENDIAN_FIX(0x12, 0x34, 0x56, 0x78)} },
{ 0x7C , 0x03 , {ENDIAN_FIX(0x12, 0x34, 0x56, 0x78)} },
} ;
0489デフォルトの名無しさん (ワッチョイ 7576-vp8x)
垢版 |
2017/10/04(水) 18:04:30.94ID:9y3nqzOw0
構造体の中身から推測すると、
書く順番はエンディアンに依存しないと思う
単純に配列の頭から1バイトずつ送信するだけ

仮にエンディアンで順番が変わるとしても
どうせガッツリ環境依存なコードなんだから
依存しちゃえばいい
環境依存が無いコードを書くつもりなら、
charが1バイトかどうかにも依存しないようにしないとね
0491デフォルトの名無しさん (ガックシ 06cb-huvM)
垢版 |
2017/10/04(水) 18:48:35.51ID:VznoOWf36
もちつけよw
0501デフォルトの名無しさん (ワッチョイ 059f-XSap)
垢版 |
2017/10/05(木) 01:23:13.38ID:ioWgBjMx0
>>483
やってみな。
0503437 (ワッチョイ 5a45-wbjw)
垢版 |
2017/10/05(木) 03:25:02.16ID:JVwY/YZa0
>>465
全体のコードは自作というか(自社製)ですが、funcは他社のライブラリなんです。
ソースがあればなんとかなったのかもですが・・・。

>>467
実際はfunc呼んだ後にcharListの値を呼んで色々作業しています。

>>469
普通の2次元char配列のつもりです。2次元配列というのはC言語的にはシンタックスシュガーにすぎず、
char a[m][n]もchar a[m*n]も等価なのですよね。なので、先頭ポインタから(m*n-1)個先までの
アドレスの範囲内なら範囲外アクセスエラーは起こり得ないと理解しています。



>>474の結論に至る前に、何かC言語で致命的な勘違いや思い込みをしているのかと
思って質問した次第です。今思うとエスパー回答を強いてしまって大変申し訳ありませんでした。

ひとまずはfuncを一切呼ばない形に直して事なきを得ました。
>>437で言った、「charListをプリントしたりすると何故か問題なく動く」からそれで一時凌ぎする考えも
頭をよぎりましたが、思いとどまりました。

ひとまずこれで終えます。回答くださった方々、本当にありがとうございました。
0509デフォルトの名無しさん (ワッチョイ b632-rzHd)
垢版 |
2017/10/05(木) 10:10:50.98ID:6niZC7Nf0
>>506
堂々と嘘つくんじゃねえ
sizeof(char[m][n]) != sizeof(char**)
0510デフォルトの名無しさん (ワッチョイ da33-qWqy)
垢版 |
2017/10/05(木) 10:11:07.83ID:TrTYAooo0
>>503
> 2次元配列というのはC言語的にはシンタックスシュガーにすぎず、
> char a[m][n]もchar a[m*n]も等価なのですよね。なので、先頭ポインタから(m*n-1)個先までの
> アドレスの範囲内なら範囲外アクセスエラーは起こり得ないと理解しています。

だいたいの実装では、特に char 類なら、動作上問題が起こることは考えにくいものの、
言語規格上の保証は無いよ。
https://www.jpcert.or.jp/m/sc-rules/c-arr30-c.html
0511デフォルトの名無しさん (ワッチョイ b632-rzHd)
垢版 |
2017/10/05(木) 12:14:43.27ID:6niZC7Nf0
そういう保証は紙っきれの条文より自分で確認・検証することが最重要だ
いくら「保証されている」ことでもコンパイラがバグったり中には確信的に違反するケースまである

空想論の域を出ないくだらんことのために
現実的なアイディアを諦めていては生産性が上がらない
0512デフォルトの名無しさん (ワッチョイ bdd2-qWqy)
垢版 |
2017/10/05(木) 12:51:26.83ID:TRdRMfhC0
struct I2C_MEM
{
char DEV_ADR ;
char REG_ADR ;
char DATA[4] ;
} static I2C_MEM0 ;


I2C_MEM0.DEV_ADR = 0x7C ;
I2C_MEM0.REG_ADR = 0x01 ;
I2C_MEM0.DATA[4] = { 0x11,0x12,0x13,0x14 } ;  ←これはエラーになる
//I2C_MEM0.DATA[0] = 0x11 ;            ←こちらのパターンはエラーにならない
//I2C_MEM0.DATA[1] = 0x12 ;
//I2C_MEM0.DATA[2] = 0x13 ;
//I2C_MEM0.DATA[3] = 0x14 ;

4バイト一気に設定の書き方はどうすればいいんでしょうか?
0517デフォルトの名無しさん (ワッチョイ bdd2-qWqy)
垢版 |
2017/10/05(木) 13:04:36.67ID:TRdRMfhC0
なるほどー ありがとうございました
0519デフォルトの名無しさん (ガックシ 060e-5Ff0)
垢版 |
2017/10/05(木) 13:13:39.58ID:/W/G46pt6
無名配列のリテラルは初期化時には使えるけど代入には使えないってこと?
0520デフォルトの名無しさん (ガックシ 060e-5Ff0)
垢版 |
2017/10/05(木) 13:16:53.65ID:/W/G46pt6
初期化時というか宣言時
0528デフォルトの名無しさん (ワッチョイ 9d76-hWC7)
垢版 |
2017/10/05(木) 20:34:21.70ID:3IfCpLlr0
整数の負の数に1の補数を用いる環境
整数の負の数に絶対値と符号ビットを用いる環境
整数にトラップ表現がある環境
charが8の倍数ビットでない環境

を教えてください
0529デフォルトの名無しさん (ササクッテロレ Sp75-Zdu/)
垢版 |
2017/10/05(木) 20:34:53.22ID:olaqz/S6p
ARMは選択出来たっけ?
まあ、みんなリトルで使ってるがな。
地味にMicroBlazeがビッグだな。
0535デフォルトの名無しさん (ササクッテロレ Sp75-Zdu/)
垢版 |
2017/10/05(木) 20:46:52.00ID:olaqz/S6p
6502とか、地味に生きてるやん?
あ、あれはエミュレータか。
0536片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sdfa-yc5c)
垢版 |
2017/10/05(木) 21:04:49.44ID:Xv32D2hUd
ほとんどの環境のcharが8ビットなのは、基本ASCIIが7ビットで表現できることと、7ビットより8ビットの方が切りが良くてパリティビットなどに使えて便利だったことによる。
0537デフォルトの名無しさん (ワッチョイ 054b-5Ff0)
垢版 |
2017/10/05(木) 21:09:26.31ID:PAHxl06e0
最近C言語ハマってる
言語がシンプルなのと直にコンピュータを操ってる感
0546デフォルトの名無しさん (ワッチョイ 059f-XSap)
垢版 |
2017/10/05(木) 23:58:01.04ID:ioWgBjMx0
>>512
strncpy(I2C_MEM0.DATA, "\x11\x12\x13\x14", 4);
0547デフォルトの名無しさん (ワッチョイ 7575-5Ff0)
垢版 |
2017/10/06(金) 00:05:52.06ID:L6h7mNkA0
実行時間の長い再帰関数(ハノイの塔)を実行しながら過程をglutというOpenGLライブラリで開いたウィンドウに描画させたいのですが方法ありませんか?
ステップ毎に再帰関数を最初から実行するしかないですか?
0549デフォルトの名無しさん (ワッチョイ 558d-wbjw)
垢版 |
2017/10/06(金) 01:51:40.09ID:FhOeSxdK0
-1.400000e+01 2.043459e+01 1.738866e-15
-1.398525e+01 2.029842e+01 3.900652e-01
-1.399008e+01 2.029842e+01 -1.300367e-01

3DデータのSTLと言う形式で使われてるこの様な数字の型は
printfで出力する場合どの型フィールドになるのでしょうか
%e %gだけでは何だか違います
0550デフォルトの名無しさん (ワッチョイ 059f-XSap)
垢版 |
2017/10/06(金) 02:18:01.36ID:x0C9073k0
>>549
いやずばり %e だと思うが?
0552デフォルトの名無しさん (ワッチョイ 059f-TYR1)
垢版 |
2017/10/06(金) 03:37:10.08ID:x0C9073k0
>>551
最近って・・・うーん。
0561デフォルトの名無しさん (ガックシ 060e-5Ff0)
垢版 |
2017/10/06(金) 10:38:12.40ID:EDz06gtM6
自分のミスはスルー
0562デフォルトの名無しさん (ワッチョイ 4623-XSap)
垢版 |
2017/10/06(金) 10:39:45.78ID:d6jfQR1X0
strncpyは0で終端される条件が毎回わからなくて敬遠していたんです。
でも、strlcpyを使うようになってから肌年齢が10歳若返りました!
今は毎日がとっても楽しいです。
0563デフォルトの名無しさん (ワッチョイ 0502-5Ff0)
垢版 |
2017/10/06(金) 10:54:46.60ID:U5/7Dlcy0
>>548
おお!センクス!
0564デフォルトの名無しさん (ワッチョイ b632-rzHd)
垢版 |
2017/10/06(金) 13:16:11.88ID:qH0Ei3hn0
>>559
おまえさんが言わなくても老いた者は死にゆくように自然はできている
それを妨げるなという主張なら医療業界に言え
0565デフォルトの名無しさん (ササクッテロレ Sp75-Zdu/)
垢版 |
2017/10/06(金) 14:05:32.93ID:UT/zOTNDp
何の為にサイズ指定があるか、考えりゃわかるじゃん?
0567デフォルトの名無しさん (ワッチョイ b632-rzHd)
垢版 |
2017/10/06(金) 15:16:39.88ID:qH0Ei3hn0
>>566
形容詞には比較をつけろ
一年目でおぼえる初歩だろうがボケ
0568デフォルトの名無しさん (ワッチョイ 0516-5Ff0)
垢版 |
2017/10/06(金) 15:20:28.76ID:B4vVDMXU0
うんち!
0571デフォルトの名無しさん (ワッチョイ b632-rzHd)
垢版 |
2017/10/06(金) 20:42:56.05ID:qH0Ei3hn0
>>569
朝鮮語か日本語かには関係ない
電気屋のルールだ
0572デフォルトの名無しさん (ワッチョイ 059f-huPf)
垢版 |
2017/10/07(土) 14:47:24.49ID:f9dDdlSq0
>>555
>>546にはそのstrncpy()が書かれているが?
0573デフォルトの名無しさん (エーイモ SEda-2JKf)
垢版 |
2017/10/08(日) 10:02:50.14ID:iaWD4MFGE
PHPしかできないザコだったけどC言語が楽しい
Cのスタンダードなコーディングスタイルってないですか?
インデントにタブ使ってたりifに{}使ってなかったりするコードをよく見かけますけど
0578デフォルトの名無しさん (ワッチョイ 0516-5Ff0)
垢版 |
2017/10/08(日) 13:04:33.16ID:SXbZ1Yc30
>>573
ほんまC言語楽しいよな
俺もC#かWeb系スクリプト言語しか使ったことなかったんだが
0580デフォルトの名無しさん (ワッチョイ 0516-5Ff0)
垢版 |
2017/10/08(日) 13:05:13.53ID:SXbZ1Yc30
C++はゴミ
0581デフォルトの名無しさん (ワッチョイ 059f-huPf)
垢版 |
2017/10/08(日) 14:51:03.41ID:c+/m9riq0
>>579
いやタブ1つにして表示幅はスペース4つ分だ。
0582デフォルトの名無しさん (ワッチョイ 059f-huPf)
垢版 |
2017/10/08(日) 14:54:49.62ID:c+/m9riq0
>>576
ああ。もうこのスレはスペース開けるか開けないか改行するかしないか何文字にするか中括弧はどうするか行末にバックスラッシュ入れて次行に書くか書かないかgotoどうするか等の話で延々と10年ぐらい費やされるんだろうな。
もちろんエディタの話に飛び火してviがvimがemacsがとなる。
■ このスレッドは過去ログ倉庫に格納されています

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