18/11/12 15:33:07.21 uNoTWhhe.net
まずC#を覚えます
3:デフォルトの名無しさん
18/11/12 15:41:29.72 D6ILV7Jx.net
>>1
乙
4:デフォルトの名無しさん
18/11/12 16:05:28.85 JkRQG90v.net
C99に準拠したCプログラムってC++コンパイラで完全にビルドできますか?
5:さまよえる蟻人間
18/11/12 16:09:07.07 Uo1L8t18.net
>>4
型キャストが必要な場合と、C++キーワードに引っかかるケースがあるから、コンパイルできるとは限らない。
6:さまよえる蟻人間
18/11/12 16:21:58.14 Uo1L8t18.net
例えば、classという名前の変数がある場合は、C++ではコンパイルできない。
void *型の変数にint *の値をキャストなしに代入しようとすると、C++ではコンパイルエラー。
7:デフォルトの名無しさん
18/11/12 16:35:33.39 D6ILV7Jx.net
>>4
C99モードにすればおk
$ gcc -Wall -std=c99 -lm round.c
8:デフォルトの名無しさん
18/11/13 08:18:22.77 0Ele5WZ8.net
>>5-6
ありがとうございます。
C99では未定義だがC++で定義・予約されている言葉なんかが引っ掛かってしまうんですね。
9:デフォルトの名無しさん
18/11/13 18:41:26.33 90McxFB4.net
extern "C" {}って書いてる?
10:デフォルトの名無しさん
18/11/13 21:54:10.86 RYrE2D9k.net
まずCから
Cも分かってないのにC++とかムリ
11:デフォルトの名無しさん
18/11/13 22:08:24.41 bZ0HXQ7X.net
C99頃から互換性も無いし、別言語だからそうでも無いけど、どっちかと言うとCのprintfに影響受けてる言語の方が多いね。
どっち先に覚えても良いけど、Cのprintfは押さえておいた方がいい。
(ただ、経験的にC++のオブジェクト指向を覚えるにはJavaかC#から入った方がいいので、挫折したらそっちを一旦勉強する事を勧める)
12:デフォルトの名無しさん
18/11/13 22:32:00.82 qjyppvvr.net
今の最新の規格ならだいぶ使いやすくなってるはず
とりあえず変数にはconstを付けれ
13:デフォルトの名無しさん
18/11/13 23:50:04.90 kE0CzrCg.net
C++とJavaのオブジェクト指向って、なにが違うのでしょうか?
14:さまよえる蟻人間
18/11/13 23:59:43.80 700gS9mA.net
>>13
C++は、new を付けたらポインタ型になるが、Javaはnewを付けたら参照型になる。
15:デフォルトの名無しさん
18/11/14 00:06:33.69 bV3/fRvw.net
>>14
JavaよりC++のほうが難しいといわれるのは、ポインタがあるからっていう意味合いが大きいんでしょうか?
16:さまよえる蟻人間
18/11/14 00:19:07.08 XVbpx9nj.net
>>15
C++のポインタは癌だ。どこにでもアクセスできてしまうし、メモリーリークが起きる恐れがある。安全ではない。
チェック付きの配列とスマートポインタを使えば、少しは安全になるが、完璧ではない。
17:さまよえる蟻人間
18/11/14 00:36:22.61 XVbpx9nj.net
まず、ポインタ変数の宣言が初心者殺し。
int* a, b;の場合、bはポインタではない。
関数ポインタはさらに文法が複雑すぎる。
関数ポインタ型の複雑さから逃れるには、typedefを使うとよい。
18:さまよえる蟻人間
18/11/14 01:24:53.28 XVbpx9nj.net
ポインタ型をtypedefしまくった環境がWindowsのWin32 APIだ。
intを大文字でINTと書く。intのポインタをLPINTと書く。unsigned intをUINTと書き、そのポインタをLPUINTと書く。
基本的な関数型は全てtypedefで定義済み。
これなら、ややこしいアスタリスク記号(*)に戸惑う必要はない。
19:さまよえる蟻人間
18/11/14 01:35:38.43 XVbpx9nj.net
型を大文字で書くと分かりやすいという意味で、Win32ではよく使うポインタ型を全て大文字で定義している。
char *にはLPSTRを、const char *にはLPCSTRを用意している。
20:デフォルトの名無しさん
18/11/14 03:03:41.18 aCPH/+gx.net
なんてことを昔の人は考えたが、当然スマートポインタのほうがより安全である
21:デフォルトの名無しさん
18/11/14 07:23:04.49 XWwMTSMS.net
>>15
>>14じゃ無いけど、個人的にはfriendクラスとかJavaには無いクラス同士の関係があったりするが最初はそれがどう言う関係か理解出来なかった。
Javaでオブジェクト指向に慣れた後理解出来た。
C++はそう言う独特のオブジェクト指向があるので、まずそこまで複雑じゃ無いオブジェクト指向言語で慣れる方がC++独特のオブジェクト指向の理解に繋がる。
22:デフォルトの名無しさん
18/11/14 11:35:25.78 zVp4oIsl.net
>>18
無駄に覚えることを増やす馬鹿言語
wsとかswとか_sとかいっぱいつけやがってシッチャカメッチャカ
23:デフォルトの名無しさん
18/11/14 11:36:41.07 zVp4oIsl.net
あとtypedefしてる型を型チェックのときに同一とみなすのが意味ない
せっかく型を別けてるのに
24:デフォルトの名無しさん
18/11/14 12:34:52.66 OvTvaibz.net
整数を定義するときって以下の3つだとどれがメモリ消費量とか実行速度の面で一番効率いいですか?
#define XXX (1234)
enum{ XXX = 1234};
constexpr int XXX = 1234;
25:デフォルトの名無しさん
18/11/15 08:07:09.42 HNIzCpqS.net
効率は実測が基本
26:デフォルトの名無しさん
18/11/15 12:16:37.45 lNkjj0jr.net
>>24
今時のコンパイラならどれも同じになるだろうけど、#defineはただの置き換えだから、実質直接数字に置き換える。
お馬鹿なコンパイラなら、これが一番速い。
(メモリ上のXXXに格納された1234をレジスタに読むのじゃ無く、レジスタに直で1234と書き込むので、メモリアクセス分は速い)
27:デフォルトの名無しさん
18/11/15 17:16:40.52 XHYJGLe7.net
constexprが候補に上がる時点で最新のコンパイラだと思われる
28:デフォルトの名無しさん
18/11/15 22:39:39.09 jenSGLjX.net
AIの力でコンパイラの性能を上げるって可能ですか?
29:デフォルトの名無しさん
18/11/16 09:32:03.61 37LYr8ZY.net
a = xxx;
a = yyy;
これは、二重定義になりますか?
30:29
18/11/16 09:41:00.05 37LYr8ZY.net
解決方法として
a = ("xxx" && "yyy");
を考えているのですが、これで良いでしょうか?
31:デフォルトの名無しさん
18/11/16 11:34:07.59 9iOixtPe.net
a[] = {xxx, yyy};
32:29
18/11/16 11:52:01.81 37LYr8ZY.net
>>31様
ありがとうございます!
33:デフォルトの名無しさん
18/11/20 23:59:39.03 GRv3bnvn.net
up
34:デフォルトの名無しさん
18/11/21 04:04:25.43 C09+uG2D.net
整数型とbool型を比較したり代入しようとしたときに警告かエラーを出す方法はありますか?
int i=5;
bool b=true;
i=b;
if(i==b)
if(i)
↑3行すべてでエラーなり警告なりを出してほしい
b=i;とif(b==i)は警告が出ます
環境はvs2017です
35:さまよえる蟻人間
18/11/22 03:29:53.66 by2crdt6.net
C/C++ではありえません。不可能です。
36:デフォルトの名無しさん
18/11/22 06:04:18.72 94o8kAxO.net
>>34
C++のboolのサイズはcharと同じだから
b=i: で警告になるのは整数型と論理型の変換というより単にサイズの小さい方に
代入しようとしたから警告になるてことだろうね
boolを使わずに Booleanクラスとかを自分で作れば型変換の許可/不許可も自在だけど
ま、やらんわな。そんな非効率なことは
37:デフォルトの名無しさん
18/11/24 11:20:27.36 pkYVxqhq.net
34です
遅くなりましたがありがとうございます
自作クラスを作ってまでエラー出したいものでもないので気にしないことにします
38:デフォルトの名無しさん
18/12/02 21:29:56.53 jrjT9DL9.net
MSがC++をCより勧める利点ってなんでしょう。
.NET関連で商売する為にC#などの利用を推奨するのは理解できるのですが
C++に拘りC99にすら対応しないのは何かよっぽどの理由があるのかなと思ってしまいます。
39:デフォルトの名無しさん
18/12/03 21:46:10.27 ZMLOrV5M.net
.net以前はMFCで商売してたからね。
その遺産を保守するのにC++が必要。
今でもそう言う会社相手に商売してる。
今はまだマシだけど、開発環境独占だと標準規格無視してた。
対応しなくても売れるのに、対応する必要は無いわな。
40:デフォルトの名無しさん
18/12/03 21:49:11.54 jYfXM2LM.net
御開帳です
URLリンク(connect.uh-oh.jp)
41:デフォルトの名無しさん
18/12/05 04:20:50.45 yf36y6mU.net
enum EN { yama,kawa}
をアクセスする規則がわかりません。 EN.yama の時もあれば 単にyamaの
時もあります。規則はどうなってるんでしょうか?
42:デフォルトの名無しさん
18/12/05 14:48:45.83 2sSegHBZ.net
namespace
43:デフォルトの名無しさん
18/12/05 23:17:47.17 P1XQw2I4.net
C++ならEN.yamaはあり得ないだろう
44:デフォルトの名無しさん
19/01/09 10:11:37.02 Gyfngzmc.net
新年記念up
45:デフォルトの名無しさん
19/01/11 18:31:10.60 TUR+WyZ1.net
win16からwin32への移行では役に立ったのかもしれない。
46:デフォルトの名無しさん
19/01/22 13:59:06.16 owIFG1wt.net
ゼロが流行っているのか?