[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/28 01:12 / Filesize : 253 KB / Number-of Response : 1018
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 142



1 名前:デフォルトの名無しさん [2017/08/10(木) 20:21:23.44 ID:hEocmkh50.net]
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

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

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

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

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


mevius.2ch.net/test/read.cgi/tech/1500293207/
www.geocities.jp/c_cpp_cs/about_c/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

577 名前:デフォルトの名無しさん mailto:sage [2017/10/06(金) 18:41:01.91 ID:fZ4i0/3ka.net]
>>567
>>559のレスの中の「早く」の使い方は自然だと思うが…。
日本語学校の1年目に、どう教わったの?

578 名前:デフォルトの名無しさん [2017/10/06(金) 20:42:56.05 ID:qH0Ei3hn0.net]
>>569
朝鮮語か日本語かには関係ない
電気屋のルールだ

579 名前:デフォルトの名無しさん [2017/10/07(土) 14:47:24.49 ID:f9dDdlSq0.net]
>>555
>>546にはそのstrncpy()が書かれているが?

580 名前:デフォルトの名無しさん [2017/10/08(日) 10:02:50.14 ID:iaWD4MFGE.net]
PHPしかできないザコだったけどC言語が楽しい
Cのスタンダードなコーディングスタイルってないですか?
インデントにタブ使ってたりifに{}使ってなかったりするコードをよく見かけますけど

581 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 10:09:18.29 ID:+nfO/L5n0.net]
戦争でも起こす気か?

582 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 11:30:23.33 ID:HosRocIl0.net]
>>573
C言語 コーディングスタイル
でググれ
あと結果の報告は要らん
と言うか報告するな
理由は>>574に書いてある

583 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 11:56:53.58 ID:SX/6L99bd.net]
戦いの火蓋は切って落とされた

584 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 13:00:43.13 ID:FR3ELF64M.net]
インデントは空白4個だね

585 名前:デフォルトの名無しさん [2017/10/08(日) 13:04:33.16 ID:SXbZ1Yc30.net]
>>573
ほんまC言語楽しいよな
俺もC#かWeb系スクリプト言語しか使ったことなかったんだが



586 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 13:04:53.34 ID:e96mZsST0.net]
>>577
2つで十分ですよ

587 名前:デフォルトの名無しさん [2017/10/08(日) 13:05:13.53 ID:SXbZ1Yc30.net]
C++はゴミ

588 名前:デフォルトの名無しさん [2017/10/08(日) 14:51:03.41 ID:c+/m9riq0.net]
>>579
いやタブ1つにして表示幅はスペース4つ分だ。

589 名前:デフォルトの名無しさん [2017/10/08(日) 14:54:49.62 ID:c+/m9riq0.net]
>>576
ああ。もうこのスレはスペース開けるか開けないか改行するかしないか何文字にするか中括弧はどうするか行末にバックスラッシュ入れて次行に書くか書かないかgotoどうするか等の話で延々と10年ぐらい費やされるんだろうな。
もちろんエディタの話に飛び火してviがvimがemacsがとなる。

590 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 14:55:08.52 ID:bhcsmcAx0.net]
スペース一つで充分

591 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 15:03:04.04 ID:Eg4i3QFB0.net]
プログラム終了前にfree()が必要かどうかを忘れちゃいかん。

592 名前:デフォルトの名無しさん [2017/10/08(日) 16:00:19.88 ID:tULmhvm40.net]
ちょっと教えてくださいとある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などという変数を使って間接的に宣言するのか? >>
<< うんちくきぼんぬ >>

593 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:03:19.22 ID:dE95R3nJ0.net]
struct Person の前に typedef がありそうな雰囲気

594 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:13:28.90 ID:yi/NbOiJ0.net]
ここかな
https://qiita.com/nom

595 名前:unomu/items/1a72b0150ea0fcf442b0
typedef の書き漏れだろうね
[]
[ここ壊れてます]



596 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 16:38:19.39 ID:HosRocIl0.net]
>>584
exit() の前にだろ

597 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:08:17.03 ID:F9J/pQ0V0.net]
C++ならtypedefなくても可
多分.cppでビルド通したんだろうね

598 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:13:11.77 ID:dE95R3nJ0.net]
>>589
後の句 person_s を型名として使ってるんで typedef は必須じゃない?
(strust 省略の Person で宣言してるのとは違う)

