【初心者歓迎】C/C++室 Ver.103【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
2018/07/01(日) 03:44:53.53ID:4MMF8cDN
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/
748デフォルトの名無しさん
垢版 |
2018/11/10(土) 20:11:09.68ID:2010ximS
変数じゃなくてもメンバはconstで修飾できるぞ。
2018/11/10(土) 20:16:00.60ID:zzsAm3V1
変数のconst,
文字列リテラルのconst,
メンバー関数のconst,
関数の仮引数のconst
750デフォルトの名無しさん
垢版 |
2018/11/10(土) 20:24:15.32ID:p/77GMIT
>>749
それは知らなかったが、その肝はなんなの? 結局はリードオンリーってディフェンスしたいって
ことではないの? 

物理的に書き込み可能ならリードオンリーにしてもディフェンスになんかならないでしょ。
ディフェンスするならライトプロテクト機能がどうしても必要だからね。
アクセスできないようにするには、Privateにして不可視にすればいい。これでディフェンスになる。
グローバルにさらしてなお且つリードオンリーにしておきたい変数がはたして必要だろうか?
 必要性はないと思う。
具体的にどんな意味があるのよ。
751デフォルトの名無しさん
垢版 |
2018/11/10(土) 20:25:53.82ID:2010ximS
知らないで難癖付けてたのかよ。
752デフォルトの名無しさん
垢版 |
2018/11/10(土) 20:26:38.74ID:p/77GMIT
>変数じゃなくてもメンバはconstで修飾できるぞ。

出来て何の意味があるのかということが知りたい。意味がないなら邪魔だな。
753デフォルトの名無しさん
垢版 |
2018/11/10(土) 20:30:17.34ID:2010ximS
高橋マナ著やさしいC++から始めたほうがよい。
2018/11/10(土) 20:37:38.39ID:GxjHn4EZ
メンバ関数プロトタイプの後ろをconstで修飾すれば、その関数の中ではthisがconstなポインタになり、
その関数の中ではconstではないメンバー関数は呼べなくなる。
つまり、constキャストを使わないと、thisを変更できなくなる。
2018/11/10(土) 20:38:58.59ID:AVLSNDa3
>>752
あなたの言葉を借りるとconstはコンパイル時に「ディフェンス」するので
ランタイムで「ディフェンス」するよりも少ないコストで問題を発見できる
これは意味があることだ
2018/11/10(土) 20:43:43.52ID:GxjHn4EZ
関数の仮引数の型をconstで修飾すると、対応する実引数は変更できなくなる。
ただし、その仮引数にconstではない引数を渡すことはできる。
const付ければ多分変更されない。変更しようとすると、多分コンパイルエラー。
2018/11/10(土) 20:46:16.75ID:GxjHn4EZ
struct X
{
void func1();
void func2() const;
};
func1からfunc2を呼び出せるが、その逆はできない。
2018/11/10(土) 20:51:32.82ID:GxjHn4EZ
void func(const int& n)
{
...
}

funcの内部では(constキャストしないと)nは変更できない。多分。裏技使えば出来るかも。
2018/11/10(土) 20:56:23.68ID:GxjHn4EZ
組み込みでもC++使うんか?
2018/11/10(土) 21:00:48.87ID:hLxIIZfE
>>739
> 自分の感想はTIのCCSコンパイラについてだけ。
マニュアルで .cinit section を検索しろよ
761デフォルトの名無しさん
垢版 |
2018/11/10(土) 21:06:11.15ID:p/77GMIT
>>754
 説得力がありそうな意見だが、残念ながら意味がよくわからないので一寸調べてみた。
2のことかな。

メリット
1.参照渡しに const 修飾子をつけることにより、引数の中身を書き換えないことを宣言することができる。
  ポインタ渡しに const 修飾子をつけることにより、引数の中身を書き換えないことを宣言することができる。
2.const オブジェクトを引数にすると、そのオブジェクトのなかで呼び出せるメソッドは const メンバ関数のみ。

