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
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がとなる。
0585デフォルトの名無しさん (ワッチョイ bdd2-qWqy)
垢版 |
2017/10/08(日) 16:00:19.88ID:tULmhvm40
ちょっと教えてくださいとあるHPから抜粋
意味が分からないので解説お願いします
私が負荷した文は<<  >>で囲みます

struct Person {
char name[20];
int sex;
// char sex;
int age;
double height;
double weight;
} person_s;               <<←今までの自分の認識:Person構造体のインスタンスperson_sを生成 しかしこの認識は後述@でpがインスタンスであると推定できることから間違っていると推定できる>>
                      << person_sは構造体宣言の為の鋳型と推定 しかし様々なプログラムをチェックするとここでインスタンス宣言している例も見受けられる >>
                      << 変数が構造体宣言の為の鋳型なのかインスタンスなのかはコンパイラが記述から自動判断???>>
person_s p;               << ←pがPerson構造体のインスタンスであることは後述@のメンバ呼び出しで推定できる >> 

とかけば、不要な宣言を減らすことができます。
構造体メンバの初期化
各メンバの初期化方法として次のようなものがあります

person_s p = {"Tom", 0, 20, 175.2, 66.5};  <<←構造体宣言鋳型person_sを使用しpをインスタンス宣言??>>

// または

person_s p;         << 構造体宣言鋳型person_sを使用しpをインスタンス宣言?? >>
p.name = "Tom";     << この記述でpが構造体Personのインスタンスであると推定できる ・・・@ >>
p.sex = 0;

<< person_sは構造体宣言の鋳型 pはインスタンスであると推定できるが >>
<< 何故ダイレクトにPersonを使ってpを宣言しないのか? >>
<< 何故person_sなどという変数を使って間接的に宣言するのか? >>
<< うんちくきぼんぬ >>
0591デフォルトの名無しさん (ワッチョイ bdd2-qWqy)
垢版 |
2017/10/08(日) 17:16:54.10ID:tULmhvm40
なるほどー ありがとうございました
0592デフォルトの名無しさん (ワッチョイ b68a-YM+x)
垢版 |
2017/10/08(日) 17:26:51.19ID:F9J/pQ0V0
>>590
C++ではtypedefは不要だよ(別にあっても構わないけど)
structとclassはメンバーのデフォルト設定がpublicかprivateかという違いを除けば構文的には全く同じように使える
structで継承することすら出来る
0593デフォルトの名無しさん (ワッチョイ 75b3-qWqy)
垢版 |
2017/10/08(日) 17:32:00.82ID:dE95R3nJ0
>>592
論点はそこじゃなくて
 struct Person { };
 Person p;
が C++ では文法として通るのは指摘の通り

質問元の記述では
 struct Person { } person_s;
 person_s p;

こうなってるから、これじゃ C++ の文法でも通らないでしょうよ ってことで
0594デフォルトの名無しさん (ワッチョイ b68a-YM+x)
垢版 |
2017/10/08(日) 17:37:28.39ID:F9J/pQ0V0
通るよ
class宣言ではいちいちtypedefなど使わないのと同じように構造体でもtypedefは省略するのが一般的
むしろ先頭の構造体テンプレート名を省略して最後の型名だけ宣言する場合も多い
0602デフォルトの名無しさん (エーイモ SEda-2JKf)
垢版 |
2017/10/08(日) 19:03:56.08ID:uO7C8UFXE
コーディングスタイルってたくさんあるんですね
とりあえず検索したらエリートの人達が使ってそうなものを集めてみました

C Coding Standard - CMU (ECE)
https://users.ece.cmu.edu/~eno/coding/CCodingStandard.html
GNU Coding Standards
https://www.gnu.org/prep/standards/html_node/Writing-C.html
NASA C Style Guide
http://homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf
C Coding Style - GNOME Developer Center
https://developer.gnome.org/programming-guidelines/stable/c-coding-style.html.en
CERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
Linux kernel coding style
https://www.kernel.org/doc/html/v4.10/process/coding-style.html

どれも難しそうなのでコーディングスタイル見るのやめようと思います。
githubで適当に見ても全然統一されてないし
とりあえずインデントは空白8個で{}を省略しないルールだけにしたいと思います。
0603デフォルトの名無しさん (エーイモ SEda-2JKf)
垢版 |
2017/10/08(日) 19:04:57.70ID:uO7C8UFXE
空白8個なのはメモ帳で見た時にこのくらいだから合わせてるだけです
■ このスレッドは過去ログ倉庫に格納されています

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