599 名前:デフォルトの名無しさん [2017/10/08(日) 17:16:54.10 ID:tULmhvm40.net]
なるほどー ありがとうございました

600 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:26:51.19 ID:F9J/pQ0V0.net]
>>590
C++ではtypedefは不要だよ(別にあっても構わないけど)
structとclassはメンバーのデフォルト設定がpublicかprivateかという違いを除けば構文的には全く同じように使える
structで継承することすら出来る

601 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:32:00.82 ID:dE95R3nJ0.net]
>>592
論点はそこじゃなくて
 struct Person { };
 Person p;
が C++ では文法として通るのは指摘の通り

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

こうなってるから、これじゃ C++ の文法でも通らないでしょうよ ってことで

602 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:37:28.39 ID:F9J/pQ0V0.net]
通るよ
class宣言ではいちいちtypedefなど使わないのと同じように構造体でもtypedefは省略するのが一般的
むしろ先頭の構造体テンプレート名を省略して最後の型名だけ宣言する場合も多い

603 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 17:42:06.58 ID:dE95R3nJ0.net]
https://ideone.com/e1pLf2
通ったっけ? って確認コード
インスタンスとtypedef の区別つく?

604 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:04:45.47 ID:PUMPETat0.net]
structが省略可能になってtypedefしなくなったのを
typedefが省略可能と間違って覚えてるんじゃないだろうか

605 名前: mailto:sage [2017/10/08(日) 18:08:10.27 ID:dlDwfjxk0.net]
>>594
>>595 を見る限り通らないようだね



606 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:14:58.26 ID:ALuk3l/eM.net]
あれ?
通らないのかこれ?

607 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:20:47.85 ID:dE95R3nJ0.net]
型名のエイリアス宣言と  その型のインスタンスの生成
typedef を省略した場合には、全く同じ記述になるんだけど
後者のインスタンスの生成で翻訳してるぜ

608 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:29:26.73 ID:HosRocIl0.net]
通ると思う方がどうかしてる

609 名前: []
[ここ壊れてます]

610 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 18:32:58.84 ID:LFQQ2ZHvd.net]
なぜ通ると思ったのか

611 名前:デフォルトの名無しさん [2017/10/08(日) 19:03:56.08 ID:uO7C8UFXE.net]
コーディングスタイルってたくさんあるんですね
とりあえず検索したらエリートの人達が使ってそうなものを集めてみました

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
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個で{}を省略しないルールだけにしたいと思います。

612 名前:デフォルトの名無しさん [2017/10/08(日) 19:04:57.70 ID:uO7C8UFXE.net]
空白8個なのはメモ帳で見た時にこのくらいだから合わせてるだけです

613 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 19:18:41.81 ID:PUMPETat0.net]
また戦争がしたいのか、アンタは

614 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 19:26:45.12 ID:+nfO/L5n0.net]
戦闘民族

615 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 19:30:12.30 ID:HosRocIl0.net]
書いてりゃわかると思うけど8は多すぎ
単に昔のシステムがそうだったと言うだけのことだから4とか2でいいと思う



616 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 19:36:28.95 ID:+nfO/L5n0.net]
あーあ

617 名前:デフォルトの名無しさん mailto:sage [2017/10/08(日) 21:11:10.70 ID:bhcsmcAx0.net]
>>573
会社や複数人作業ならそれにあわせる
一人で書く分には何でもいいだろ
なんなら、PHPで使ってたスタイルでいいだろ
ってか、PHPの時はどうしてたんだよ

618 名前:デフォルトの名無しさん [2017/10/09(月) 01:05:37.72 ID:6VRPxojV0.net]
マンデルブロの描画がうまくいきません。ズームするとすぐに単調になってしまいます。

動画
https://youtu.be/Ompp_YwrLPw

ソースコード
codepad.org/mlm33eRT

619 名前:片山博文MZ mailto:sage [2017/10/09(月) 01:30:56.68 ID:vdfcSFiBd.net]
>>609
クリックしたら画面の中心を移動させる。

620 名前:片山博文MZ mailto:sage [2017/10/09(月) 01:32:01.57 ID:vdfcSFiBd.net]
ドラッグされたらずらす。

621 名前:デフォルトの名無しさん [2017/10/09(月) 01:53:40.87 ID:6VRPxojV0.net]
>>610
一応クリックするとある境界線付近を拡大するようにプログラムに書いてるのですが...