1はたしかにメリットがあると言わざるを得ない。
2は使い方次第だな。自分の場合はわざわざそこまで面倒なことはしない。
762デフォルトの名無しさん
垢版 |
2018/11/10(土) 21:07:06.71ID:p/77GMIT
>>755
一理ある。
763デフォルトの名無しさん
垢版 |
2018/11/10(土) 21:11:56.84ID:p/77GMIT
>>759
自分も最近しったんだが、組み込みで使うとC++は非常に効果を発揮する。(らしい。あまりできてない、、、)
すくなくても、クラスやnamespaceを使えるだけでも大いに助かる。Cと滅茶苦茶相性がいい。
ごちゃ混ぜでもスパゲティでも何ら問題ない。
組み込みでは絶対にC++を使うべき。
764デフォルトの名無しさん
垢版 |
2018/11/10(土) 21:18:06.51ID:p/77GMIT
>マニュアルで .cinit section を検索しろよ
ありがと。検索してみます。
2018/11/10(土) 21:30:31.24ID:0TCzpeyH
>>752
お前、ほんとド素人なんだよな
しったか素人は単なる荒しと変わらんわ。 邪魔にしかならない
2018/11/10(土) 21:32:50.82ID:GxjHn4EZ
初心を忘れぬ初心者歓迎ってことで
2018/11/10(土) 21:35:12.51ID:D3ftxXru
>>746
君は何も知らずに妄想だけから判断して>>730の考えに至ったわけじゃん。>>714からの流れでね。

関数の引数を char* と const char * にしたときの違いは、
君が勘違いしている、ではなく、なにかを読んで知ろうともせず
自分だけの想像で決めつけているような「このポインタが定数(変更不可)かどうか」ではなく、
ポインタが差している char 値が変更不可かどうかなんだ。

で、
君の考えはおそらくここに書いてないものも含めて8割がた
間違ってるから誰にもそれを一々教えることは無理なんだよ。
だから本を読むとかして基本を学んで欲しい。
今の君は想像で英語に文句つけてるくせにアルファベットも知らない子供みたいな状態。
768デフォルトの名無しさん
垢版 |
2018/11/10(土) 21:35:33.57ID:p/77GMIT
>高橋マナ著やさしいC++から始めたほうがよい。

C++は使い始めたばかりでよくわからないが、多重人格的で昔のC++と最近のC++が混在している
気がする。C++は糞って言ってる人は昔のC++をみていて、C++は最高って言ってる人は最近追加
された仕様を見ていると思う。
だからC++は基礎からやると駄目な言語だね。基礎は飛ばしてしまったほうがいい。
追加された仕様部分が秀逸だね。
だからあくまでも自分の意見だが「やさしい、、、、」ってのは寧ろ難解で駄目なのが多い気がする。
特にC++の生みの親が書いたような本が最も駄目だと思う。
2018/11/10(土) 21:37:16.52ID:0TCzpeyH
ID:p/77GMIT

もうこいつの相手をするのはやめよう。 単なる荒しだわ。 ここで終わり
2018/11/10(土) 21:37:40.22ID:D3ftxXru
>>767
>君が勘違いしている、ではなく、なにかを読んで知ろうともせず
>自分だけの想像で決めつけているような

ここ表現が変か
何も調べてないんだから単なる妄想であって勘違いですらないということ。
771デフォルトの名無しさん
垢版 |
2018/11/10(土) 21:39:45.42ID:p/77GMIT
>>767
だれも最初は子供だからね。
視野が狭いのであって、思考がまちがっているんではないというところに気が付いてほしい。
だから視野が広がれば正しい結論にいたる。
そして結論は761
2018/11/10(土) 21:45:54.25ID:9vqEahoA
>>768
C++は近年追加された仕様の方が複雑怪奇で迷走しているという意見もあるし、勝手な思い込みで基礎を蔑ろにするのはやめた方がいい。
constの理解についても、組み込みのCをやった経験に基づく自分の経験と思い込みを当然のものとして他人の話を聞くから理解が進まないのでは?
RAMにおくかROMに置くかとかも本来はC言語としては未定義とか処理系依存な部分であって、組み込みにおける常識をベースにCの言語仕様を理解しようとするから齟齬が生まれるのだと思う。
2018/11/10(土) 21:48:12.38ID:bQHYOdt1
>>761でよかったのか
まあ腑に落ちたようでなにより
2018/11/10(土) 21:48:35.96ID:dq/THaAw
組み込みだってconst変数がRAMに置かれるなんて常識は無いよ。この人の思い込み。
775デフォルトの名無しさん
垢版 |
2018/11/10(土) 22:12:42.07ID:mjExs0JA
このスレにいるような低学歴知恵遅れは
引数だけでなくメソッドにもconstつけるべきというのすら分かってない
クラスの引数にconstつける意味を分かってなさそうだからな
2018/11/10(土) 23:08:29.94ID:yzCMB8/E
セクション配置の話なのにメソッドのconst関係ねーだろ
意味わかってないのはてめーだ、いつものことだが
777デフォルトの名無しさん
垢版 |
2018/11/10(土) 23:17:52.02ID:mjExs0JA
やっぱり低学歴知恵遅れはなにも分かってない
2018/11/11(日) 02:36:59.36ID:ARqR0CiK
bss セクションは、リンカの文書を見れば?

