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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
722: (ササクッテロル Sp85-ZS5M) 03/12(水)22:07 ID:/p3tzJNRp(1) AAS
AIは何も指定しなきゃjavaやpythonやC#のコードを吐き出すよ
723: (ワッチョイ 1101-6xWR) 03/18(火)10:34 ID:mIJI9ibF0(1) AAS
cはむずい定期
724: (ワッチョイ a1b3-Cuhd) 03/19(水)20:09 ID:WDKEEomI0(1) AAS
文法的にはポインタ周りが(少し)難しいだけ
個人的にはpythonの方が難しく感じるな
725: はちみつ餃子◆8X2XSCHEME (ワッチョイ 215e-a7BF) 03/19(水)20:44 ID:SWZJHd7L0(1) AAS
C が未定義をエラーとして補足せずに黙って変になることがあるのは入門書などをまともに読まずにいろいろ弄って学ぶタイプの人には向いてないな。
ちゃんとした入門書をちゃんと読むならそんなに難しいわけではない。
しかし難しくないことでもしょうもないミスをするのが人というものだという現実もあって、特に規模が大きくなると C はしんどい。
難易度とかいうのとは別の話として、理解していても間違う。
726
(1): (ワッチョイ 13ad-avMV) 03/20(木)04:57 ID:07u24rkx0(1) AAS
まあしかしこの頃のコンパイラは警告やエラーを沢山出してくれて分り易いよ。
昔のはチェックが緩くて出なかったからな。
その状態から gcc で printf() のフォーマットと引数のチェックが出来ると知った時は衝撃を受けた。
727
(1): (ワッチョイ 418c-jD59) 03/20(木)17:01 ID:iinwNT6F0(1/2) AAS
>>726
それな、オプションさえちゃんと付ければ昔でもできてたよ
728
(3): はちみつ餃子◆8X2XSCHEME (ワッチョイ 2170-a7BF) 03/20(木)17:31 ID:PqZkwPwR0(1) AAS
GCC では遅くても 2.95.3 には attribute で文字列が書式であることを指定できて型チェックする機能はあった模様。(2001年頃)
外部リンク[html]:gcc.gnu.org
ただな、このスレにいるようなおじさんの言う「昔」は 1980 年頃の話だったりするんよ。
MS-DOS 用とか CP/M 用とかのコンパイラの話なんよ。
729: (ワッチョイ 71ff-yHWN) 03/20(木)17:39 ID:Enps6Akh0(1) AAS
その年代の人はおじさんじゃなくておじいさんでは
730: (ワッチョイ 418c-jD59) 03/20(木)17:45 ID:iinwNT6F0(2/2) AAS
>>728
スマソ、俺はちょっと若すぎたわ
だいぶ昔からできてた記憶があったがそれよりさらに昔の話とは恐れ入った先輩
731: (ワッチョイ c95f-H5Hv) 03/20(木)18:23 ID:0dSk8Oyx0(1) AAS
メインフレームにダム端末繋げてた時代じゃよ
732: (スフッ Sd33-4EpX) 03/20(木)23:54 ID:t3XlSG3jd(1) AAS
gcc7.1から突然エラーメッセージが親切になったのはあるな
ちょうどclang+llvmが話題になった時期でそれに対抗したらしい
733: (ワッチョイ 13ad-avMV) 03/21(金)07:44 ID:6cMMiEqo0(1/2) AAS
>>727
それはどのぐらい昔かによる。
80年代後半にはまだなかったと思う。
734: (ワッチョイ 13ad-avMV) 03/21(金)07:45 ID:6cMMiEqo0(2/2) AAS
>>728
そうそう。80年代。
735: (ワッチョイ 9bec-91cd) 03/21(金)08:19 ID:kfFumR870(1) AAS
真理子版が便利すぎた。
736: (ワッチョイ 992a-15T+) 03/22(土)13:52 ID:A90b+kK90(1) AAS
他人にも使わせるツールに環境変数「真里子」はキモすぎてビビった
737: (アウアウエー Sa23-D2PX) 03/22(土)14:25 ID:U6/Lg1xxa(1) AAS
>>728
scanf, sscanf で float, double に %f, %lf のところを %f, %f にしてバグるのがありがち
738: 627 (ワッチョイ 5377-avMV) 03/22(土)15:31 ID:7ZrFn0ve0(1) AAS
scanfなんて使ったことねーや
ありがちってほど使ってるんか
739: (ワッチョイ eba1-hjYJ) 03/22(土)15:40 ID:8J5Eq6PC0(1) AAS
scanfに道に落ちているを食べさせてはいけません
740
(1): (ワッチョイ 492a-jhJX) 03/28(金)08:23 ID:+OZuQWBg0(1/4) AAS
AA省
741
(1): (ブーイモ MM26-xG3a) 03/28(金)08:29 ID:v2Oxq7uoM(1/2) AAS
おれの作ったCコンパイラはそんな警告出さないけど何か文句ある?
742: 740 (ワッチョイ 492a-jhJX) 03/28(金)09:29 ID:+OZuQWBg0(2/4) AAS
>>741
あー、なるほど。↓よ。