622 名前:片山博文MZ mailto:sage [2017/10/09(月) 03:32:25.69 ID:vdfcSFiBd.net]
>>612
環境によって座標系が違うのかも知れない。ずらす値を変えてみては?

623 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 03:39:59.55 ID:69HXGpsc0.net]
>>609
単調になるのは k のループ回数が少ないせいでは

624 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 06:38:40.98 ID:hRP3P7r40.net]
そうだね k=1000くらいで

625 名前:デフォルトの名無しさん [2017/10/09(月) 08:53:44.75 ID:IXUwPWpS6.net]
>>613
変えても同じでした
>>614
>>615
なるほど!家に帰ったらやって見ます!



626 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:35:07.86 ID:IkImbMA7a.net]
>>594
変数宣言が全てtypedefになるなんて狂気な言語
実例を教えてくれ

627 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:51:45.98 ID:UMVukllE0.net]
俺はこの書き方
if (condition) {
}
else {
}

628 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 09:55:27.10 ID:pMEz2IHg0.net]
コーディングスタイルにこだわる奴は素人。

629 名前:デフォルトの名無しさん [2017/10/09(月) 12:12:59.35 ID:9ioWbZDx6.net]
Linuxのソースコードは?

630 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 13:24:11.42 ID:N3YX2Zf80.net]
ソース整形ツールの動作オプションの数で眩暈がするぜw

631 名前:デフォルトの名無しさん [2017/10/09(月) 14:12:40.72 ID:98rFBdXp0.net]
■■たびたびお世話になります なにが悪いのかご指摘おねがいします■■

struct I2C_MEM 
{
char DEV_ADR ;
char REG_ADR ;
char DATA[4] ;
} static I2C_MEM[2] ;

task02_tst ( struct I2C_MEM *aaa )
{
char i,a[2],b[2],c[2];
i = 0 ;

while ( i <= 1 )
{
aaa -> DEV_ADR ;
a[i] = *aaa ;         // データタイプがインコンパチでエラーになる char DEV_ADR を参照してくれない?
aaa -> REG_ADR ;
b[i] = *aaa ;        // データタイプがインコンパチでエラーになる char REG_ADR を参照してくれない?
aaa -> DATA ;
c[i] = *aaa         // データタイプがインコンパチでエラーになる char DATA を参照してくれない?
p += 1 ;

i += 1 ;
}
}

632 名前:デフォルトの名無しさん [2017/10/09(月) 14:22:20.38 ID:98rFBdXp0.net]
↑単純に関数内で構造体のデータにポインタ+インデックスでアクセスしたい

633 名前:デフォルトの名無しさん [2017/10/09(月) 14:26:06.29 ID:98rFBdXp0.net]
間違い発見
p += 1 ; は aaa += 1 ; に置き換えてください

634 名前:片山博文MZ mailto:sage [2017/10/09(月) 14:39:31.76 ID:vdfcSFiBd.net]
>>622
何がしたいのかわからない。
代入の左辺は右辺と互換性のある型じゃないといけないし、配列まるごとの代入はできない。
まずは代入の型をそろえないと。

635 名前:片山博文MZ mailto:sage [2017/10/09(月) 15:09:21.54 ID:vdfcSFiBd.net]
char型のデータを代入したいのなら、両辺の型をcharにしないといけないよ。



636 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 15:26:29.02 ID:G+wiEnLh0.net]
>>622
> aaa -> DEV_ADR ;
> a[i] = *aaa ;

例えばこの部分は a[i] = aaa->DEV_ADR; という処理を意図してるのではないかと思う
ただし aaa->DATA のところは char* 型になるので char 型の c[i] に代入できない

637 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 15:56:12.50 ID:of8Vs49yM.net]
>>622
エスパーするとたぶんこう言うことだと思う
task02_tst ( struct I2C_MEM *aaa ){
int i;
char a[2],b[2],c[2];
for(i = 0; i < 2; i++){
a[i] = aaa[i].DEV_ADR;
b[i] = aaa[i].REG_ADR;
c[i] = aaa[i].DATA; // ここは >>627 の言う通りなにをしたいのかよくわからん
}
}

638 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 17:01:40.23 ID:u+Z6y4O20.net]
初心者相手に表記法を変えると理解しにくいかも。
本質から外れた部分が目についてしまうからね。

int i = 0;