メモリ配置と、文法のconst は関係ない。
基本的に、言語の文法と実装は、関係ない

実装は、JavaScript の文法に関係ない、DOM とか

できる限り、const を使うべき!
使っても、マイナスにはならないから

たぶん、Effective 本にも書いてある
779デフォルトの名無しさん
垢版 |
2018/11/11(日) 05:11:06.80ID:mI2pOyKp
>組み込みだってconst変数がRAMに置かれるなんて常識は無いよ。この人の思い込み。
そのことを初心者にもわかるように詳しく説明してみてください。といっても解り過ぎている人には
初心者が何がわからないのかわからないとおもう。解らない人はどこまでもわからない。なので
質問を変えて差しあげます。

質問1.constは多用な機能がある。そしてその機能を実現するには最初の一回だけは書き換え
可能である必要があると思うが、もしconstをROMに配置してその機能をどう実現すればいいのだろうか?
 実現不可能だとおもう。
このことが正しいならconstは当然RAMに配置されるのが常識だろう。いかがだろうか?

質問2.もしconstが一度も書き換え可能である必要がないとすれば、constはROMに配置
されるべきだろう。だからconstは必ずROMに配置すべきだというのが常識となる。この考えは
どこがまちがっているだろうか?

質問3.質問1と質問2の前提はどちらが正しいのだろうか?
780デフォルトの名無しさん
垢版 |
2018/11/11(日) 05:52:29.65ID:mI2pOyKp
完璧な質問のつもりだったが、質問を書いてみて今初めて見落としている穴が分かった。
2018/11/11(日) 06:05:13.74ID:zHXRpmYL
質問して最後に分かるつまり
ケツの穴である
782デフォルトの名無しさん
垢版 |
2018/11/11(日) 09:46:34.66ID:mI2pOyKp
>>772
C++は低レベルの処理に向いているのだから当然のように処理系のハードとの接点が多い。
処理系依存の部分はC++でフォローできないというだけで、だからといって処理系を意識しないでいい
ということにはならない。C++を使う場合には処理系を強く意識する必要がある。

>できる限り、const を使うべき! 使っても、マイナスにはならないから

処理系を強く意識するなら、こういう結論にはならないと思う。constは意に反してRAMに配置され得る。
組み込み系においては、RAMを多用すればすぐにRAMがパンクする。
constはいくつかのメリットがあることは解ったが、無条件に使えばやはり有害になる。少なくとも自分が使った
限りでは滅茶滅茶有害だった。
では被害を少なくするにはどうすればよいか? それに答えてほしい。

static const char* s_A; // -> BSS section
static const char* s_B = "b";// -> Data section
static const char* const s_C = "c";// -> Data section
static const char s_D[] = "d";// -> Read only Data section
static char s_E[] = "e";// -> Data section
static char s_F[128]; // -> BSS section

const char* s_B = "b";// -> ここで嵌った。これは.bssに配置される。
2018/11/11(日) 10:28:56.96ID:R/5kDxSy
ID:mI2pOyKp = ID:p/77GMIT
784デフォルトの名無しさん
垢版 |
2018/11/11(日) 13:40:16.62ID:96wp+TZd
'\0' と L'\0' って違うんだな
2018/11/11(日) 13:56:09.62ID:D6x0hMat
すいません、C++でゲームやGUIアプリなどを開発したいのですが
メソッド抽出やクラス設計といったプログラム設計に関する書籍って
どんなものを読めばいいんでしょうか?おすすめとかありますか?
ググっても、プログラム設計の本があまり見つかりませんでした・・
デザインパターンに関するものはあったんですが
もうすこし初歩的な内容のものがあれば教えてくださいm(__)m
2018/11/11(日) 14:37:43.40ID:heRDhQmF
>>784
L'\0' はUnicodeだから、必ず2バイトなので、 0x0000
2018/11/11(日) 14:45:39.68ID:u4gHMHSK
>>786
ワイド文字の内訳は未定義で、 Unicode になるとは限らないし、その大きさも決まってない。
2 バイトになって欲しいなら L ではなく u を使うと UTF-16 になることは保証されるよ。
2018/11/11(日) 14:47:19.00ID:FGv1lmue
>>782
挙げられた例でconstの付加によりRAM使用量が増えている例が見られなくて
「マイナスにはならない」が正しいように見えるんだけど、何を見て有害だと言ってるの?
2018/11/11(日) 16:46:50.89ID:FyMTXkCl
>>782
> const char* s_B = "b";// -> ここで嵌った。これは.bssに配置される。