$ cc --version
cc (GCC) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
743: はちみつ餃子◆8X2XSCHEME (ワッチョイ ed32-p0tU) 03/28(金)11:25 ID:gM96YdDw0(1/3) AAS
>>740
出さないコンパイラはあるし、その場合に警告を出すコンパイラであっても printf 類を特別扱いしてなんとかしてるので、可変長引数一般では型が合わないときに検出されない。
744: 740 (ワッチョイ 492a-aKLX) 03/28(金)13:15 ID:+OZuQWBg0(3/4) AAS
なるぽろ。%ld に変更せず、放っておくか。ありがとう。

ちなみに、逆に、%ld だと警告する場合も有り得るのだろうか。例えば off_t が非 long の機種があるとか。
745
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ ed32-p0tU) 03/28(金)13:32 ID:gM96YdDw0(2/3) AAS
x86-64 なら System V ABI ではどうせ 64 ビットレジスタで受け渡されるからそこんところでは問題にならないのだが、最適化したときにどうなるかまるで予想がつかない。 放置してよいとは言えない。

いったん intmax_t にキャストするのが正当な方法だと考えられている。
外部リンク[html]:www.jpcert.or.jp
746: (ワッチョイ 6eef-29WZ) 03/28(金)15:39 ID:Gm0qUC0n0(1) AAS
struct X* x;で自動変数を定義した場合
スタック上のどこかにstruct Xの領域が確保されたりしますか?
747: (ブーイモ MM26-xG3a) 03/28(金)15:47 ID:v2Oxq7uoM(2/2) AAS
されない
748: 740 (ワッチョイ 492a-mzfN) 03/28(金)17:27 ID:+OZuQWBg0(4/4) AAS
>>745
> printf("%ju", (uintmax_t) x);

なるぽろ。ありがとう。
749
(1): (ササクッテロラ Spf1-7PGi) 03/28(金)19:09 ID:Yj8GIx0sp(1) AAS
なんだよjって、何の略だ?
750: はちみつ餃子◆8X2XSCHEME (ワッチョイ ed32-p0tU) 03/28(金)22:16 ID:gM96YdDw0(3/3) AAS
>>749
なんらかの単語の略 (頭文字) というわけではないらしいよ。
> j is sort of like "i" for integer
外部リンク[htm]:www.open-std.org
751: 警備員[Lv.2][新芽] (ワッチョイ 6dcd-maST) 03/28(金)23:06 ID:UFqBPtr80(1) AAS
μ→uみたいなものか

