[過去ログ] C言語なら俺に聞け 163 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
342
(1): (ワッチョイ 3679-NO1F) 2024/11/09(土)14:04 ID:L+GgUCLJ0(1) AAS
LPTSTR lptStr = (LPTSTR)TEXT("テスト"); で警告出たりするのかな?
糞面倒だけどキャストで通るならそれ以上の対応不用
343
(3): (ワッチョイ f648-UxC2) 2024/11/09(土)14:22 ID:12zpUv7J0(1) AAS
VS使ってるからたぶんCじゃなくてC++
こういうボンクラの自覚ないボンクラは相手しても疲れるだけ
344
(1): (ワッチョイ 7161-m4Ma) 2024/11/09(土)18:12 ID:IeEwNzSH0(1/3) AAS
>>341
理解した
constは付かないはずなのにリテラルにVisual Studioが勝手に付いてることにしてくるってことね
わざわざありがとうスッキリしたよ
345: (ワッチョイ 7161-m4Ma) 2024/11/09(土)18:13 ID:IeEwNzSH0(2/3) AAS
>>342
いけた
たしかに面倒だけど仕方ないね
346: (ワッチョイ 7161-m4Ma) 2024/11/09(土)18:17 ID:IeEwNzSH0(3/3) AAS
>>343
そんなこと言いながら何回もレスくれるなんて
347: (ワッチョイ 0920-pds3) 2024/11/09(土)18:29 ID:mxjkBfxb0(1) AAS
>>315
どっちもいける

実行時エラー
外部リンク:wandbox.org
> Segmentation fault

コンパイル時エラー
外部リンク:wandbox.org
> 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 ID:dkv1a77w0(1) AAS
左辺をLPCTSTRにすれば良くない?
リテラルの文字列を可変にすること自体が本来は不要だし、右辺を可変にキャストするよりは左辺を不変として (LPCTSTRとして) 受け取れば良いと思う
349: はちみつ餃子◆8X2XSCHEME (ワッチョイ cd32-4Bi2) 2024/11/10(日)09:35 ID:a6nPaG4v0(1) AAS
>>344
オンラインコンパイラで VS17.10 を確かめてみたが文字列リテラルには const は付かないぞ。
お前が間違って C++ を使ってるという >>343 の意見に一票。
350: (ワッチョイ e520-2uFP) 2024/11/10(日)15:28 ID:E/UouhcZ0(1) AAS
>>322
・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 ID:RXw/cl7Za(1) AAS
つまりスレタイ嫁ということか
352: (ワッチョイ b507-4Bi2) 2024/11/11(月)11:32 ID:CKwZRMfb0(1) AAS
>>343 は速攻ぶったたいてるが、学生か初学者はこういう経験しとくもんだ
Cは汗に似て泥臭いんだよ

俺もあとで追試しよっと テキトーでやってて知識整理できてないわ
353: (ワッチョイ 23ab-v1sd) 2024/11/12(火)18:11 ID:bmRwPCyO0(1) AAS
>>322
コンパイラオプションを見れば明らかになるじゃろう。
354: (JP 0H93-qgn8) 2024/11/13(水)18:56 ID:5p447UHqH(1) AAS

EchoAPIがVS Codeのワークフローにピッタリで、APIテストの能力がグッとアップしったって聞いて
355: (アウアウエー Sa13-vkNS) 2024/11/15(金)18:07 ID:yZ5Bkpe2a(1) AAS
まるちんこしね
356: (ワッチョイ 3b2d-hB9O) 2024/11/22(金)19:50 ID:KyG89VCU0(1) AAS
Q.
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 ID:g9nxxeRj0(1) AAS
これが同じ値書いてくれないのは普通だったんだっけ.

#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 ID:VUrUqN1f0(1/2) AAS
手元にあるGCCとMS-C(32bit)は
同じ値が出てました
359: (ワッチョイ d7d8-7ouQ) 2024/11/24(日)20:09 ID:KIy2cazo0(1) AAS
質問失礼します
ダイアログボックスについて学習しようとしているのですが、サンプルのリソースをコピペしたところ、ダイアログボックスのIDが認識されなく手詰まりになってしまっています。
どなたかご助力ください。

TEST DIALOG (座標を書くと書き込みできない)
C2059
C2061