s_Bはconst宣言されてない只の変数だからいいとして
"b"がconstだけど.bssに配置されるってこと?
790デフォルトの名無しさん
垢版 |
2018/11/11(日) 17:54:46.45ID:96wp+TZd
>>785
他の言語で造ったことあるか?
それがまだでいきなりC/C++ならやめとけ
2018/11/11(日) 21:39:09.29ID:+3cDuFRf
>>785
The Craft of Text Editing
2018/11/11(日) 21:59:31.70ID:YkGULP39
それ、C++でもないただのCでEmacs風エディタ作るっていう古臭い本だろ。
しかも一般的な設計論みたいなものはほとんどなくてエディタの実装テクニックがメイン。
2018/11/11(日) 22:09:04.04ID:+3cDuFRf
本当に読んだ事があればそんな感想にならないと思う
2018/11/12(月) 01:54:44.09ID:Y5bf1y1v
>>793
普通はな、本を勧める状況ってな、
相手は読んだことがないのが当たり前なんだよ。

主題が違う本を挙げるからには、
どういう点で好ましいのかくらいは書いてくれ。
2018/11/12(月) 03:01:49.28ID:+lslfuGS
そういうのはお母さんに頼めよ
2018/11/12(月) 06:57:24.59ID:kRp5sQt8
使えねえコテだわ
2018/11/12(月) 14:29:20.92ID:AHq3PbYw
初心者です。
bool変数hogeの真偽で反対の代入をする場合につきまして、
int a, b;
if (hoge) { a=1; b=2; } else { a=2; a=1; }

int a=1, b=2;
if (! hoge) { a=2; a=1; }
はどちらのほうが好ましい書き方ですか?
完全に好みの問題ですか?
2018/11/12(月) 14:48:27.20ID:pBxTFjIu
訊くなら正確に書いてくれ
799デフォルトの名無しさん
垢版 |
2018/11/12(月) 15:37:05.52ID:D6ILV7Jx
>>797
偽(false)の時だけならif(!hoge){...}の方。
800デフォルトの名無しさん
垢版 |
2018/11/12(月) 15:38:56.82ID:Tf74ZWQr
新スレを作りました。利用してください。

0からの、超初心者C++相談室
https://mevius.5ch.net/test/read.cgi/tech/1542002113/

***********************************************************************

1 名前:デフォルトの名無しさん[] 投稿日:2018/11/12(月) 14:55:13.35 ID:Tf74ZWQr
何にも知らない0からの出発、超初心者のためのC++相談室

***********************************************************************
2018/11/12(月) 17:46:22.89ID:AHq3PbYw
>>798
すみません
>>799
ありがとうございます
>>800
超初心者用の専スレがあったんですね。ありがとうございます
802785
垢版 |
2018/11/12(月) 18:39:23.46ID:x/TsFEZq
>>791
ありがとうございました。読んでみます。
プログラミングの良書って絶版になること多い気がしますが気のせいですかね・・。
803デフォルトの名無しさん
垢版 |
2018/11/12(月) 18:44:42.38ID:D6ILV7Jx
>>801
そこまで初心者なら一回GP0触った方がいいかもね。

PG0がプログラミング研修に向いている理由
https://qiita.com/nakka_/items/16c99e3279c87a70fafc
804デフォルトの名無しさん
垢版 |
2018/11/12(月) 20:59:20.33ID:CbD+/v6g
int a=1;
int b=2;
if (!hoge) {
 const int c = a;
 a=b;
 b=c;
}