while ( i <= 1 )
{
a[i] = aaa -> DEV_ADR ; // ポインタaaaが指す構造体の DEV_ADR メンバの値
b[i] = aaa -> REG_ADR ; // ポインタaaaが指す構造体の REG_ADR メンバの値
c[i] = aaa -> DATA ; // c[i] の型と DATA メンバの型が違うからエラー
aaa += 1 ;

i += 1 ;
}

てな感じかと。
>>627-628 をまとめただけ、だけど。

639 名前:デフォルトの名無しさん [2017/10/09(月) 17:19:35.64 ID:tFlwnlNI0.net]
>>629
c を char *c[2] で宣言しておけばなんとかなるね。

640 名前:デフォルトの名無しさん [2017/10/09(月) 17:34:38.15 ID:98rFBdXp0.net]
皆様 どうもありがとうございます
とりあえず代入の書き方が知りたかっただけでありまして
ちなみにインデックスを使用した配列メンバーのアクセスなんだけど
c[i] = aaa -> DATA +0 ;
d[i] = aaa -> DATA +1 ;
e[i] = aaa -> DATA +2 ;
f[i] = aaa -> DATA +3 ;
こんな書き方ってできるの?

641 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 17:44:30.12 ID:N3YX2Zf80.net]
ポインタを返す場合はそういう書き方
aaa->DATA+3
ポインタの指してる先を求めたい場合は
aaa->DATA[3]

左辺が何を要求しているのか(どういうものを操作したいのか)を頭の中で整理せずに
記述法だけを即物的にトレースするのはとてもまずい

642 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:00:40.01 ID:tNKVEDsJ0.net]
task02_tst()の呼び出しが
task02_tst(I2C_MEM)なのか
task02_tst(&I2C_MEM[1])なのかわからん

前者と仮定するとDEV_ADRにアクセスする方法は
1. (*(aaa + i)).DEV_ADR
2. aaa[i].DEV_ADR
3. (aaa + i)->DEV_ADR
なんかが考えられるけど(2は1の糖衣構文)、ドットとアローそれぞれの
左側の違いを理解しないと先には進めないよ

643 名前:デフォルトの名無しさん mailto:sage [2017/10/09(月) 18:02:21.36 ID:tda6mQVw0.net]
>>631
意図が分からないからマトモに答えら

644 名前:れない
実際に数字入れて教えてくれ
例えば>>622はI2C_MEM = {4, 8, {0, 1, 2, 3}} でa,b,cはどうなるの?
[]
[ここ壊れてます]

645 名前:デフォルトの名無しさん [2017/10/12(木) 10:23:33.14 ID:jY+yK3vs6.net]
過疎ってるな



646 名前:デフォルトの名無しさん [2017/10/12(木) 11:18:46.53 ID:mQ4S5/8+0.net]
ちょっと質問です
↓下記のようなwhileの中身を複製するために使う実体化されない変数iをコンパイラ制御のための変数と明示する書き方ってあるんですか?

task02_tst ( I2C_MEM_typ *p , char i)
{
char i ;
i = 0 ;
while ( i < 2 )
{
p = p + i ;
a[i] = p -> DEV_ADR ;
b[i] = p -> REG_ADR ;
c[i][0] = p -> DATA[0] ;
c[i][1] = p -> DATA[1] ;
c[i][2] = p -> DATA[2] ;
c[i][3] = p -> DATA[3] ;
}
}

647 名前:デフォルトの名無しさん [2017/10/12(木) 11:24:19.55 ID:mQ4S5/8+0.net]
task02_tst ( I2C_MEM_typ *p )
{
char i ;
i = 0 ;
while ( i < 2 )
{
p = p + i ;
a[i] = p -> DEV_ADR ;
b[i] = p -> REG_ADR ;
c[i][0] = p -> DATA[0] ;
c[i][1] = p -> DATA[1] ;
c[i][2] = p -> DATA[2] ;
c[i][3] = p -> DATA[3] ;
}
}

に修正します

648 名前:デフォルトの名無しさん [2017/10/12(木) 11:26:34.34 ID:mQ4S5/8+0.net]
task02_tst ( I2C_MEM_typ *p )
{
char i ;
i = 0 ;
while ( i < 2 )
{
p = p + i ;
a[i] = p -> DEV_ADR ;
b[i] = p -> REG_ADR ;
c[i][0] = p -> DATA[0] ;
c[i][1] = p -> DATA[1] ;
c[i][2] = p -> DATA[2] ;
c[i][3] = p -> DATA[3] ;

i += 1 ;
}
}