以上のソースでエラーを吐いてしまいます。リソースをベタ打ちで記述する参考サイトが少ないので判断がつきません。
360: (ワッチョイ ff63-cdGy) 2024/11/24(日)20:28 ID:VUrUqN1f0(2/2) AAS
記述に文法上の誤りがあるって事です。
コピペで失敗しているのか、
元々のサンプルに誤りがあるかは
これだけでは分かりません
文法の基本から学び直して
自分で見つけるしかないかもしれません
361: (ワッチョイ bf5f-FO3g) 2024/11/24(日)20:47 ID:Hl1pEu0p0(1/3) AAS
>> 358
試していただきありがとうございます.
FreeBSD clang version 18.1.6 (外部リンク[git]:github.com 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かなぁ.
362: 警備員[Lv.1][新芽] (ワッチョイ 9fe5-fjqo) 2024/11/24(日)22:17 ID:/KMFo2rr0(1/3) AAS
よく分からないけど
unsigned long i = 1 << 31;
unsigned long j = 1 << 31;

unsigned long i = 1L << 31;
unsigned long j = 1L << 31;
とするとうまくいく? clang

どちらでも同じ結果になりそうだけど
見当違いだったらごめんなさい
363: 警備員[Lv.1][新芽] (ワッチョイ 9fe5-fjqo) 2024/11/24(日)22:25 ID:/KMFo2rr0(2/3) AAS
gcc -S
でアセンブラ出してみてみたけど、
いや、アセンブラよくわからないんだけど、
修正前の iと jは初期化時にいずれも符号拡張されて大きな値になっていて
その後なぜか iの方は下32ビットで、jの方は64ビットで計算されているようで、正しいのはむしろ jのように見えたがごめんなさい
本当にアセンブラ分からないので多分間違ってます…
364: (ワッチョイ 9f61-vAaR) 2024/11/24(日)22:26 ID:zY64cYUd0(1) AAS
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

これはこれで正しいと思うが
365: 警備員[Lv.2][新芽] (ワッチョイ 9fe5-fjqo) 2024/11/24(日)22:45 ID:/KMFo2rr0(3/3) AAS
あ、iは unsigned (int)でキャストしてるのか
366: (ワッチョイ bf5f-FO3g) 2024/11/24(日)23:09 ID:Hl1pEu0p0(2/3) AAS
わかりやすく,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;
}
367
(1): (ワッチョイ bf5f-FO3g) 2024/11/24(日)23:16 ID:Hl1pEu0p0(3/3) AAS
unsigned long p = 1 << 31;

unsigned long p = 1L << 31;
にしたら同じ値になりました.

ううむ,なぜ
unsigned int j = 1 << 31;
だとうまくいって,longだと1Lにしないとうまくいかんのだ.
368: 警備員[Lv.4][新芽] (ワッチョイ b72e-fjqo) 2024/11/24(日)23:36 ID:BVpPJ8iH0(1/3) AAS
右辺が 1<<31だと
左辺が intだと0x80000000がそのまま、
longだと 0xffffffff80000000に拡張されて転記されるからでは
369: 警備員[Lv.4][新芽] (ワッチョイ b72e-fjqo) 2024/11/24(日)23:49 ID:BVpPJ8iH0(2/3) AAS
unsigned long i = (unsigned long) 1 << 31;
とすれば iは 0x80000000になるかと
370: 警備員[Lv.4][新芽] (ワッチョイ b72e-fjqo) 2024/11/24(日)23:50 ID:BVpPJ8iH0(3/3) AAS
1lとするのと同じだけど
371: はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-hCSs) 2024/11/25(月)02:42 ID:EAdMpn4b0(1/2) AAS
>>367
言語仕様的に解釈すると……

シフト演算子の結果の型は左オペランドを整数拡張した後の型と同じになる。
整数リテラルは int の範囲で表せる限り int なので 1 は int 。
int は整数拡張の必要がないので 1<<31 の結果の型も int 。

そして結果の型が signed かつ結果の値が結果の型で表現可能な範囲にないときの動作は未定義なので
2147483648 が int (おそらく質問者の環境では 32 ビット) の最大値である 2147483647 を越えていて未定義の挙動となる。

不定とか処理系定義ではなく未定義と明記されてる。
つまり言語仕様上は何が起きても良いということ。
1-
あと 631 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.027s