俺だったらこうかな。
805デフォルトの名無しさん
垢版 |
2018/11/13(火) 18:27:28.63ID:90McxFB4
>>796
+1
806デフォルトの名無しさん
垢版 |
2018/11/13(火) 18:30:06.08ID:90McxFB4
>>797
int a, b = 2 - !!hoge, 1 + !!hoge;
2018/11/13(火) 18:38:22.78ID:ZGzDar6q
ここは、初心者を歓迎するスレ
初心者を虐めてどうする
2018/11/13(火) 21:24:39.67ID:2zv/Jtnj
>>807
最近やたら気になるみたいだけど、なんで自分は初心者に回答してあげないの?
2018/11/13(火) 22:19:44.32ID:kE0CzrCg
>>797
多人数で開発する場合は、前者のほうが好まれると思います。
可読性が高いのでコードレビューしやすいですし、改修もしやすいです。
後者は、1行目と2行目の間で、aかbの値を変更する改修が入ってしまうと
2行目のif文に入らない場合に、望む結果が得られません。
プログラマになりたいとかでなければどっちでもいいと思いますが
難しい書き方をすると、時間経って読み返したときに、
自分でも何を書いたかわからなくなりますよw
2018/11/13(火) 23:35:32.38ID:q+gBL2L3
>>797
else を使わなくて済むのなら、そうしたほうがいい、とはよくききます
2018/11/14(水) 00:10:43.22ID:sDCxHRwn
聞いたことねえなあ
2018/11/14(水) 02:13:50.61ID:I7yQY6ax
>>797
状況によっても違ってくると思う。 一般的には前者だろうけど、
{ a=2; a=1; } が例外的な場合として特別扱いしてるってことを強調したい理由があるなら後者で書くこともあるかもしれん。
2018/11/14(水) 02:36:40.11ID:JMGKlnVy
いや、効率を考えたら断然最初の else を使う方では?
後者のやり方では hoge が偽の場合、無駄な代入をすることになる
もっともコンパイラが賢ければ無意味な代入を端折るコードを生成するかもしれんけど
2018/11/14(水) 02:38:54.17ID:JMGKlnVy
すまん自己レス
> もっともコンパイラが賢ければ無意味な代入を端折るコードを生成するかもしれんけど

これはムリだった。てことでやっぱり前者
2018/11/14(水) 05:51:53.25ID:AO05/l3R
>>814
clangで試したらきちんと最適化されたぞ
816デフォルトの名無しさん
垢版 |
2018/11/14(水) 11:29:46.12ID:Hh1ptiAj
設計者の意図が伝わりやすいのは前者
817デフォルトの名無しさん
垢版 |
2018/11/14(水) 11:45:30.11ID:ND9bKuyE
int a=1;
if(!hoge){
a=2;
}

のa=1は通常の代入じゃないからね。
これは基準値で初期化しんだからよ。

こっちのが効率は良いよ。
2018/11/14(水) 11:49:18.98ID:484vhzMZ
int a = hoge? 1 : 2;
はどう?
819デフォルトの名無しさん
垢版 |
2018/11/14(水) 12:07:57.04ID:XWwMTSMS
多分タイポでa,bの値を条件によって入れ替える処理だと思うぞ。
820デフォルトの名無しさん
垢版 |
2018/11/14(水) 12:08:42.29ID:zVp4oIsl
int a = 1 * (!hoge) + 2 * (!!hoge);
線型代数
2018/11/14(水) 12:58:55.38ID:4JKzq5B5
>>817
機械語に直したらどっちもmovでしょ
2018/11/14(水) 13:41:43.62ID:B+lK3N2V
>>815
どういう最適化?
初期化されても参照される前に代入が起こる可能性があるから
hoge の判定の後まで初期化を遅延させる、つまり実質 else を使ったのと
同じコードが生成されるということかな?
そこまで出来そうな気もしなかったのだけど
823デフォルトの名無しさん
垢版 |
2018/11/14(水) 15:05:08.52ID:sW4kyFkZ
初期値として意味があるなら後者でいい気はするが
なんか例が微妙というか、プログラムの流れがなんか不自然
824デフォルトの名無しさん
垢版 |
2018/11/14(水) 15:14:44.43ID:XWwMTSMS
だよね。
だからやっぱタイプミス(タイポ)で条件によってa,bを入れ替える/入れ替えないを切り替える処理と見た方が自然。
2018/11/14(水) 20:24:55.58ID:PBXirj6B
>>822
797の後者のコードがLLVM IR 2命令に最適化される
%2 = select i1 %0, i32 1, i32 2
%3 = select i1 %0, i32 2, i32 1
%0がhoge、%2がa、%3がbにあたる
2018/11/14(水) 21:42:49.91ID:1o5yT6ol
>>825
ありがとう。なるほど、すばらしい
これをまんまC/C++に書き戻すと

int a = hoge ? 1 : 2;
int b = hoge ? 2 : 1;

