0からの、超初心者C言語相談室

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2021/05/19(水) 01:34:14.03ID:OYngDuIu
何にも知らない0からの出発、超初心者のためのC言語相談室


C++は、こちら。

0からの、超初心者C++相談室
https://mevius.5ch.net/test/read.cgi/tech/1542002113/
2021/09/22(水) 12:48:28.66ID:jJoskI2c
>>47
やっぱそうだよね。

unsigned char ) ~ * << |= ( 1 &=
パーツを教えてやるよ。あとは自分で考えな。
49デフォルトの名無しさん
垢版 |
2021/09/22(水) 15:58:45.17ID:KzVGjGnL
そんなにたくさんパーツいらんやろ
2021/09/22(水) 16:10:13.68ID:jJoskI2c
>>49
ん?要らないのどれ?
51デフォルトの名無しさん
垢版 |
2021/09/22(水) 18:02:02.01ID:T3iMh7Ht
すみません、質問した立場でアレですが、|=と&=は要らないと思いますw
2021/09/22(水) 19:14:02.21ID:jJoskI2c
>>51
そうなのか。気になるから解決してたら結果教えて。
2021/09/22(水) 19:37:07.36ID:u8cZI69m
&、| なしか、興味あるな…
2021/09/23(木) 16:53:43.78ID:lZOUN/j/
漏れはヘタレだから、ビットフィールド使ってRAM上で更新してバイト単位でポートに書けば良いやなんて考えちゃう。
2021/09/23(木) 17:55:47.84ID:T47aXDe3
>>51
なぜそう思ったw
2021/09/23(木) 18:30:20.38ID:KLbp/g+2
上位ワード下位ワードを取り出すって意味がよくわからないのですが
int main()
{
int a=77778888;
}
とあったら7777が上位ワードって事でしょうか?
2021/09/23(木) 18:45:44.45ID:WyFAZLWz
>>56
それは10進だから、まずはウィンドウズのプログラマ電卓で16進数に直して。
58デフォルトの名無しさん
垢版 |
2021/09/23(木) 19:09:52.18ID:KLbp/g+2
>>57
4A2 CFC8
となりました。あんまりWORDって意味を分かってないんですが
アドレスとかの事じゃなくて符号なしshortの生の数値って意味と捉えていいんでしょうか?
2021/09/23(木) 19:29:25.98ID:h/5qm19B
>>58
コンピュータの中のデータはすべてビット(0か1)の集まり
int は32ビットだったり16ビットだったりするが、とにかく0や1がいくつもならべてある
だけだ。

表示するのに、0111100010111101 とかだと長くてわかりづらい。
それを手短にわかりやすく表現しようと 4ビットづつまとめて表示したのが16進数
2021/09/23(木) 20:15:26.01ID:KLbp/g+2
>>59
なるほど。でも取り出すって意味がよくわからないです
ROWORDとHIWORDって関数は何をしてるんでしょうか
2021/09/23(木) 20:25:44.38ID:WyFAZLWz
>>60
LOWORD/HIWORDは、ビットシフトと型キャストをしている。Visual C++なら定義を確認できるはずだ。
2021/09/23(木) 21:05:22.52ID:KLbp/g+2
>>>61
難しいのでまた型サイズやビット演算復習してからWIN32やってみます。。
解答ありがとうございました。
63デフォルトの名無しさん
垢版 |
2021/09/24(金) 08:02:57.39ID:eotJkoo2
#define BitOn(a,c,n) ( a[c] |= 1<<c )
#define BitOff(a,c,n) ( a[c] &= ~(1<<c) )
64デフォルトの名無しさん
垢版 |
2021/09/24(金) 08:06:02.22ID:eotJkoo2
間違えた
#define BitOn(a,c,n) ( a[c] |= 0x01<<n )
#define BitOff(a,c,n) ( a[c] &= ~(0x01<<n) )

よく使うよ
65デフォルトの名無しさん
垢版 |
2021/09/24(金) 08:12:56.68ID:eotJkoo2
8ビット=1バイト
1ワード=2バイト=16ビット

32ビットCPUなら、通常int は32ビットで2ワード。
66デフォルトの名無しさん
垢版 |
2021/09/24(金) 14:39:54.44ID:6iUyOY+3
CPUがBEかLEか判定するのに使うマクロを
#defineで描くとどんなのがありますか
2021/09/24(金) 15:04:20.65ID:hNucDJal
>>66
完全に仕様の範囲内かつ人が一切のヒントを与えずに結果が定数式になる形で自動判定するのはたぶん無理だと思う。
68デフォルトの名無しさん
垢版 |
2021/09/24(金) 15:43:32.44ID:zyC2bCW7
#define LE ( (1&0x00000001)!=0)?true:false)
#define BE ( (1&0x01000000)!=0)?true:false)
2021/09/24(金) 15:47:22.20ID:U2st4CQ0
>>66
そんなこと考えるより環境のエンディアンに依存しないコードの書き方を学んだほうが良い。
70デフォルトの名無しさん
垢版 |
2021/09/24(金) 15:55:16.30ID:6iUyOY+3
htonsですか?ωωω
2021/09/24(金) 21:07:09.60ID:naX2jA4f
?true:false
って、意味あるの?
72デフォルトの名無しさん
垢版 |
2021/09/24(金) 22:00:46.33ID:eotJkoo2
意味ないよ
2021/09/24(金) 22:25:06.12ID:Dq17+3pv
gcc拡張なら
#define LE ({ int a = 1; ((const char *)&a)[0]; })
うごくかどうかはしらん
74デフォルトの名無しさん
垢版 |
2021/09/25(土) 11:13:09.39ID:lBxoEpbF
!=0 って意味あるの?
2021/09/25(土) 11:44:02.46ID:ToKIzbmV
>>74
有るよ。
2021/09/26(日) 21:10:08.57ID:0u8JLN98
!!って意味あるの?
2021/09/27(月) 00:30:15.47ID:qCKTTnQF
意味なくもないよ。
2021/09/27(月) 01:12:22.69ID:lw6R4pVu
!!は静的解析やコンパイラの警告黙らせる時に使える場合もあるよ
79デフォルトの名無しさん
垢版 |
2021/10/25(月) 12:19:02.96ID:hesMamgg
char a[3]とした場合 aとa[0]は同じ←分かる
struct A a[3]とした場合 aとa[0]は違うんか?
2021/10/25(月) 12:33:40.14ID:Rm/sO20O
>>79
aが配列でa[0]はその先頭要素。これらは同じじゃないよ。
この関係はchar a[3]でもstruct A a[3]でも同じだけど。
81デフォルトの名無しさん
垢版 |
2021/10/25(月) 12:37:22.98ID:vmRZrQEp
同じじゃない
2021/10/25(月) 13:34:18.40ID:dRHq7DJG
「*a と a[0] は同じ」あるいは「a と &a[0] は同じ」と言いたかったのかな?

a の型はあくまで配列型、つまりこの場合は char[3] という型を持つ。
ただし配列が式中に現れた場合には配列の先頭要素を指すポインタに型変換するという規則によって
a と書いたら型 char* の値として解釈される。
先頭要素を指していることになるので a==&a[0] が満たされる。

で、この a[0] という表記もクセモノで、定義上はポインタ演算の構文糖であるという扱いになっている。
a[0] とは *(a+0) のこと。

&a[0] は &*(a+0) と同じということになるんだが、
演算子 & のオペランドが * の適用結果であるときはどちらの適用も無かったことになるというルールがあるので
&*(a+0) から &* は消去されて a+0 が残り、 0 を足しても結果は変わらないからこれも消去すると a が残る。
故に &a[0] == a
2021/10/26(火) 03:12:03.00ID:7iLVX7OB
VisualStudioでWin32APIの入門したいんですが
どのプロジェクトテンプレートを使えば良いのでしょうか?
84デフォルトの名無しさん
垢版 |
2021/10/26(火) 15:39:42.99ID:4xSLwudN
Console Application
2021/11/10(水) 17:51:26.04ID:TeMjyUmY
if elseから学びたいのですが、余計な習っていない文がついたサイトばかり出てきます。
どこを見ればいいのでしょうか
2021/11/10(水) 19:04:16.39ID:TeMjyUmY
この際、本でもいいです。買います。
2021/11/10(水) 19:05:31.96ID:Ibdkkh+M
普通にリファレンスを読めば?
2021/11/10(水) 19:45:30.62ID:TeMjyUmY
出来が悪すぎて
2021/11/10(水) 19:50:39.71ID:Ibdkkh+M
おむつ? おつむ?
2021/11/11(木) 18:53:34.61ID:N0+2xiNh
今、リファレンスなんてまともなの売ってない
頼んでもいない文が山盛りついていて、一からやりたい奴は苦労している
とほほのhtmlみたいなのは売ってないんだよ
2021/11/11(木) 18:54:29.97ID:N0+2xiNh
つまりリファレンス足り得てない本ばっか
いま、プログラムを始めるのは独学では不可能と言ってもいい
2021/11/11(木) 18:57:09.08ID:N0+2xiNh
ちなみにオクにも出なくなったので手に入らない
2021/11/11(木) 18:58:20.42ID:N0+2xiNh
分かりづらい言い方しなければ、今はif elseから始める本は売ってない
2021/11/11(木) 19:02:41.41ID:CgY0hHY1
紙のリファレンスを読むという発想で生き残れるとは思えない。そこはもうデジタルファイルかウェブだよ。
2021/11/11(木) 19:07:22.97ID:CgY0hHY1
ほれ
https://cpprefjp.github.io/
https://en.cppreference.com/w/Cppreference:Archives
2021/11/11(木) 19:16:03.47ID:CgY0hHY1
君等の政府を見てみよ。教科書すらデジタル化できない。日本語入力の標準化すらままならない。紙ベース、電話ベースの考えなんかデジタル化で吹っ飛ぶ時代なんだ。
2021/11/11(木) 19:17:19.43ID:N0+2xiNh
>>95
これをどう初心者が読むんだ???読めないよ
基本的な構文はこうします、ああします、がなにもない
2021/11/11(木) 19:24:27.07ID:CgY0hHY1
>>97
残念だが、C言語はC++に飲み込まれたんだ。だから今C言語のみを参照するのは時代遅れ。目次からC言語の部分を参照:
https://cpprefjp.github.io/reference.html#clib-facilities
2021/11/11(木) 19:26:45.46ID:N0+2xiNh
簡素な実例を使って一個づつ説明しないんじゃ、初心者は誰も読めん
2021/11/11(木) 19:27:19.47ID:CgY0hHY1
たとえば、C言語のprintf関数を見たいのであればC++のstd::printfを参照しないといけない。
2021/11/11(木) 19:32:26.99ID:N0+2xiNh
elseをさもなくば、とか訳すのな、それは合ってる
しかし
n>10とかifに入ってたのなら初心者には、さもなくばではなく
10より小さければ、という意味になります。と書かんといかん。

なんだかねえ、わざとやってんのか
全てを伝えづともそれくらい書かないとダメだろと言いたい
2021/11/12(金) 00:56:45.47ID:r8IM8kKp
>>98
そんなことはない。
C 由来の関数は C++ の規格では C の規格を参照していて、詳細は C の規格を見ないと書いてない。
C と C++ は付かず離れず平行して存続すると D&E でも言及されている。

だいたい C のほとんどの関数はそのまま使うには C++ では行儀が悪いことが多いだろ。
互換性の都合で仕方なく入ってるだけで、 C++ に取り込みたくなんてないと思う。
2021/11/12(金) 01:19:39.87ID:r8IM8kKp
入門書というのは必ずしも簡単ではないということは知っておいて欲しい。
その分野でまず必要な知識を書いてあるのが入門書というもので、専門書の一種には違いないわけで。
ハードルを下げようと思えばいくらでも下げられるし、
実際に絵本に毛の生えたような説明の仕方をしているものもあるのだけれど、
きちんとした知識にするにはそれなりに難解な部分だって最終的には避けられない。

入門書なのに難しすぎる! と思うこともあるかもしれないけど、実際にそれは入門に必要なんだってば。
2021/11/12(金) 18:39:10.54ID:Ln6Hv7ms
必要ない
2021/11/12(金) 18:39:46.26ID:Ln6Hv7ms
そんな難解な教え方している専門学校ですらどこにもない
2021/11/12(金) 19:13:06.89ID:BtQklgip
アスキーとかナツメとか技術評論社あたりを当たると入門書が見つかると思うぜ。
2021/11/12(金) 19:24:06.67ID:Ln6Hv7ms
売ってない
実在しない
どれだ
2021/11/12(金) 19:29:27.55ID:Ln6Hv7ms
害虫がまた初心者向けに少しでもなるようなページを検索結果から消しているな
2021/11/12(金) 19:35:48.17ID:Ln6Hv7ms
そんなに早死にしたいのかねえ
2021/11/26(金) 12:10:38.20ID:ncT7Zn6W
>>38
秋月のPIC用c使ってるけどこれ規格準拠する気更々ないよな、cっぽいナニカ
まあアマチュア向けで気にすることも無いと思うけど

するとPCスマホ組み込みサポート網羅すべく頑張ってるc規格が可哀想に思えてくる…
2021/11/28(日) 00:02:18.62ID:A21vXR4U
スタック数段のマイナーマイコンcだと関数スコープから呼べない標準関数があったりしたな
何段消費するか明示して欲しい

まさかテストケースをグローバルで書いてるわけないよな
2021/11/28(日) 00:41:12.56ID:1ODb51AX
徹底的に呼び出し避けたマクロライブラリも挙動不審になりがちだしあきらめよう
2023/06/11(日) 23:42:34.62ID:NEZaQnIG
>>66
#defineでは書けなかった
でもif文で処理を分ければ最適化で通らない処理とif文の処理は削除される
int a=1;
if((char)a==0)
{
;
}
else
{
;
}
こんな感じ
2023/06/12(月) 04:26:28.49ID:wqSZy/1p
間違えた
int a=1;
if(*((char *)&a)==0)
{
;
}
else
{
;
}
こんな感じ
2023/09/21(木) 22:09:39.70ID:6guGpWia
ほんまにかいな
■ このスレッドは過去ログ倉庫に格納されています