に修正します

649 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 11:50:40.24 ID:z+R5CP9n0.net]
>>636
先ず日本語をなんとかした方がいい
『whileの中身を複製する』とはどういうことか?
『実体化されない変数』とは何か?
『コンパイラ制御のための変数』とは何か?

650 名前:デフォルトの名無しさん [2017/10/12(木) 12:32:35.60 ID:mQ4S5/8+0.net]
こんな感じで構造体をインデックスで指定した転送命令にコンパイルする意図で書いています

p = p + i ;                            //*実体化されない(マシンコード化されない)コード
mov a[0] ,  [構造体I2C_MEMの基底番地+0]
mov b[0] ,  [構造体I2C_MEMの基底番地+1]
mov c[0][0] ,  [構造体I2C_MEMの基底番地+2]
          :
mov c[0][3] ,  [構造体I2C_MEMの基底番地+5]
i += 1 ;                              //*実体化されない(マシンコード化されない)コード


p = p + i ;                            //*実体化されない(マシンコード化されない)コード
mov a[1] ,  [構造体I2C_MEMの基底番地+6]
mov b[1] ,  [構造体I2C_MEMの基底番地+7]
mov c[1][0] ,  [構造体I2C_MEMの基底番地+8]
          :
mov c[1][3] ,  [構造体I2C_MEMの基底番地+11]
i += 1 ;                              //*実体化されない(マシンコード化されない)コード

・・・で意図通りコンパイルしてくれるわけですが

実体化されない(メモリー空間またはレジスタファイルにアサインされない)char iの意味が
希薄になるのでコンパイラに対する変数だよと明示(コンパイラ&設計者に)したいのだが
そんな書き方ある?ということでありまして

651 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 12:41:11.33 ID:Z8zboj8V0.net]
多少は意図した記述に沿って機械語出力するだろうけど、
保障されてるわけでもないし、最適化他でどうなるかもわからん

「機械語でこうなって欲しい」という目的を達成させるならその部分を機械語で書くか、
(環境によるだろうけど)その部分だけをインラインアセンブラにする

652 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 12:42:56.26 ID:cscfLNVP0.net]
memcpy使ったらいいんじゃないの?

653 名前:片山博文MZ mailto:sage [2017/10/12(木) 12:52:32.73 ID:loBt1/dEd.net]
volatile

654 名前:デフォルトの名無しさん [2017/10/12(木) 13:04:26.04 ID:mQ4S5/8+0.net]
うーーん・・・

volatileは最適化抑止(消すなー!)のための記述と認識しているんですが
volatileの逆の機能が欲しいんですよね 実体化するなー!ってやつです

655 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 13:37:51.69 ID:jX4dlPv10.net]
volatile揮発性の当初の意図は
70年代コンピュータでの磁気コアメモリに置いておく、程度なんじゃあねえの



656 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 13:45:28.14 ID:Z8zboj8V0.net]
実体化するな=機械語としてコードにおくな
ということは、言語上での変数を一切使わずに繰り返し展開するような
テンプレートやマクロでメタプログラミングしたい って話になるが・・・

#define IMP(idx) do { \
a[idx] = p[idx].DEV_ADR; \
b[idx] = p[idx].REG_ADR; \
:
: 以下同じ様に記述
:
c[idx][3] = p[idx].DATA[3] ; } whle(0)

IMP(0);
IMP(1);
IMP(2);

変数を使ってループできないから 繰り返し分リテラルを手で並べる必要あるしー
正直ほめられたやりかたじゃないと思うわ

657 名前:デフォルトの名無しさん [2017/10/12(木) 14:25:00.48 ID:1sF6m3D2p.net]
実体化させたく無いものを記述?
…スラ二本じゃダメなのか?

658 名前:デフォルトの名無しさん [2017/10/12(木) 14:30:09.97 ID:9bJ1Vwh10.net]
そういう話ではないでしょ
そもそもループによるコードのキャストは
記述を短縮化するのが目的なんだから

キャストのためのループであることをコンパイラに
推論させるための変数指定の仕組みがあるのかな?ってはなし

