何にも知らない0からの出発、超初心者のためのC言語相談室
C++は、こちら。
0からの、超初心者C++相談室
https://mevius.5ch.net/test/read.cgi/tech/1542002113/
探検
0からの、超初心者C言語相談室
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2021/05/19(水) 01:34:14.03ID:OYngDuIu2021/09/15(水) 10:28:04.04ID:JucPjPcF
39デフォルトの名無しさん
2021/09/17(金) 20:49:49.30ID:inv44Tua ラズパイ pico \500
40デフォルトの名無しさん
2021/09/18(土) 08:22:38.19ID:bA/qQPAi STM32
2021/09/22(水) 02:00:31.84ID:T3iMh7Ht
char p[]="12345";
char *p="12345";
const char *p="12345";
先生、この違いをおしえてください。
char *p="12345";
const char *p="12345";
先生、この違いをおしえてください。
42はちみつ餃子 ◆8X2XSCHEME
2021/09/22(水) 04:32:30.60ID:1hd+XsHu >>41
char p[]="12345"; は
char p[6]; としたのと同じように領域が確保されてその内容が "12345" で初期化される。
たとえば p[2]=6; といったように内容を書き換えていい。
char *p="12345"; は
どこかの領域に "12345" という内容の文字列が存在して
p はそれを「指す」という状態。
文字列リテラルは書き換えてはいけない (書き換えたらその結果がどうなるかは保証されない)
というルールなので p[2]=6; というように書き換えるのは (型システム的に禁止されないにもかかわらず!) やるべきではない。
三つの例の内でこれが一番クソな仕様。
(余談だが現在の C++ では文字列リテラルは const 付きなので const を剥がして変数に代入することは出来ないように型システム的に保護されている)
const char *p="12345"; は char *p="12345"; と理屈は同じだが、
p が指している領域を書き換えることは (型システム的に) 出来ない。
char p[]="12345"; は
char p[6]; としたのと同じように領域が確保されてその内容が "12345" で初期化される。
たとえば p[2]=6; といったように内容を書き換えていい。
char *p="12345"; は
どこかの領域に "12345" という内容の文字列が存在して
p はそれを「指す」という状態。
文字列リテラルは書き換えてはいけない (書き換えたらその結果がどうなるかは保証されない)
というルールなので p[2]=6; というように書き換えるのは (型システム的に禁止されないにもかかわらず!) やるべきではない。
三つの例の内でこれが一番クソな仕様。
(余談だが現在の C++ では文字列リテラルは const 付きなので const を剥がして変数に代入することは出来ないように型システム的に保護されている)
const char *p="12345"; は char *p="12345"; と理屈は同じだが、
p が指している領域を書き換えることは (型システム的に) 出来ない。
2021/09/22(水) 10:30:17.08ID:T3iMh7Ht
ロボット制御に使いたいんですが、
アドレスaのchar領域cのnビット目(0-7)をon/offするマクロはどう書いたらいいですか?
関数ではなくマクロにしたいです。
#define BitOn(a,c,n) ???????
#define BitOff(a,c,n) ???????
アドレスaのchar領域cのnビット目(0-7)をon/offするマクロはどう書いたらいいですか?
関数ではなくマクロにしたいです。
#define BitOn(a,c,n) ???????
#define BitOff(a,c,n) ???????
2021/09/22(水) 10:51:34.30ID:jJoskI2c
45デフォルトの名無しさん
2021/09/22(水) 12:09:08.97ID:T3iMh7Ht >>44
ad1バイトのcharです
ad1バイトのcharです
46デフォルトの名無しさん
2021/09/22(水) 12:10:01.22ID:T3iMh7Ht aで指定される1バイトのcharです
47デフォルトの名無しさん
2021/09/22(水) 12:37:28.88ID:T3iMh7Ht 1バイト限定にすればcなしでもいいですね。
2021/09/22(水) 12:48:28.66ID:jJoskI2c
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
なぜそう思ったw
2021/09/23(木) 18:30:20.38ID:KLbp/g+2
上位ワード下位ワードを取り出すって意味がよくわからないのですが
int main()
{
int a=77778888;
}
とあったら7777が上位ワードって事でしょうか?
int main()
{
int a=77778888;
}
とあったら7777が上位ワードって事でしょうか?
58デフォルトの名無しさん
2021/09/23(木) 19:09:52.18ID:KLbp/g+22021/09/23(木) 19:29:25.98ID:h/5qm19B
>>58
コンピュータの中のデータはすべてビット(0か1)の集まり
int は32ビットだったり16ビットだったりするが、とにかく0や1がいくつもならべてある
だけだ。
表示するのに、0111100010111101 とかだと長くてわかりづらい。
それを手短にわかりやすく表現しようと 4ビットづつまとめて表示したのが16進数
コンピュータの中のデータはすべてビット(0か1)の集まり
int は32ビットだったり16ビットだったりするが、とにかく0や1がいくつもならべてある
だけだ。
表示するのに、0111100010111101 とかだと長くてわかりづらい。
それを手短にわかりやすく表現しようと 4ビットづつまとめて表示したのが16進数
2021/09/23(木) 20:15:26.01ID:KLbp/g+2
61蟻人間 ◆T6xkBnTXz7B0
2021/09/23(木) 20:25:44.38ID:WyFAZLWz >>60
LOWORD/HIWORDは、ビットシフトと型キャストをしている。Visual C++なら定義を確認できるはずだ。
LOWORD/HIWORDは、ビットシフトと型キャストをしている。Visual C++なら定義を確認できるはずだ。
2021/09/23(木) 21:05:22.52ID:KLbp/g+2
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) )
#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) )
よく使うよ
#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ワード。
1ワード=2バイト=16ビット
32ビットCPUなら、通常int は32ビットで2ワード。
66デフォルトの名無しさん
2021/09/24(金) 14:39:54.44ID:6iUyOY+3 CPUがBEかLEか判定するのに使うマクロを
#defineで描くとどんなのがありますか
#defineで描くとどんなのがありますか
67はちみつ餃子 ◆8X2XSCHEME
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)
#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]; })
うごくかどうかはしらん
#define LE ({ int a = 1; ((const char *)&a)[0]; })
うごくかどうかはしらん
74デフォルトの名無しさん
2021/09/25(土) 11:13:09.39ID:lBxoEpbF !=0 って意味あるの?
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]は違うんか?
struct A a[3]とした場合 aとa[0]は違うんか?
2021/10/25(月) 12:33:40.14ID:Rm/sO20O
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
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
この際、本でもいいです。買います。
87蟻人間 ◆T6xkBnTXz7B0
2021/11/10(水) 19:05:31.96ID:Ibdkkh+M 普通にリファレンスを読めば?
2021/11/10(水) 19:45:30.62ID:TeMjyUmY
出来が悪すぎて
89蟻人間 ◆T6xkBnTXz7B0
2021/11/10(水) 19:50:39.71ID:Ibdkkh+M おむつ? おつむ?
2021/11/11(木) 18:53:34.61ID:N0+2xiNh
今、リファレンスなんてまともなの売ってない
頼んでもいない文が山盛りついていて、一からやりたい奴は苦労している
とほほのhtmlみたいなのは売ってないんだよ
頼んでもいない文が山盛りついていて、一からやりたい奴は苦労している
とほほの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から始める本は売ってない
94蟻人間 ◆T6xkBnTXz7B0
2021/11/11(木) 19:02:41.41ID:CgY0hHY1 紙のリファレンスを読むという発想で生き残れるとは思えない。そこはもうデジタルファイルかウェブだよ。
95蟻人間 ◆T6xkBnTXz7B0
2021/11/11(木) 19:07:22.97ID:CgY0hHY196蟻人間 ◆T6xkBnTXz7B0
2021/11/11(木) 19:16:03.47ID:CgY0hHY1 君等の政府を見てみよ。教科書すらデジタル化できない。日本語入力の標準化すらままならない。紙ベース、電話ベースの考えなんかデジタル化で吹っ飛ぶ時代なんだ。
2021/11/11(木) 19:17:19.43ID:N0+2xiNh
98蟻人間 ◆T6xkBnTXz7B0
2021/11/11(木) 19:24:27.07ID:CgY0hHY1 >>97
残念だが、C言語はC++に飲み込まれたんだ。だから今C言語のみを参照するのは時代遅れ。目次からC言語の部分を参照:
https://cpprefjp.github.io/reference.html#clib-facilities
残念だが、C言語はC++に飲み込まれたんだ。だから今C言語のみを参照するのは時代遅れ。目次からC言語の部分を参照:
https://cpprefjp.github.io/reference.html#clib-facilities
2021/11/11(木) 19:26:45.46ID:N0+2xiNh
簡素な実例を使って一個づつ説明しないんじゃ、初心者は誰も読めん
100蟻人間 ◆T6xkBnTXz7B0
2021/11/11(木) 19:27:19.47ID:CgY0hHY1 たとえば、C言語のprintf関数を見たいのであればC++のstd::printfを参照しないといけない。
101デフォルトの名無しさん
2021/11/11(木) 19:32:26.99ID:N0+2xiNh elseをさもなくば、とか訳すのな、それは合ってる
しかし
n>10とかifに入ってたのなら初心者には、さもなくばではなく
10より小さければ、という意味になります。と書かんといかん。
なんだかねえ、わざとやってんのか
全てを伝えづともそれくらい書かないとダメだろと言いたい
しかし
n>10とかifに入ってたのなら初心者には、さもなくばではなく
10より小さければ、という意味になります。と書かんといかん。
なんだかねえ、わざとやってんのか
全てを伝えづともそれくらい書かないとダメだろと言いたい
102はちみつ餃子 ◆8X2XSCHEME
2021/11/12(金) 00:56:45.47ID:r8IM8kKp >>98
そんなことはない。
C 由来の関数は C++ の規格では C の規格を参照していて、詳細は C の規格を見ないと書いてない。
C と C++ は付かず離れず平行して存続すると D&E でも言及されている。
だいたい C のほとんどの関数はそのまま使うには C++ では行儀が悪いことが多いだろ。
互換性の都合で仕方なく入ってるだけで、 C++ に取り込みたくなんてないと思う。
そんなことはない。
C 由来の関数は C++ の規格では C の規格を参照していて、詳細は C の規格を見ないと書いてない。
C と C++ は付かず離れず平行して存続すると D&E でも言及されている。
だいたい C のほとんどの関数はそのまま使うには C++ では行儀が悪いことが多いだろ。
互換性の都合で仕方なく入ってるだけで、 C++ に取り込みたくなんてないと思う。
103はちみつ餃子 ◆8X2XSCHEME
2021/11/12(金) 01:19:39.87ID:r8IM8kKp 入門書というのは必ずしも簡単ではないということは知っておいて欲しい。
その分野でまず必要な知識を書いてあるのが入門書というもので、専門書の一種には違いないわけで。
ハードルを下げようと思えばいくらでも下げられるし、
実際に絵本に毛の生えたような説明の仕方をしているものもあるのだけれど、
きちんとした知識にするにはそれなりに難解な部分だって最終的には避けられない。
入門書なのに難しすぎる! と思うこともあるかもしれないけど、実際にそれは入門に必要なんだってば。
その分野でまず必要な知識を書いてあるのが入門書というもので、専門書の一種には違いないわけで。
ハードルを下げようと思えばいくらでも下げられるし、
実際に絵本に毛の生えたような説明の仕方をしているものもあるのだけれど、
きちんとした知識にするにはそれなりに難解な部分だって最終的には避けられない。
入門書なのに難しすぎる! と思うこともあるかもしれないけど、実際にそれは入門に必要なんだってば。
104デフォルトの名無しさん
2021/11/12(金) 18:39:10.54ID:Ln6Hv7ms 必要ない
105デフォルトの名無しさん
2021/11/12(金) 18:39:46.26ID:Ln6Hv7ms そんな難解な教え方している専門学校ですらどこにもない
106蟻人間 ◆T6xkBnTXz7B0
2021/11/12(金) 19:13:06.89ID:BtQklgip アスキーとかナツメとか技術評論社あたりを当たると入門書が見つかると思うぜ。
107デフォルトの名無しさん
2021/11/12(金) 19:24:06.67ID:Ln6Hv7ms 売ってない
実在しない
どれだ
実在しない
どれだ
108デフォルトの名無しさん
2021/11/12(金) 19:29:27.55ID:Ln6Hv7ms 害虫がまた初心者向けに少しでもなるようなページを検索結果から消しているな
109デフォルトの名無しさん
2021/11/12(金) 19:35:48.17ID:Ln6Hv7ms そんなに早死にしたいのかねえ
110デフォルトの名無しさん
2021/11/26(金) 12:10:38.20ID:ncT7Zn6W >>38
秋月のPIC用c使ってるけどこれ規格準拠する気更々ないよな、cっぽいナニカ
まあアマチュア向けで気にすることも無いと思うけど
するとPCスマホ組み込みサポート網羅すべく頑張ってるc規格が可哀想に思えてくる…
秋月のPIC用c使ってるけどこれ規格準拠する気更々ないよな、cっぽいナニカ
まあアマチュア向けで気にすることも無いと思うけど
するとPCスマホ組み込みサポート網羅すべく頑張ってるc規格が可哀想に思えてくる…
111デフォルトの名無しさん
2021/11/28(日) 00:02:18.62ID:A21vXR4U スタック数段のマイナーマイコンcだと関数スコープから呼べない標準関数があったりしたな
何段消費するか明示して欲しい
まさかテストケースをグローバルで書いてるわけないよな
何段消費するか明示して欲しい
まさかテストケースをグローバルで書いてるわけないよな
112デフォルトの名無しさん
2021/11/28(日) 00:41:12.56ID:1ODb51AX 徹底的に呼び出し避けたマクロライブラリも挙動不審になりがちだしあきらめよう
113デフォルトの名無しさん
2023/06/11(日) 23:42:34.62ID:NEZaQnIG >>66
#defineでは書けなかった
でもif文で処理を分ければ最適化で通らない処理とif文の処理は削除される
int a=1;
if((char)a==0)
{
;
}
else
{
;
}
こんな感じ
#defineでは書けなかった
でもif文で処理を分ければ最適化で通らない処理とif文の処理は削除される
int a=1;
if((char)a==0)
{
;
}
else
{
;
}
こんな感じ
114デフォルトの名無しさん
2023/06/12(月) 04:26:28.49ID:wqSZy/1p 間違えた
int a=1;
if(*((char *)&a)==0)
{
;
}
else
{
;
}
こんな感じ
int a=1;
if(*((char *)&a)==0)
{
;
}
else
{
;
}
こんな感じ
115デフォルトの名無しさん
2023/09/21(木) 22:09:39.70ID:6guGpWia ほんまにかいな
■ このスレッドは過去ログ倉庫に格納されています