大文字の I はもう使われてふのかな?
752
(2): (アウアウウー Saa5-WcQO) 03/29(土)16:07 ID:M3jsTRd4a(1) AAS
long long や unsigned long long の出力に %lld や %llu って昔は使えてた気がするが
最近はだめなんかな
%I64 とか %U64 みたいなのになってるん
753: はちみつ餃子◆8X2XSCHEME (ワッチョイ ed32-p0tU) 03/29(土)16:54 ID:HRez4USp0(1) AAS
>>752
I64 とかはマイクロソフトの拡張。
新しい方法じゃなくてむしろ古い方法が互換性のために残されているだけ。
今となってはあえて使う理由はない。
754: (ワッチョイ 2e2a-aKLX) 03/29(土)17:30 ID:bd7PveSA0(1) AAS
>>752
> %I64 とか %U64

移植が大変そうね。
755
(4): (ワッチョイ a92a-K+vz) 04/08(火)18:05 ID:f9O97Hv70(1) AAS
sudo で実行すると execl が動作しないように見える。なぜ?
$ cat -n e.c
   1 #include <stdio.h>
   2 #include <unistd.h>
   3
   4 int main() {
   5  pid_t pid;
省13
756: 627 (ワッチョイ 22ca-VGeA) 04/08(火)19:31 ID:HmugccjD0(1) AAS
まずコピーするなら手を入れるな手を入れると他も全部疑わなきゃいけなくなる
それからsudo -E ./a.outとsudo strace ./a.outを試せ
757: (ワッチョイ 798a-GhsC) 04/08(火)19:45 ID:dAM9KaxA0(1) AAS
縦の数字はなに?
普通にエラーになるだろそれ
758: (ワッチョイ a9b3-K+vz) 04/08(火)20:08 ID:0fraKCca0(1) AAS
catの引数に-n指定してるからだろ
759
(1): (ワッチョイ 4dc4-xzp7) 04/08(火)20:57 ID:brzdTu7q0(1) AAS
手元にあるfedora で試したが、
sudo ./a.out の結果表示は2行になった
多分、正常に処理できたようだ
760: 警備員[Lv.1][新芽] (ワッチョイ 4df5-hVWE) 04/08(火)22:40 ID:NxLLuNcW0(1/2) AAS
うちはダメでした
>>755 と同じような結果です
ubuntu22.04 lts
761: 警備員[Lv.1][新芽] (ワッチョイ 4df5-hVWE) 04/08(火)22:43 ID:NxLLuNcW0(2/2) AAS
あ、次のようにしたときです
sudo ./a.out

/tmp/log に追記されませんでした
762
(1): 755 (ワッチョイ a92a-ZtHn) 04/08(火)22:49 ID:Rmhs1Vne0(1) AAS
>>759
えー!? と別環境で実行したら、sudo でも execl が動作したように見える。なにこれ。

$ ./a.out
$ cat /tmp/log
13706 1
$ sudo ./a.out
$ cat /tmp/log
省5
763: はちみつ餃子◆8X2XSCHEME (ワッチョイ cd32-xzp7) 04/09(水)00:22 ID:06ntJanv0(1/3) AAS
親プロセスが先に死んだら子は init の養子になる。
だけどこの場合だとどちらが先に死ぬかはプロセスのスケジューリング次第で状況によるってことなんじゃないのかな。
Linux の事情はよく知らんけど。
764: (ワッチョイ 4df4-bRAX) 04/09(水)00:23 ID:Z/QH/Jgt0(1) AAS
Linux 板で聞いた方が回答ありそうな気がする。
765
(1): (ワッチョイ ae7e-GhsC) 04/09(水)15:00 ID:cB69i6Vg0(1/2) AAS
const unsigned char t100_day[3807] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
const unsigned char t100_night[3568] PROGMEM = { 0x89, 0x50, 0x4e, 略, }

String tenki_i = "01";

char*const unsigned char t100_day[3807] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
const unsigned char t100_night[3568] PROGMEM = { 0x89, 0x50, 0x4e, 略, }

String tenki_i = "01";

char* y_icon; // FIXME 型が分からない
省8
766: (ワッチョイ ae7e-GhsC) 04/09(水)15:01 ID:cB69i6Vg0(2/2) AAS
>>765
コピペ間違えました
正しくは以下です

char*const unsigned char t100_day[3807] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
const unsigned char t100_night[3568] PROGMEM = { 0x89, 0x50, 0x4e, 略, }

String tenki_i = "01";

char* y_icon; // FIXME 型が分からない
省8
767: (スッップ Sd22-yI6P) 04/09(水)15:16 ID:qDwL9bg0d(1) AAS
>>755もそうだし書いちまったもんはしょうがねーけどコードを載せる時は
どうしろこうしろって書いてあんだから従えよ
アンタどこ行ってもそんな感じなのか?
768
(2): (ワッチョイ 79f9-GhsC) 04/09(水)15:24 ID:Hnk7Q6m60(1) AAS
すみません、書き直しました
外部リンク:ideone.com

t100_dayなどは画像なんですけど、tenki_iの中のstrによって画像を変えたいです。
y_iconはどうやって指定したらいいでしょうか?
769
(1): (ワッチョイ 06a6-9hLw) 04/09(水)15:27 ID:lI8vd/RJ0(1) AAS
>>755
fork呼んだ親プロセスがreturn 0でいきなり終わってるのがダメ
wait呼んでプロセスの終了待ちしろ
770: はちみつ餃子◆8X2XSCHEME (ワッチョイ cd32-xzp7) 04/09(水)18:01 ID:06ntJanv0(2/3) AAS
>>768
その断片的なプログラムではよくわからんが型を合わせるだけなら y_icon の宣言はこうなるべきだと思う。

const unsigned char* y_icon;
771: はちみつ餃子◆8X2XSCHEME (ワッチョイ cd32-xzp7) 04/09(水)18:30 ID:06ntJanv0(3/3) AAS
>>768
ところでそれは C++ じゃない?
なんでこのスレで聞くの……。
772: 755 (ワッチョイ 6e2a-ZtHn) 04/09(水)19:53 ID:dFJfWRF+0(1) AAS
>>769
「お騒がせしました。」と言ったので、勝手ながら質問を終えた気がしていた。見てくれて有り難う。

>>755,762 については、Ubuntu においても sudo で execl は動作していた。
動作しないように見えたのは、Ubuntu 特有のファイル権限設定があり、root といえどもファイルにアペンドできないせいだった。Qiita にあったサマリが解りやすい。

外部リンク:qiita.com追記
> Ubuntu の /tmp のユーザファイルに root で追記できない

全く C言語に関係なかった。ごめんちゃい。
773
(1): (アウアウウー Sa21-NXaD) 04/20(日)14:12 ID:RiHDJnuQa(1) AAS
stdbool.h 真面目に使ってる人いる?あるいは使ってない方がおかしい?
774: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-C6fW) 04/20(日)16:06 ID:srj6a33k0(1/2) AAS
原則としては論理型が必要であれば stdbool.h (内で定義される bool) を使うべきだと思う。
論理型が C99 で導入されるより前の古いプログラム中で bool という名前を使っている場合に配慮して論理型の名前を _Bool にした上でその別名の bool を stdbool.h 内で定義するという変な構成になっている。
(もし bool という名前を独自の定義で使っている場合は単に stdbool.h を使わないという選択が可能。)
このような状況から、互換性の問題がなければ論理型は bool という名前にしたかったし、論理型の値は true, false と書きたいという意図が感じられる。
自分が書くプログラム内で名前が衝突するような問題がないのなら意図に乗っかっておくのが無難そうに思われる。