659 名前:デフォルトの名無しさん [2017/10/12(木) 14:32:07.54 ID:9bJ1Vwh10.net]
まあ 指定しなくても現状でコンパイラは推論してるけれどもねw
なんかキモチ悪いといえばキモチ悪いんで指定できればうれしいってだけです

660 名前:デフォルトの名無しさん [2017/10/12(木) 14:36:32.09 ID:OhN0e73F6.net]
死ねゴミ

661 名前:デフォルトの名無しさん [2017/10/12(木) 14:37:45.66 ID:9bJ1Vwh10.net]
なんかすぐ出てこないところをみると
そこらへんはコンパイラまかせなのね

662 名前:デフォルトの名無しさん [2017/10/12(木) 14:38:53.90 ID:OhN0e73F6.net]
クッサ

663 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 14:45:29.40 ID:Z8zboj8V0.net]
結局 >>639 だったのか・・・

664 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 14:46:41.92 ID:z+R5CP9n0.net]
返答が幾つもついてるのに出てこないとか言っちゃうのは見たいものしか見ない人の典型だね

665 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 14:48:17.07 ID:XqOCC09Fd.net]
とりあえずお前には無理だ
諦めな



666 名前:デフォルトの名無しさん [2017/10/12(木) 15:03:43.28 ID:9bJ1Vwh10.net]
大体わかりました
ありがとうございました

667 名前:デフォルトの名無しさん [2017/10/12(木) 15:06:24.03 ID:OhN0e73F6.net]
一から10まで足し合わせるプログラムを教えてください。

668 名前:片山博文MZ mailto:sage [2017/10/12(木) 15:10:29.76 ID:loBt1/dEd.net]
>>657
#include <stdio.h>
int main(void) {
int i, n = 0;
for (i = 1; i <= 10; ++i) n += i;
printf("%d\n", n);
return 0;
}

669 名前:デフォルトの名無しさん [2017/10/12(木) 15:18:14.51 ID:OhN0e73F6.net]
>>658
ありがとうございます!

670 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 18:50:09.63 ID:7bIAw6590.net]
人に思いを正しく伝えられない奴がうまくプログラミングできるとは思えないけど大丈夫なんだろう

671 名前:デフォルトの名無しさん [2017/10/12(木) 20:36:00.66 ID:1sF6m3D2p.net]
俺は逆だと思っている。
人に上手く思いを伝えられないからこそ、
表現手段を駆使して伝えようと努力するんだよな。
絵とか音楽とか、クリエイターってそんな生き物。

672 名前:デフォルトの名無しさん mailto:sage [2017/10/12(木) 21:49:52.42 ID:wn8w1zGC0.net]
>>661
> 絵とか音楽とか、クリエイターってそんな生き物。
全然違う
あいつらは自分の思いを伝えられるのは自分の表現法方だけだと思ってる
絵を描く奴で説明文を書いて思いを伝えるやつなんていないだろ

673 名前:デフォルトの名無しさん [2017/10/12(木) 23:57:59.88 ID:5ILt7KpA0.net]
>>645
メモリマップドI/Oに使える。特定のアドレスを読むとキーボードで入力した文字が読めるとか、そういうやつ。
読んだ直後に内容が変わる可能性があるので volatile でないとまずい。

674 名前:デフォルトの名無しさん [2017/10/13(金) 00:30:38.46 ID:neFZx4WS0.net]
共有メモリとか mmap() して複数のプロセスまたはスレッドがアクセスする領域も同じか。
あれ? こんなのちょっと前に話題にならなかったか?

675 名前:デフォルトの名無しさん mailto:sage [2017/10/13(金) 06:51:32.49 ID:txebgbcNM.net]
DMAとかもあるわな



676 名前:デフォルトの名無しさん [2017/10/13(金) 12:09:21.29 ID:UePpwGnn0.net]
ちょっとお尋ねします

char *a ;  と記述すると
 ↓
char a ; 実体化
int (&a) ; 非実体化(コンパイラが使用する変数)

が生成される
*の概念が無いと

char a ;    実体化
int a_point ; 実体化(アドレス長=intとする)
a_point = &a ; 実体化

例えばこう書くことになる


ポインタは関数内で宣言できる
その場合そのポインタの寿命は関数内に限定される


こんな感じの認識であってますか?

677 名前:デフォルトの名無しさん [2017/10/13(金) 12:21:34.93 ID:ZC5rLpvkM.net]
ポインタの寿命はプログラム内じゃないん?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<253KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef