!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
※前スレ
C言語なら俺に聞け 162
https://mevius.5ch.net/test/read.cgi/tech/1698653580/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 163
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 7bba-Lem2)
2024/07/16(火) 22:43:54.18ID:ZrsCjURC0293デフォルトの名無しさん (ワッチョイ 0b02-xPbt)
2024/11/01(金) 06:24:42.85ID:+lXxXu7p0 気休めじゃなくて気疲れの間違いだろ
長さやsignednessでわけわからん変換しやがるバグの根源と言ってもいい
長さやsignednessでわけわからん変換しやがるバグの根源と言ってもいい
294デフォルトの名無しさん (ワッチョイ 8b63-IjZm)
2024/11/01(金) 11:11:58.05ID:YgeQjLzz0 訳が理解できるようになるまで、お前は使用禁止
295デフォルトの名無しさん (ワッチョイ 622d-CyeO)
2024/11/03(日) 13:27:09.33ID:N1lOck0q0 https://togetter.com/li/1471386
こんな事本当にあるのか?
こんな事本当にあるのか?
296デフォルトの名無しさん (ワッチョイ f6b7-UxC2)
2024/11/03(日) 13:36:34.35ID:e8fWHn4Q0 もともとバグってたのを対処療法で回避しただけじゃねーの?
そんな驚愕するほどのこととは思わんな
スペースは文字列に加えるってことだろ
そんな驚愕するほどのこととは思わんな
スペースは文字列に加えるってことだろ
297デフォルトの名無しさん (ワッチョイ 5e63-kEEx)
2024/11/03(日) 13:45:35.99ID:WzNRcFfL0 ちゃんとソースを公開すればみんなで治してくれるよ
298デフォルトの名無しさん (アウアウエー Sada-GGiU)
2024/11/03(日) 16:06:15.80ID:XxnHrPnRa バイバイおさるさん
299デフォルトの名無しさん (ワッチョイ 3679-NO1F)
2024/11/03(日) 17:27:36.06ID:4RaSizfZ0 char []s = "うんこ"
s[20] = 0; // どっか判り難いとこにこんなのが紛れてる
回答「(sに)もっとスペースを追加して!」
s[20] = 0; // どっか判り難いとこにこんなのが紛れてる
回答「(sに)もっとスペースを追加して!」
300デフォルトの名無しさん (ワッチョイ 5e63-kEEx)
2024/11/03(日) 17:39:48.03ID:WzNRcFfL0 どこか知らない国で "うんこ" が40バイトくらいある所があったりして
301はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-JeGG)
2024/11/03(日) 19:33:15.95ID:/vDzNoeA0 業務だとヨソの担当のモジュールに口出しするのがめんどいから対処療法で握りつぶすみたいなことはあるのかもしれん。
s("※んこ"の値)は読み取り専用になるんじゃないかな
処理系によるかもしれないけど
処理系によるかもしれないけど
303デフォルトの名無しさん (ワッチョイ 3679-NO1F)
2024/11/04(月) 01:39:12.77ID:rgFUj3k30 >「ここにスペースを入れてみて」「もっと沢山、もっともっと」
この辺りコピペ怪文書にしか思えないんだが
境界チェックしない言語ならありふれたバグだし、元文書はちんぽとかだったんじゃないだろうか
この辺りコピペ怪文書にしか思えないんだが
境界チェックしない言語ならありふれたバグだし、元文書はちんぽとかだったんじゃないだろうか
304デフォルトの名無しさん (ササクッテロラ Sp79-P7MY)
2024/11/04(月) 13:45:59.93ID:UGhFqLBmp どうせメモリーリークだろうな
データ位置を変えると現象が変わるなんて典型的だろ
データ位置を変えると現象が変わるなんて典型的だろ
>>302
誤りでした
誤りでした
306デフォルトの名無しさん (ワッチョイ 5e63-kEEx)
2024/11/04(月) 14:02:09.24ID:SHEOgeyw0 パンパース当てるのが正しい
307デフォルトの名無しさん (ワッチョイ 3679-NO1F)
2024/11/04(月) 20:44:45.70ID:rgFUj3k30 おむつってあんま進化してないよな
吸収率だとか漏れだとかそんなのは上がってるだろうが、基本的な機能は変わらない
介護業界でも排泄介助っていう高齢者の汚物処理って割と大変な部類だと思うんだが
そろそろおもつ革命を起こさないと業界崩壊するんじゃないの
プログラミングでなんとかできませんかね
吸収率だとか漏れだとかそんなのは上がってるだろうが、基本的な機能は変わらない
介護業界でも排泄介助っていう高齢者の汚物処理って割と大変な部類だと思うんだが
そろそろおもつ革命を起こさないと業界崩壊するんじゃないの
プログラミングでなんとかできませんかね
308デフォルトの名無しさん (ワッチョイ 3679-NO1F)
2024/11/04(月) 20:51:48.25ID:rgFUj3k30 高齢者に限らず若い子でもうんこ漏らす時は漏らすし、そういう緊急時にも安心できるぐらいのものがそろそろ欲しいな
紙ベースで吸収率だとかで脳が退化してるおむつメーカーではおむつ革命はとても期待できないだろう
紙ベースで吸収率だとかで脳が退化してるおむつメーカーではおむつ革命はとても期待できないだろう
309デフォルトの名無しさん (ワッチョイ 0920-pds3)
2024/11/04(月) 21:52:48.49ID:lap6rdZH0 介護対象に飲ませるうんこがあまり臭くなくなる薬みたいな技術は進化してるぞ
310デフォルトの名無しさん (ワッチョイ f532-Q1tn)
2024/11/04(月) 22:10:34.76ID:TtMQ1IOc0 薬で臭くなくしたうんこだからといって介護対象に飲ませるのはどうかと思うぞ。
311デフォルトの名無しさん (ワッチョイ 0920-pds3)
2024/11/04(月) 22:15:25.35ID:lap6rdZH0 >>295
こんなんじゃね
#include <stdio.h>
#include <string.h>
#include <limits.h>
int main(void)
{
char s[] = ""; // ←スペースを11個入れる
sprintf(s, "%d", INT_MIN);
puts(s);
}
こんなんじゃね
#include <stdio.h>
#include <string.h>
#include <limits.h>
int main(void)
{
char s[] = ""; // ←スペースを11個入れる
sprintf(s, "%d", INT_MIN);
puts(s);
}
312デフォルトの名無しさん (ワッチョイ 0920-pds3)
2024/11/04(月) 22:17:04.25ID:lap6rdZH0 >>310
完全に臭くなくなる訳ではないのでおk
完全に臭くなくなる訳ではないのでおk
313デフォルトの名無しさん (ワッチョイ 01c3-bxGr)
2024/11/04(月) 22:57:47.13ID:nqjJRhEX0 ニホンゴ ムズカシイネ
314デフォルトの名無しさん (ワッチョイ 92ad-guIA)
2024/11/05(火) 05:14:52.21ID:srt1vo+S0 逆に考えるんだ。うんこはどうしても出てしまう。だったらそれはそのままにしておけ。
介護する側がそれを気にせず処理出来るのであれば問題は消滅する。だから介護者が
それを気にならなくなるような精神に効く薬を作れば良いんだ。
介護する側がそれを気にせず処理出来るのであれば問題は消滅する。だから介護者が
それを気にならなくなるような精神に効く薬を作れば良いんだ。
315デフォルトの名無しさん
2024/11/05(火) 06:59:24.91ID:tCS75Iej0 >>295って実行時エラーの話なのかコンパイル時エラーの話なのかもわからなくない?
316デフォルトの名無しさん (ワッチョイ b5b4-8Jbz)
2024/11/05(火) 15:17:41.47ID:wPeW8RQX0 NASAはネットなんてなかった1970年代にボイジャー1号打ち上げて
240億km離れててもプログラムを送受信してるのに俺らときたら
240億km離れててもプログラムを送受信してるのに俺らときたら
317デフォルトの名無しさん (アウアウエー Sada-GGiU)
2024/11/05(火) 21:46:02.31ID:JaQWNq5Na どうみても脳筋エラー
318デフォルトの名無しさん (ワッチョイ 8101-Q1tn)
2024/11/05(火) 21:49:31.93ID:qHb8dozk0 脳筋がCを使いません
319デフォルトの名無しさん (ワッチョイ 5e63-kEEx)
2024/11/05(火) 22:03:42.83ID:MR2KM4Hj0 240億kmの伝書鳩
320デフォルトの名無しさん (ワッチョイ 3679-NO1F)
2024/11/06(水) 09:37:06.45ID:csbv8Qbd0 1970年代にもテレビやラヂオはあったわけでね…
321デフォルトの名無しさん (ワッチョイ 5e63-kEEx)
2024/11/07(木) 17:53:15.92ID:RjbHlnZn0 1960年代はラジオ少年が秋葉原詣でしてたな
322デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/07(木) 22:04:17.92ID:E5qLHtEE0 質問失礼
LPTSTR lptStr = TEXT("テスト");
って書くとE0144とC2044ってエラーを吐くんだがプロパティの文字セットって項目を設定なしにすると正常に処理されるのはどういう理屈なの?
const wchar_t[]からLPTSTRに変換できませんってメッセージ出るし型が違うのかなと思うが
だとしたら何故文字設定いじれば解消するのかもよくわからない
LPTSTR lptStr = TEXT("テスト");
って書くとE0144とC2044ってエラーを吐くんだがプロパティの文字セットって項目を設定なしにすると正常に処理されるのはどういう理屈なの?
const wchar_t[]からLPTSTRに変換できませんってメッセージ出るし型が違うのかなと思うが
だとしたら何故文字設定いじれば解消するのかもよくわからない
>>323
そういうことじゃないのか、ごめんなさい
そういうことじゃないのか、ごめんなさい
325デフォルトの名無しさん (ワッチョイ f637-UxC2)
2024/11/08(金) 09:56:22.05ID:tVfxyvn80326デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 10:31:35.11ID:+8UCAN2P0 >>324
気持ちだけで十分よ
気持ちだけで十分よ
327デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 10:32:35.47ID:+8UCAN2P0 >>325
2022だと設定項目見つからなかったから2012でやった、そしたら上記の結果になるんすよねえ
2022だと設定項目見つからなかったから2012でやった、そしたら上記の結果になるんすよねえ
328デフォルトの名無しさん (ササクッテロラ Sp79-P7MY)
2024/11/08(金) 10:36:22.46ID:ce4XJJ6Np 最近のVSはCの当たり前な構文が通用しないから困るよな
329デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 10:51:18.29ID:+8UCAN2P0 >>328
Visual Studio側の問題なのこれ?
Visual Studio側の問題なのこれ?
330デフォルトの名無しさん (ブーイモ MM96-UxC2)
2024/11/08(金) 11:51:09.67ID:y6pbbxPDM331デフォルトの名無しさん (アウアウエー Sada-GGiU)
2024/11/08(金) 12:18:22.14ID:F9yTI1pla LPTSTR lptStr = L"テスト";
332デフォルトの名無しさん (アウアウエー Sada-GGiU)
2024/11/08(金) 12:20:09.93ID:F9yTI1pla あと
#define UNICODE
#define _UNICODE
だったかな
#define UNICODE
#define _UNICODE
だったかな
333デフォルトの名無しさん (アウアウエー Sada-GGiU)
2024/11/08(金) 12:28:34.80ID:F9yTI1pla それでもだめなら
文字コードが違うんじゃないですかね
文字コードが違うんじゃないですかね
334デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 12:59:02.56ID:+8UCAN2P0335デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 13:00:18.41ID:+8UCAN2P0336はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-Q1tn)
2024/11/08(金) 13:02:23.75ID:Me1tPYCI0 char と wchar_t の不整合じゃなくて const の有無の問題じゃないの?
C++ で文字列リテラルまわりの扱いで仕様変更があったからそれに関係してるのかも?
C++ での文字列リテラルの型は const char[] (ワイド文字リテラルの場合は const wchar_t[]) だが、文字列リテラルから直接変換する場合に限り char* (ワイド文字リテラルの場合は wchar_t*) に暗黙に変換して構わないというルールが C++03 まではあって、このルールは C++11 で削除されたという経緯がある。
つまり C++11 以降は文字列リテラルから暗黙には const を剥がすことが出来ない。 (キャストを書けば出来るけど。)
C では文字列リテラルの型は元から char[] で、 const が付いてない。
だから const まわりの制限とは関係ないんだが、これは C の仕様のほうがおかしいし、 C++ と同様の判定をしたほうが理に適っているとマイクロソフトが考えることはあるかもしれない。
C++ で文字列リテラルまわりの扱いで仕様変更があったからそれに関係してるのかも?
C++ での文字列リテラルの型は const char[] (ワイド文字リテラルの場合は const wchar_t[]) だが、文字列リテラルから直接変換する場合に限り char* (ワイド文字リテラルの場合は wchar_t*) に暗黙に変換して構わないというルールが C++03 まではあって、このルールは C++11 で削除されたという経緯がある。
つまり C++11 以降は文字列リテラルから暗黙には const を剥がすことが出来ない。 (キャストを書けば出来るけど。)
C では文字列リテラルの型は元から char[] で、 const が付いてない。
だから const まわりの制限とは関係ないんだが、これは C の仕様のほうがおかしいし、 C++ と同様の判定をしたほうが理に適っているとマイクロソフトが考えることはあるかもしれない。
337デフォルトの名無しさん (アウアウエー Sada-GGiU)
2024/11/08(金) 13:18:44.37ID:F9yTI1pla E0144 エンティティの初期化
型”cont wchar_t *"の値を使用して"wchar_t *"のエンティティを初期化することはできません
C2044は関係無い
型”cont wchar_t *"の値を使用して"wchar_t *"のエンティティを初期化することはできません
C2044は関係無い
338デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 14:51:25.22ID:+8UCAN2P0 >>336
なるほどね、LPTSTRがchar*だから代入できないって話になるのか
それがわかったらエラー文にかいてあることが理解出来るね
昔の仕様だとconst charに見えて実際は違かったってこと?
それなら今回のコードもエラー吐かないし悩まなくてよかったのに
なるほどね、LPTSTRがchar*だから代入できないって話になるのか
それがわかったらエラー文にかいてあることが理解出来るね
昔の仕様だとconst charに見えて実際は違かったってこと?
それなら今回のコードもエラー吐かないし悩まなくてよかったのに
339デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/08(金) 14:52:37.02ID:+8UCAN2P0 >>337
関係ないの?LPSTRに代入できませんって言ってるように見えるけど
関係ないの?LPSTRに代入できませんって言ってるように見えるけど
340デフォルトの名無しさん (ササクッテロラ Sp79-P7MY)
2024/11/08(金) 16:25:31.55ID:1lsgaMlnp signedとunsignedでも怒り狂うからなぁw
いいんだよ、こっちは中身しってんだから余計なエラー吐くなよ
いいんだよ、こっちは中身しってんだから余計なエラー吐くなよ
341はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-Q1tn)
2024/11/08(金) 17:24:12.05ID:Me1tPYCI0 >>338
> 昔の仕様だとconst charに見えて実際は違かったってこと?
C の規格としては本来的に文字列リテラルの型には const は付かない。
これは今も昔も同じ。 変更はない。
なので何かが変わったとしたらマイクロソフトの独自仕様。
私はそのへんに詳しいわけじゃないけど C++ の規格改定に引きずられた可能性は想像できるなぁというぼんやりした予想なので経緯はわからぬ。
でもまあ結果的に const の問題ってのは妥当なみたいだね。
> 昔の仕様だとconst charに見えて実際は違かったってこと?
C の規格としては本来的に文字列リテラルの型には const は付かない。
これは今も昔も同じ。 変更はない。
なので何かが変わったとしたらマイクロソフトの独自仕様。
私はそのへんに詳しいわけじゃないけど C++ の規格改定に引きずられた可能性は想像できるなぁというぼんやりした予想なので経緯はわからぬ。
でもまあ結果的に const の問題ってのは妥当なみたいだね。
342デフォルトの名無しさん (ワッチョイ 3679-NO1F)
2024/11/09(土) 14:04:43.61ID:L+GgUCLJ0 LPTSTR lptStr = (LPTSTR)TEXT("テスト"); で警告出たりするのかな?
糞面倒だけどキャストで通るならそれ以上の対応不用
糞面倒だけどキャストで通るならそれ以上の対応不用
343デフォルトの名無しさん (ワッチョイ f648-UxC2)
2024/11/09(土) 14:22:07.15ID:12zpUv7J0 VS使ってるからたぶんCじゃなくてC++
こういうボンクラの自覚ないボンクラは相手しても疲れるだけ
こういうボンクラの自覚ないボンクラは相手しても疲れるだけ
344デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/09(土) 18:12:46.73ID:IeEwNzSH0345デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/09(土) 18:13:16.97ID:IeEwNzSH0346デフォルトの名無しさん (ワッチョイ 7161-m4Ma)
2024/11/09(土) 18:17:26.89ID:IeEwNzSH0 >>343
そんなこと言いながら何回もレスくれるなんて
そんなこと言いながら何回もレスくれるなんて
347デフォルトの名無しさん (ワッチョイ 0920-pds3)
2024/11/09(土) 18:29:31.05ID:mxjkBfxb0 >>315
どっちもいける
実行時エラー
https://wandbox.org/permlink/r9w30EwoyKVxIguC
> Segmentation fault
コンパイル時エラー
https://wandbox.org/permlink/yPJz2UPs8xHYPLAr
> prog.c: In function 'main':
> prog.c:8:17: error: '%d' directive writing 11 bytes into a region of size 1 [-Werror=format-overflow=]
> 8 | sprintf(s, "%d", INT_MIN);
> | ^~
> prog.c:8:5: note: 'sprintf' output 12 bytes into a destination of size 1
> 8 | sprintf(s, "%d", INT_MIN);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
どっちもいける
実行時エラー
https://wandbox.org/permlink/r9w30EwoyKVxIguC
> Segmentation fault
コンパイル時エラー
https://wandbox.org/permlink/yPJz2UPs8xHYPLAr
> prog.c: In function 'main':
> prog.c:8:17: error: '%d' directive writing 11 bytes into a region of size 1 [-Werror=format-overflow=]
> 8 | sprintf(s, "%d", INT_MIN);
> | ^~
> prog.c:8:5: note: 'sprintf' output 12 bytes into a destination of size 1
> 8 | sprintf(s, "%d", INT_MIN);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
348デフォルトの名無しさん (ワッチョイ cdd5-MfT4)
2024/11/10(日) 00:27:12.07ID:dkv1a77w0 左辺をLPCTSTRにすれば良くない?
リテラルの文字列を可変にすること自体が本来は不要だし、右辺を可変にキャストするよりは左辺を不変として (LPCTSTRとして) 受け取れば良いと思う
リテラルの文字列を可変にすること自体が本来は不要だし、右辺を可変にキャストするよりは左辺を不変として (LPCTSTRとして) 受け取れば良いと思う
349はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-4Bi2)
2024/11/10(日) 09:35:26.26ID:a6nPaG4v0350デフォルトの名無しさん (ワッチョイ e520-2uFP)
2024/11/10(日) 15:28:44.44ID:E/UouhcZ0 >>322
・Microsoft Visual Studio Community 2022 (64 ビット) を使用し「C++コンソールアプリ」で新規プロジェクト作成
・ソリューションエクスプローラーでソースファイルにあるファイル名を*.cppから*.cへ変更
・ファイル名を変更したファイルに下記をコピペ
#include <windows.h>
int main(void)
{
LPTSTR lptStr = TEXT("テスト");
}
・ビルド(B)→ソリューションのビルド(R) でフツーにビルド通ったわ。
・Microsoft Visual Studio Community 2022 (64 ビット) を使用し「C++コンソールアプリ」で新規プロジェクト作成
・ソリューションエクスプローラーでソースファイルにあるファイル名を*.cppから*.cへ変更
・ファイル名を変更したファイルに下記をコピペ
#include <windows.h>
int main(void)
{
LPTSTR lptStr = TEXT("テスト");
}
・ビルド(B)→ソリューションのビルド(R) でフツーにビルド通ったわ。
351デフォルトの名無しさん (アウアウエー Sa13-vkNS)
2024/11/11(月) 11:10:09.47ID:RXw/cl7Za つまりスレタイ嫁ということか
352デフォルトの名無しさん (ワッチョイ b507-4Bi2)
2024/11/11(月) 11:32:56.82ID:CKwZRMfb0353デフォルトの名無しさん (ワッチョイ 23ab-v1sd)
2024/11/12(火) 18:11:56.60ID:bmRwPCyO0 >>322
コンパイラオプションを見れば明らかになるじゃろう。
コンパイラオプションを見れば明らかになるじゃろう。
EchoAPIがVS Codeのワークフローにピッタリで、APIテストの能力がグッとアップしったって聞いて
355デフォルトの名無しさん (アウアウエー Sa13-vkNS)
2024/11/15(金) 18:07:01.60ID:yZ5Bkpe2a まるちんこしね
356デフォルトの名無しさん (ワッチョイ 3b2d-hB9O)
2024/11/22(金) 19:50:13.47ID:KyG89VCU0 Q.
doubleをprintfで表示するには%lfでいいの?
A.
double 型を printf で表示する場合、%lf ではなく %f を使用するのが一般的です。
理由:
printf の可変長引数において、float 型は double 型に自動的に昇格されます。
そのため、%f は double 型の値も受け取ることができます。
%lf は scanf で double 型の値を読み込む際に使用されますが、
printf では %f と同じ意味として扱われます (C99規格以降)。
doubleをprintfで表示するには%lfでいいの?
A.
double 型を printf で表示する場合、%lf ではなく %f を使用するのが一般的です。
理由:
printf の可変長引数において、float 型は double 型に自動的に昇格されます。
そのため、%f は double 型の値も受け取ることができます。
%lf は scanf で double 型の値を読み込む際に使用されますが、
printf では %f と同じ意味として扱われます (C99規格以降)。
357デフォルトの名無しさん (ワッチョイ bf5f-FO3g)
2024/11/24(日) 19:40:17.88ID:g9nxxeRj0 これが同じ値書いてくれないのは普通だったんだっけ.
#include <stdio.h>
int main() {
int s=31;
unsigned long i = 1 << 31;
unsigned long j = 1 << 31;
unsigned long k;
while(i) {
k = 1 << s;
printf("%lu,%lu,%lu¥n",i,j,k);
i = (unsigned)i>>1;
j >>= 1;
s--;
}
return 0;
}
#include <stdio.h>
int main() {
int s=31;
unsigned long i = 1 << 31;
unsigned long j = 1 << 31;
unsigned long k;
while(i) {
k = 1 << s;
printf("%lu,%lu,%lu¥n",i,j,k);
i = (unsigned)i>>1;
j >>= 1;
s--;
}
return 0;
}
358デフォルトの名無しさん (ワッチョイ ff63-cdGy)
2024/11/24(日) 19:55:59.76ID:VUrUqN1f0 手元にあるGCCとMS-C(32bit)は
同じ値が出てました
同じ値が出てました
359デフォルトの名無しさん (ワッチョイ d7d8-7ouQ)
2024/11/24(日) 20:09:10.15ID:KIy2cazo0 質問失礼します
ダイアログボックスについて学習しようとしているのですが、サンプルのリソースをコピペしたところ、ダイアログボックスのIDが認識されなく手詰まりになってしまっています。
どなたかご助力ください。
TEST DIALOG (座標を書くと書き込みできない)
C2059
C2061
以上のソースでエラーを吐いてしまいます。リソースをベタ打ちで記述する参考サイトが少ないので判断がつきません。
ダイアログボックスについて学習しようとしているのですが、サンプルのリソースをコピペしたところ、ダイアログボックスのIDが認識されなく手詰まりになってしまっています。
どなたかご助力ください。
TEST DIALOG (座標を書くと書き込みできない)
C2059
C2061
以上のソースでエラーを吐いてしまいます。リソースをベタ打ちで記述する参考サイトが少ないので判断がつきません。
360デフォルトの名無しさん (ワッチョイ ff63-cdGy)
2024/11/24(日) 20:28:06.09ID:VUrUqN1f0 記述に文法上の誤りがあるって事です。
コピペで失敗しているのか、
元々のサンプルに誤りがあるかは
これだけでは分かりません
文法の基本から学び直して
自分で見つけるしかないかもしれません
コピペで失敗しているのか、
元々のサンプルに誤りがあるかは
これだけでは分かりません
文法の基本から学び直して
自分で見つけるしかないかもしれません
361デフォルトの名無しさん (ワッチョイ bf5f-FO3g)
2024/11/24(日) 20:47:32.93ID:Hl1pEu0p0 >> 358
試していただきありがとうございます.
FreeBSD clang version 18.1.6 (https://github.com/llvm/llvm-project.git llvmorg-18.1.6-0-g1118c2e05e67)
Target: x86_64-unknown-freebsd14.1
と,gccは共に jの値がおかしいのです.
試しに,
unsigned long j = 1 << 31;
を
unsigned int j = 1 << 31;
にすると同じ値になる.
これはコンパイラのBUGかなぁ.
試していただきありがとうございます.
FreeBSD clang version 18.1.6 (https://github.com/llvm/llvm-project.git llvmorg-18.1.6-0-g1118c2e05e67)
Target: x86_64-unknown-freebsd14.1
と,gccは共に jの値がおかしいのです.
試しに,
unsigned long j = 1 << 31;
を
unsigned int j = 1 << 31;
にすると同じ値になる.
これはコンパイラのBUGかなぁ.
よく分からないけど
unsigned long i = 1 << 31;
unsigned long j = 1 << 31;
を
unsigned long i = 1L << 31;
unsigned long j = 1L << 31;
とするとうまくいく? clang
どちらでも同じ結果になりそうだけど
見当違いだったらごめんなさい
unsigned long i = 1 << 31;
unsigned long j = 1 << 31;
を
unsigned long i = 1L << 31;
unsigned long j = 1L << 31;
とするとうまくいく? clang
どちらでも同じ結果になりそうだけど
見当違いだったらごめんなさい
gcc -S
でアセンブラ出してみてみたけど、
いや、アセンブラよくわからないんだけど、
修正前の iと jは初期化時にいずれも符号拡張されて大きな値になっていて
その後なぜか iの方は下32ビットで、jの方は64ビットで計算されているようで、正しいのはむしろ jのように見えたがごめんなさい
本当にアセンブラ分からないので多分間違ってます…
でアセンブラ出してみてみたけど、
いや、アセンブラよくわからないんだけど、
修正前の iと jは初期化時にいずれも符号拡張されて大きな値になっていて
その後なぜか iの方は下32ビットで、jの方は64ビットで計算されているようで、正しいのはむしろ jのように見えたがごめんなさい
本当にアセンブラ分からないので多分間違ってます…
364デフォルトの名無しさん (ワッチョイ 9f61-vAaR)
2024/11/24(日) 22:26:25.59ID:zY64cYUd0 gcc, clang
sizeof(int) == 32
sizeof(unsigned long) == 64
での出力
18446744071562067968,18446744071562067968,18446744071562067968
1073741824,9223372035781033984,1073741824
536870912,4611686017890516992,536870912
省略
8,68719476728,8
4,34359738364,4
2,17179869182,2
1,8589934591,1
これはこれで正しいと思うが
sizeof(int) == 32
sizeof(unsigned long) == 64
での出力
18446744071562067968,18446744071562067968,18446744071562067968
1073741824,9223372035781033984,1073741824
536870912,4611686017890516992,536870912
省略
8,68719476728,8
4,34359738364,4
2,17179869182,2
1,8589934591,1
これはこれで正しいと思うが
あ、iは unsigned (int)でキャストしてるのか
366デフォルトの名無しさん (ワッチョイ bf5f-FO3g)
2024/11/24(日) 23:09:31.94ID:Hl1pEu0p0 わかりやすく,intのものとcastかけたのにしてみました.
これだとやはり,pの値だけ変でした.
元々は,binaryで数を8bit 16bit 32bitで表示する関数が,8,16が普通で32だけ変なので気がついたのでした.なんでintだと符合拡張されなくてlongだとされるかが謎.
#include <stdio.h>
int main() {
int s=31;
unsigned long i = 1 << 31;
unsigned int j = 1 << 31;
unsigned long p = 1 << 31;
unsigned long k;
while(i) {
k = 1 << s;
printf("%lu,%u,%lu,%lu¥n",i,j,k,p);
i = (unsigned)i>>1;
j >>= 1;
p >>= 1;
s--;
}
return 0;
}
これだとやはり,pの値だけ変でした.
元々は,binaryで数を8bit 16bit 32bitで表示する関数が,8,16が普通で32だけ変なので気がついたのでした.なんでintだと符合拡張されなくてlongだとされるかが謎.
#include <stdio.h>
int main() {
int s=31;
unsigned long i = 1 << 31;
unsigned int j = 1 << 31;
unsigned long p = 1 << 31;
unsigned long k;
while(i) {
k = 1 << s;
printf("%lu,%u,%lu,%lu¥n",i,j,k,p);
i = (unsigned)i>>1;
j >>= 1;
p >>= 1;
s--;
}
return 0;
}
367デフォルトの名無しさん (ワッチョイ bf5f-FO3g)
2024/11/24(日) 23:16:12.94ID:Hl1pEu0p0 unsigned long p = 1 << 31;
を
unsigned long p = 1L << 31;
にしたら同じ値になりました.
ううむ,なぜ
unsigned int j = 1 << 31;
だとうまくいって,longだと1Lにしないとうまくいかんのだ.
を
unsigned long p = 1L << 31;
にしたら同じ値になりました.
ううむ,なぜ
unsigned int j = 1 << 31;
だとうまくいって,longだと1Lにしないとうまくいかんのだ.
右辺が 1<<31だと
左辺が intだと0x80000000がそのまま、
longだと 0xffffffff80000000に拡張されて転記されるからでは
左辺が intだと0x80000000がそのまま、
longだと 0xffffffff80000000に拡張されて転記されるからでは
unsigned long i = (unsigned long) 1 << 31;
とすれば iは 0x80000000になるかと
とすれば iは 0x80000000になるかと
371はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-hCSs)
2024/11/25(月) 02:42:55.67ID:EAdMpn4b0 >>367
言語仕様的に解釈すると……
シフト演算子の結果の型は左オペランドを整数拡張した後の型と同じになる。
整数リテラルは int の範囲で表せる限り int なので 1 は int 。
int は整数拡張の必要がないので 1<<31 の結果の型も int 。
そして結果の型が signed かつ結果の値が結果の型で表現可能な範囲にないときの動作は未定義なので
2147483648 が int (おそらく質問者の環境では 32 ビット) の最大値である 2147483647 を越えていて未定義の挙動となる。
不定とか処理系定義ではなく未定義と明記されてる。
つまり言語仕様上は何が起きても良いということ。
言語仕様的に解釈すると……
シフト演算子の結果の型は左オペランドを整数拡張した後の型と同じになる。
整数リテラルは int の範囲で表せる限り int なので 1 は int 。
int は整数拡張の必要がないので 1<<31 の結果の型も int 。
そして結果の型が signed かつ結果の値が結果の型で表現可能な範囲にないときの動作は未定義なので
2147483648 が int (おそらく質問者の環境では 32 ビット) の最大値である 2147483647 を越えていて未定義の挙動となる。
不定とか処理系定義ではなく未定義と明記されてる。
つまり言語仕様上は何が起きても良いということ。
372デフォルトの名無しさん (ワッチョイ ffd6-G09H)
2024/11/25(月) 07:22:58.48ID:NtppUMW10 6.3.1.3のこれじゃないの
Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or
subtracting one more than the maximum value that can be represented in the new type
until the value is in the range of the new type.
Otherwise, if the new type is unsigned, the value is converted by repeatedly adding or
subtracting one more than the maximum value that can be represented in the new type
until the value is in the range of the new type.
373デフォルトの名無しさん (ワッチョイ bf5f-FO3g)
2024/11/25(月) 08:27:04.40ID:qsrJNZhH0 6.3.1.3
符号付き整数型及び符号無し整数型 整数型の値を̲Bool型以外の他の整数型に変換する場合,
その値が新しい型で表現可能なとき,値は変化しない。
新しい型で表現できない場合,新しい型が符号無し整数型であれば,新しい型で表現しうる最大の数に
1加えた数を加えること又は減じることを,新しい型の範囲に入るまで繰り返すことによって得られる値
に変換する(49)。
なるほど,1がintで<<31すると負の最大値となって,unsignedとして表せないからか.
皆様,ありがとうございました.
符号付き整数型及び符号無し整数型 整数型の値を̲Bool型以外の他の整数型に変換する場合,
その値が新しい型で表現可能なとき,値は変化しない。
新しい型で表現できない場合,新しい型が符号無し整数型であれば,新しい型で表現しうる最大の数に
1加えた数を加えること又は減じることを,新しい型の範囲に入るまで繰り返すことによって得られる値
に変換する(49)。
なるほど,1がintで<<31すると負の最大値となって,unsignedとして表せないからか.
皆様,ありがとうございました.
374はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f732-hCSs)
2024/11/25(月) 09:22:18.85ID:EAdMpn4b0375デフォルトの名無しさん (ワッチョイ 9fc2-ZGYG)
2024/11/25(月) 09:32:20.82ID:SsaYg1Am0 科学 + ンニュース 5ch
保守派もリベラル派も「自分の政治的信念に合致したニュース」を信じやすいという研究結果 [すらいむ★]
https://itest.5ch.net/egg/test/read.cgi/scienceplus/1732447647
コメントも含めて読むと
陰謀論が収まら無い理由が判明する
保守派もリベラル派も「自分の政治的信念に合致したニュース」を信じやすいという研究結果 [すらいむ★]
https://itest.5ch.net/egg/test/read.cgi/scienceplus/1732447647
コメントも含めて読むと
陰謀論が収まら無い理由が判明する
376デフォルトの名無しさん (ワッチョイ ffd6-G09H)
2024/11/25(月) 09:46:02.42ID:NtppUMW10 なるほど、32bitのみでやるときも1u<<31にしないといけないのか
377デフォルトの名無しさん (ササクッテロ Spcb-8bf6)
2024/11/25(月) 10:29:04.22ID:G+C3M6QHp なぜ浮動小数型をシフトしようとした?
378デフォルトの名無しさん (ワッチョイ bfdf-FO3g)
2024/11/25(月) 13:39:22.46ID:YjGMGS1I0 >> 374 なるほど,そっちで既に未定義だったか.
6.5.7
ビット単位のシフト演算子
構文規則
シフト式:
加減式
シフト式 << 加減式
シフト式 >> 加減式
制約 各オペランドは,整数型をもたなければならない。
意味規則 整数拡張を各オペランドに適用する。結果の型は,左オペランドを拡張した後の型とする。右オペランドの値が負であるか,又は拡張した左オペランドの幅以上の場合,その動作は,未定義とする。
E1<<E2の結果は,E1をE2ビット分左にシフトした値とする。空いたビットには0を詰める。E1が符号無し整数型をもつ場合,結果の値は,E1×2E2の,結果の型で表現可能な最大値より1大きい値を法と
する剰余とする。E1が符号付き整数型と非負の値をもち,E1×2E2が結果の型で表現可能である場合,それが結果の値となる。それ以外の場合,その動作は未定義とする。
E1>>E2の結果は,E1をE2ビット分右にシフトした値とする。E1が符号無し整数型をもつ場合,又はE1が符号付き整数型と非負の値をもつ場合,結果の値は,E1/2E2の商の整数部分とする。E1が符号付き整数型と負の値をもつ場合,結果の値は処理系定義とする。
6.5.7
ビット単位のシフト演算子
構文規則
シフト式:
加減式
シフト式 << 加減式
シフト式 >> 加減式
制約 各オペランドは,整数型をもたなければならない。
意味規則 整数拡張を各オペランドに適用する。結果の型は,左オペランドを拡張した後の型とする。右オペランドの値が負であるか,又は拡張した左オペランドの幅以上の場合,その動作は,未定義とする。
E1<<E2の結果は,E1をE2ビット分左にシフトした値とする。空いたビットには0を詰める。E1が符号無し整数型をもつ場合,結果の値は,E1×2E2の,結果の型で表現可能な最大値より1大きい値を法と
する剰余とする。E1が符号付き整数型と非負の値をもち,E1×2E2が結果の型で表現可能である場合,それが結果の値となる。それ以外の場合,その動作は未定義とする。
E1>>E2の結果は,E1をE2ビット分右にシフトした値とする。E1が符号無し整数型をもつ場合,又はE1が符号付き整数型と非負の値をもつ場合,結果の値は,E1/2E2の商の整数部分とする。E1が符号付き整数型と負の値をもつ場合,結果の値は処理系定義とする。
379デフォルトの名無しさん (JP 0Hdf-6m00)
2024/11/26(火) 22:12:07.51ID:JxXv+doZH VS CodeでEchoAPIを使うと、ツールを切り替えずにAPIテストをシームレスに管理できるようになったよ!
380デフォルトの名無しさん (ワッチョイ d761-7ouQ)
2024/11/29(金) 15:48:48.81ID:QX01Nly20 以下のサンプルプログラムが理解できず困っています。
該当プログラムは、コマンドラインから読み込んだBMPの色データを矩形として並べていくというものの一部を抜粋しています。
以下のfor文は
カラーテーブルの数を取得する→
ブラシを設定する→
先頭の構造体メンバからiCount先の構造体メンバを指定→
iCountにインクリメント
という流れだと考えられると思うのですが、1に対し1カラービット分左シフトとなっている部分がどういったロジックによって数の取得が実現されているのかわかりません。
質問は2点あり、どのようにしてテーブル数を取得しているのか、コードの理解は正しいのかについてお答えしていただければと思います。
サンプルコード
#include <windows.h>
BITMAPFILEHEADER bmpFileHeader;
BITMAPCOREHEADER bmpCoreHeader;
RGBTRIPLE *prtColor;
for ( ; iCount < (1 << bmpCoreHeader.bcBitCount) ; iCount++) {
SelectObject(hdc , CreateSolidBrush(
RGB( (prtColor + iCount)->rgbtRed ,
(prtColor + iCount)->rgbtGreen ,
(prtColor + iCount)->rgbtBlue
))
該当プログラムは、コマンドラインから読み込んだBMPの色データを矩形として並べていくというものの一部を抜粋しています。
以下のfor文は
カラーテーブルの数を取得する→
ブラシを設定する→
先頭の構造体メンバからiCount先の構造体メンバを指定→
iCountにインクリメント
という流れだと考えられると思うのですが、1に対し1カラービット分左シフトとなっている部分がどういったロジックによって数の取得が実現されているのかわかりません。
質問は2点あり、どのようにしてテーブル数を取得しているのか、コードの理解は正しいのかについてお答えしていただければと思います。
サンプルコード
#include <windows.h>
BITMAPFILEHEADER bmpFileHeader;
BITMAPCOREHEADER bmpCoreHeader;
RGBTRIPLE *prtColor;
for ( ; iCount < (1 << bmpCoreHeader.bcBitCount) ; iCount++) {
SelectObject(hdc , CreateSolidBrush(
RGB( (prtColor + iCount)->rgbtRed ,
(prtColor + iCount)->rgbtGreen ,
(prtColor + iCount)->rgbtBlue
))
381デフォルトの名無しさん (スプッッ Sd3f-G09H)
2024/11/29(金) 16:12:14.82ID:YWo8X0edd bcBitCountはピクセルあたりビット数で1,4,8,24だそう
nビットで表せる値は2^n通りで、これは左シフト1<<nで計算できる
nビットで表せる値は2^n通りで、これは左シフト1<<nで計算できる
382デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/29(金) 23:08:43.43ID:5pZynS2U0 # 質問されていない部分だけど…
iCountと比較する値はループ内で変動しないよね?
だったら毎回計算せずにループ前で計算して別変数に記憶しておくほうがよくないかい?
iCountと比較する値はループ内で変動しないよね?
だったら毎回計算せずにループ前で計算して別変数に記憶しておくほうがよくないかい?
383デフォルトの名無しさん (ワッチョイ ffd6-G09H)
2024/11/30(土) 00:28:19.69ID:b6kb1MmL0 今時のコンパイラは十分賢いので気にすることない
384デフォルトの名無しさん (ワッチョイ ff63-cdGy)
2024/11/30(土) 00:37:35.21ID:VtvuoLT+0 ユーザーの犯したバグも直してくれるとありがたいなあ
385デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/30(土) 00:47:56.34ID:k7UOR52k0 シフトでも掛算でもどっちでもいいけど
質問者のように読んで悩むのは問題
コメント書いておけ
ループ内毎回計算か最適化でループ外に出したかは
コンパイル後の逆アセンブルとかで確認するの?
だったら間違いないようにループ外に出す方が良い癖にもなると思うのだが
質問者のように読んで悩むのは問題
コメント書いておけ
ループ内毎回計算か最適化でループ外に出したかは
コンパイル後の逆アセンブルとかで確認するの?
だったら間違いないようにループ外に出す方が良い癖にもなると思うのだが
386デフォルトの名無しさん (ワッチョイ bf79-q0Tp)
2024/11/30(土) 09:43:24.89ID:54hbVEvk0 380の知能では最適化したつもりが新たなバグを埋め込む事になるかもしれん
自身の身の丈に合ったコードにしとけ
未来の自分が賢くなってる事を信じて
自身の身の丈に合ったコードにしとけ
未来の自分が賢くなってる事を信じて
387デフォルトの名無しさん (アウアウエー Sadf-wjfe)
2024/11/30(土) 09:49:47.60ID:l0dFcapba #include <windows.h>
BITMAPFILEHEADER bmpFileHeader;
BITMAPCOREHEADER bmpCoreHeader;
RGBTRIPLE *prtColor;
↑
この間に何も描かれてないのは投稿者が勝手に削除したの?元から無いの?
↓
for ( ; iCount < (1 << bmpCoreHeader.bcBitCount) ; iCount++) {
SelectObject(hdc , CreateSolidBrush(
RGB( (prtColor + iCount)->rgbtRed ,
(prtColor + iCount)->rgbtGreen ,
(prtColor + iCount)->rgbtBlue
))
BITMAPFILEHEADER bmpFileHeader;
BITMAPCOREHEADER bmpCoreHeader;
RGBTRIPLE *prtColor;
↑
この間に何も描かれてないのは投稿者が勝手に削除したの?元から無いの?
↓
for ( ; iCount < (1 << bmpCoreHeader.bcBitCount) ; iCount++) {
SelectObject(hdc , CreateSolidBrush(
RGB( (prtColor + iCount)->rgbtRed ,
(prtColor + iCount)->rgbtGreen ,
(prtColor + iCount)->rgbtBlue
))
388デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/30(土) 11:23:36.84ID:k7UOR52k0 なんでこんなに読めないのか理由がわかった
変数名や字下げや「,」前のブランクなど
論理そのもの以前にコーディングの美しさが全然無い
変数名や字下げや「,」前のブランクなど
論理そのもの以前にコーディングの美しさが全然無い
389デフォルトの名無しさん (ワッチョイ ff63-cdGy)
2024/11/30(土) 11:53:49.47ID:VtvuoLT+0 この掲示板書き込むと、スペースやタブは消されちゃうんだよな。
だから綺麗に整形した状態でソース載せたいなら、
全角スペース使うしかない。
あるいはソース公開出来るサイトにアップロードして、
そのリンクを張るなりする。
そういうサイトは、>>1 に書いてある。
だから綺麗に整形した状態でソース載せたいなら、
全角スペース使うしかない。
あるいはソース公開出来るサイトにアップロードして、
そのリンクを張るなりする。
そういうサイトは、>>1 に書いてある。
390デフォルトの名無しさん (ワッチョイ bfd9-6oxW)
2024/11/30(土) 12:18:13.55ID:tlb45efI0 美しさとか言い出したら自転車置き場の議論なるからやめとけ
391デフォルトの名無しさん (ワッチョイ ff63-cdGy)
2024/11/30(土) 12:21:38.32ID:VtvuoLT+0392デフォルトの名無しさん (ワッチョイ ff76-J7R8)
2024/11/30(土) 15:56:34.50ID:k7UOR52k0 python自体のスタイルPEP8に加えてCについてのPEP7も整備されているのに
https://peps.python.org/pep-0007/
あえてそれに背くコーディングをする理由が見つからない
GNUのへんてこコーディングも規約文章は整備されている
https://peps.python.org/pep-0007/
あえてそれに背くコーディングをする理由が見つからない
GNUのへんてこコーディングも規約文章は整備されている
393デフォルトの名無しさん (ワッチョイ bf79-q0Tp)
2024/11/30(土) 16:28:54.09ID:54hbVEvk0 他人のふんどしででかい顔のpythonは存在自体がきしょくってぇ
そんなもん使ってる奴の押し付けに従う気にはとてもなれないって感じぃ
そんなもん使ってる奴の押し付けに従う気にはとてもなれないって感じぃ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 橋下徹氏「この喧嘩は日本の完敗」 台湾有事答弁めぐる外務省局長訪中で指摘「中国に怒られてご説明に伺った日本と見られる」 [muffin★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★10 [ぐれ★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- おっぱい! おっぱい! おっぱい! おっぱい! おっぱい! おっぱい! おっぱい! おっぱい!
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- もしかして安倍晋三て有能だった?ネトウヨを掌握しつつ韓国、中国、ロシアへの売国をバレないようにやってたし [472617201]
- 高市コイン、155円突破wwwwwwwwww [246620176]
- サナエがトランプのチンポしゃぶったら日本は安泰
- おじゃる丸をまったり待機するスレ🏡