C23 からは bool, true, false がキーワードとして直接にサポートされるようになって stdbool.h は意味を失いただ存在するだけになった。
こういう変更をする以上はこれが C のあるべき新しい姿と考えられてるってことなんだろう。
省5
775: (ワッチョイ a95f-0ulL) 04/20(日)16:30 ID:VYLrteqj0(1) AAS
bool型だと関数成功はtrueで1
int型だと関数成功で0とか普通
混ぜるな危険
776: (ワッチョイ 6db1-h0BB) 04/20(日)17:33 ID:SQJ2+pRN0(1/2) AAS
戻り値が負数ならエラーってやつが(ry
777
(2): (ワッチョイ 5e93-M5IX) 04/20(日)18:02 ID:AC61QJPP0(1) AAS
関数の結果がboolのやつはエラー原因丸めて何が問題かわからないからクソだよな
778
(1): (ワッチョイ 8a7a-I3kk) 04/20(日)18:06 ID:sZ1mcHs70(1) AAS
>>773
なんでstdbool.hがあるのかよく分からないってこと?
779: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-imSP) 04/20(日)19:55 ID:srj6a33k0(2/2) AAS
>>778
「真面目に」というワードから「そんなにカッチリやるほどのもんかね?」みたいなニュアンスを感じる。
意味はわかった上でそれほど価値を感じてないのだと思う。
780
(1): (ワッチョイ f9ee-0INX) 04/20(日)21:08 ID:0ZeTNaMX0(1) AAS
#define false 1==0
#define true !false
不真面目なんでいつもこれでやってました
781: (ワッチョイ 6db1-h0BB) 04/20(日)21:22 ID:SQJ2+pRN0(2/2) AAS
>777
エラー理由が必要なやつは引数に返り値用ポインタ要求する設計になってんじゃね?
782: (アウアウウー Sa21-NXaD) 04/21(月)02:34 ID:DqUDvQMka(1) AAS
>>777
関数の結果の型がboolのやつが-1を返す例もあってな
783
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 65d3-imSP) 04/21(月)05:17 ID:jNnWMUsR0(1/2) AAS
>>780
stdbool.h がやってるような
#define false 0
#define true 1
ではなく無意味に遠回りな書き方をする理由は何?
784: (ワッチョイ 6639-nw4i) 04/21(月)05:35 ID:gJLXVah/0(1) AAS
そういや、boolの実値は処理系依存とはるか昔に習ったようなキモス
785
(1): (スッップ Sd0a-Rq/v) 04/21(月)05:47 ID:wZXY8H1ed(1) AAS
>>783
FAQを読め
786: はちみつ餃子◆8X2XSCHEME (ワッチョイ 65d3-imSP) 04/21(月)05:54 ID:jNnWMUsR0(2/2) AAS
>>785
これのこと?
外部リンク[html]:c-faq.com
そういのを好む人もいるとだけ書かれていて、理由の説明はない。
787: (ササクッテロリ Spbd-0ulL) 04/21(月)09:56 ID:i498vk5cp(1) AAS
#define TRUE (0==0)
#define FALSE !TRUE
この書き方はまだ世の中がBASICでソフト組んでた頃に見たわ
たぶんそれ以前のどこか別の言語からの輸入なんだとは思うが
かっこいいから好んで使ってる
788
(1): (ワッチョイ 6582-0ulL) 04/21(月)09:58 ID:JjvQDxsX0(1) AAS
まあ、まだtrueが0以外って仕様だった頃に、より処理系に沿った正確な値が欲しかったんだ
789: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-C6fW) 04/21(月)11:43 ID:++xqwTI40(1/2) AAS
>>788
PDP-11 時代の C のリファレンスマニュアルを見つけることが出来た。
外部リンク[ps]:web.archive.org
1975 年頃のもので、このときすでに比較演算子や等価演算子は 1 か 0 を返すことになっている。
たぶん最初からそうだったと思う。
C の基礎になった B の時点で既にこのような仕様なので。

ただ、全ての処理系が完璧に同じ仕様に沿っていたわけでもないだろうし、当時の事情の中で有用なテクニックだった可能性はあるかもしれない。
790
(1): (ワッチョイ 9e02-4o74) 04/21(月)12:00 ID:QKqUxhO90(1) AAS
いまでも「0は偽」という仕様しか謳われてないように見えるがどうだろう

むしろ「偽は0」という仕様が消えているようにも思えるが、どうだったっけ
791: はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-imSP) 04/21(月)12:43 ID:++xqwTI40(2/2) AAS
>>790
_Bool は整数型 (標準符号無し整数型) に分類されている。
整数型は他の整数型に変換したときに変換後の型で表せる範囲であるなら同じ値になるルールなので _Bool 型の 0 は 0 だよ。
792: (ワッチョイ f9ac-0INX) 04/21(月)12:51 ID:NLKNLeTR0(1) AAS
関数の戻り値だと、
0は正常終了、非0は異常終了
というのが多かったと思う
793: 警備員[Lv.1][新芽] (ワッチョイ 351a-kvZ8) 04/21(月)13:16 ID:3FvSqisv0(1) AAS
論理型のある言語でも
If b = True Then
なんて書かれるとモゾモゾしてしまう
794: (ワッチョイ 6610-VXNn) 04/21(月)13:36 ID:0RekbFS70(1/2) AAS
false=0,true=1に決めたとしても、いにしえのboolがint型な影響で行儀の悪い関数から2とか-999999999を返せてしまって
1以外のtrueで意図しない分岐になる恐れがあるから、ifの条件は0か非0かで判断しましょうというバッドノウハウ的なルールになったようだ
795: (ワッチョイ 6610-VXNn) 04/21(月)13:51 ID:0RekbFS70(2/2) AAS
BOOLの定義にさらに混乱に拍車をかけたのがWindowsAPIのGetMessage()で、戻り値の型をBOOLとしておきながら
実際には0、0以外、-1を返すというBOOLの概念が揺らぐような凶悪な仕様でif文に対し疑心暗鬼になったプログラマーが発生した

外部リンク:learn.microsoft.com
796
(2): (ワッチョイ 971f-3+vo) 04/28(月)20:12 ID:LzrB3b/O0(1/3) AAS
初心者です
vcのCL.EXEにパスを通したいのですがどれに通せばいいかわかりません。
86フォルダと64フォルダにそれぞれさらにフォルダが二つあって合計で4つCL。EXEが4っつあります。
86と64は32ビットと64ビットの違いかと思うのですが、64のフォルダにも二つあるのでわかりません
797: (ワッチョイ 971f-3+vo) 04/28(月)20:13 ID:LzrB3b/O0(2/3) AAS
>>796
CL。EXE

CL.EXEの間違え
798
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ b732-jewZ) 04/28(月)20:19 ID:clGXfLYj0(1/2) AAS
>>796
vcvarsall.bat にパラメータを渡して実行するか各アーキテクチャ向けバッチファイルを実行することで必要な環境変数の設定がされる仕組みになっている。
外部リンク:learn.microsoft.com
これらのバッチファイルを経由せずに直接環境を設定するのはやめたほうが良い。

バッチファイルの具体的な内容は各環境によって (インストール時の条件などによってかな?) 違うので他環境でインストールしたバッチファイルを持ってくるなと注意書きがある。
799
(1): (ワッチョイ 971f-3+vo) 04/28(月)20:39 ID:LzrB3b/O0(3/3) AAS
>>798
自分で直接やらない方がいいのですね
はって頂いたページを見ましたが初心者には難しいですね
でもこちらに載ってあるBATファイルで設定するのがいいのですね
ありがとうございます
800
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ b732-Dk0z) 04/28(月)20:54 ID:clGXfLYj0(2/2) AAS
>>799
私自身は今は使ってないからあまり把握してないのだけれど、普通にインストールしたらそのバッチファイルがスタートアップメニューに登録されなかったっけ?
801: (ワッチョイ 9ff5-ogCD) 04/28(月)21:29 ID:es1rmYMQ0(1) AAS
>>800
探してみたのですが見つかりませんでした。
PC買い替えたので改めて環境設定しているのです。
もう一度インストールし直すとあるかもしれませんね。
私が消してしまった可能性もなくはないので
802: (ワッチョイ ff8a-VpId) 04/28(月)21:32 ID:PCWkr5M/0(1) AAS
自分でPATHを通してみろ。っていう実習だとしたら。
たとえば、Hostx64の中のx86は、x64上でclを実行して、出てくるバイナリはx86用ってこと

「そうやって覚える」のもアリだが、vcvarsall を使いこなすこともぜひ覚えよう
1-
あと 200 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.026s