ということかな
でもこれだとhoge を2回チェックしてるので却って非効率な気もするけど
まぁ LLVM はまだ中間形式だから、これをターゲットコードに落とすところで
hoge の判定を一回で済ませるようにさらに最適化するのは簡単そうではあるね
2018/11/14(水) 21:44:23.61ID:1o5yT6ol
とは言え C/C++は効率ファーストな言語なんで、最適化を当てにして
ユルいコードでOK、てのも如何なものかという気はする
最適化は所詮、処理系依存だし

まぁ >>823 の言うように、その値で初期化することに強い意味があるなら
その書き方を優先する、そういうトレードオフがあることは認めるけど
2018/11/15(木) 08:33:27.40ID:4fKxVed7
そんな細かい最適化は困ってから気にすればいい
2018/11/15(木) 08:49:34.01ID:s3tKWUx8
後から見て意図がわかるならドッチでもいいや
2018/11/15(木) 09:03:11.75ID:Y+nNeoCF
hoge ? a = 1, b = 2 : a = 2, b = 1;
ができればな
2018/11/15(木) 09:06:57.93ID:1bc0l4Fz
>>830
カッコつけて試せ
2018/11/15(木) 09:08:20.15ID:Y+nNeoCF
カッコつけてもカッコ悪いからやめとくわ
2018/11/15(木) 16:41:41.66ID:APQKN+QS
>>829
もちろん原則論に過ぎないよ
あと、原則論と言えば「変数は定義時点で必ず初期化せよ」というのもあるわけで
初期化忘れを防ぐためにそういうコーディングルールを設けている所も多いはず
その場合は後者の方が望ましいことになる
初心者はむしろ効率より堅牢性を重視した方がいいかもね
834デフォルトの名無しさん
垢版 |
2018/11/15(木) 18:14:33.63ID:/yCJioVE
>>830-831
副作用でるやつ
835デフォルトの名無しさん
垢版 |
2018/11/15(木) 22:00:21.20ID:cIF0PQeg
inline void debug_pulse(int no){
#if(DEBUG == 1)
switch(mode){
case 0: pulse(A0); break;
case 1: pulse(A1); break;
case 2: pulse(C5); break;
case 3: pulse(F0); break;
}
#endif
}

1.この場合 debug_pulse(3);は pulse(F0)と同じになる。
2. #define DEBUG 0 にすると全て跡形もなく消える。
1,2は正しい?
2018/11/15(木) 22:04:26.81ID:OQAYkFCC
1.は正しい。
2.この世の全てが無くなるとは思えない。質問が不適切。
2018/11/15(木) 22:09:23.82ID:4a2YDbgY
DEBUG == 1のときコンパイル通らないぞ
2018/11/15(木) 22:24:43.20ID:OQAYkFCC
駄々しくなかった
2018/11/15(木) 22:52:52.91ID:TZnKsh0H
関数の外で適切な定義がされてれば通る
2018/11/15(木) 23:14:39.58ID:OQAYkFCC
こんな感じで私は馬鹿です。
841デフォルトの名無しさん
垢版 |
2018/11/16(金) 05:03:45.34ID:qDPFPFK+
>2.この世の全てが無くなるとは思えない。質問が不適切。
質問の意図は
inline void debug_pulse(int no){ }はコードを生成しない。これは正しいか?
である。
質問の理解が不適切。
2018/11/16(金) 07:42:29.36ID:PBHgKXBb
>>841
エラーになるのでコードは生成されません
2018/11/16(金) 08:49:40.86ID:U1UWmjZG
mode の出所は? A)no の typo B)別途関数の外に居るし
2018/11/16(金) 19:06:25.10ID:4cszXKPK
int mode;
void pulse(void);
int A0;
int A1;
int C5;
int F0;
845デフォルトの名無しさん
垢版 |
2018/11/17(土) 10:49:41.98ID:B4GISbTr
modeがどうかは質問の趣旨と関係ないのでどうでもいいが(modeがglobalとか適当に)

inline void debug_pulse(int no){
switch(mode){
case 0: pulse(A0); break;
case 1: pulse(A1); break;
case 2: pulse(C5); break;
case 3: pulse(F0); break;
}
}



inline void debug_pulse(int no){
}



にしかならないから

1.は「ならない」
2.は「消える」
846デフォルトの名無しさん
垢版 |
2018/11/17(土) 10:50:51.46ID:B4GISbTr
ああ 2. で消える条件は
debug_pulse() を呼んでる部分が無いことが前提だから

2. 「消える」「消えない」どっちとも言えない

だな
2018/11/17(土) 12:25:27.92ID:OvrLhogI
>>846
inlineなんで、消えるか消えないかはアドレス必要な操作をしてるかどうか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。