[過去ログ] C言語なら俺に聞け 163 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
167(1): (ワッチョイ a6e1-865n) 2024/09/14(土)23:04 ID:0gsw2riP0(10/12) AAS
はちみつはリテラルはコンパイル時にのみ必要な事と、実行時には必要な初期値(rvalue)を最適化で命令コードに埋め込む事を消えたと表現して、ごっちゃにしてるアホ
これが結論
168(1): (ワッチョイ a6e1-865n) 2024/09/14(土)23:11 ID:0gsw2riP0(11/12) AAS
リテラルは参照されないと言ってるのがその証拠
そりゃコンパイル時にのみに必要なその場でデータ構造を表現するリテラルを、実行時に参照出来る訳ないだろw
それが出来るのはコードをデータとして表現してるLisp だけだ
C++のテンプレートでも無理
C++のconstevalなら可能になった
std::formatはそれで実装可能になった
実行時には初期化の為のrvalueが絶対に存在する
169: (ワッチョイ a6e1-865n) 2024/09/14(土)23:13 ID:0gsw2riP0(12/12) AAS
constevalも文字列リテラルを参照可能なのはコンパイル時のみだった…
やっぱり真に実行時に文字列リテラルを参照可能なのはLisp だけだな
170: (ワッチョイ 8a56-/VPw) 2024/09/14(土)23:40 ID:5H/bnNk90(4/4) AAS
>>1 の C17 ドラフトのリンク C++17 のやつじゃん
次スレ立てるならこれに変えといて
外部リンク[pdf]:web.archive.org
171(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ 7932-IU9Y) 2024/09/14(土)23:53 ID:N2YvcTj50(14/14) AAS
>>167
起きていることは >>127 でこれ以上なく具体的に説明されてるんだから改めて厳密に表現しないと理解できないとは思わなかったんだよ。
>>168
文字列リテラルが静的記憶域期間を持つことは 6.4.5 に書かれてる。
実行フェイズに存在するオブジェクトだよ。 (最適化を抜きにして仕様通りに解釈すれば。)
配列の初期化子として現れる文字列リテラルの扱いは微妙かもという話が >>154 >>158 の指摘だが、
記憶域期間についての記述は文脈を指定せず文字列リテラル全部を対象にした記述に見える。
172: (ワッチョイ d7cd-qbvN) 2024/09/15(日)00:57 ID:/wZr5+b/0(1/2) AAS
>>163
そりゃ書き換える場合があるからでしょー
一個しかなかったら関数呼ばれるたびに初期値も書き換わってしまう
なんで悩んでるのこの人?
constつけたら一個ですむだろ多分
173(1): (ワッチョイ ffe1-1pYN) 2024/09/15(日)01:17 ID:STy65/7c0(1/5) AAS
>>171
> 実行フェイズに存在するオブジェクトだよ。
存在してんじゃねーかよ!
これが最適化で消えて良いかの話だよ!
gccの場合は命令コードに埋め込んでるけど、消えてる訳じゃないし、別のポインターから参照可能だ
174(3): はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-vU+L) 2024/09/15(日)01:30 ID:B6k8li/O0(1/3) AAS
>>173
配列とその初期化子として現れる文字列リテラルが別の存在だってことが俺が何度も書いてることだよ。
これがそんなに何度も何度も何度も何度も書かないと理解できないようなことか?
別のポインタは配列を指せるが、その初期化子として現れる文字列リテラルを指せるわけじゃない。
char* foo = "hoge";
のようなケースではポインタ foo は文字列リテラルを指してるということと対比しての話だぞ。
175(1): (ワッチョイ ffe1-1pYN) 2024/09/15(日)01:32 ID:STy65/7c0(2/5) AAS
ちなみに「文字列リテラル」が「実行時」に存在してる訳では全くない
はちみつはそこを勘違いしてる
静的記憶期間というのはスコープの事だ
まぁエクステントと言った方が正確だが
それはコンパイラーが理解できるものだが、それと「実行時」に存在する値を結びつけてはいけないし関係無い
DLLだとしたら静的記憶期間の変数も実行時には存在しない可能性もある
スレッドローカルストレージの変数もそうだな
省2
176: (ワッチョイ ffe1-1pYN) 2024/09/15(日)01:38 ID:STy65/7c0(3/5) AAS
>>174
> 文字列リテラルを指せるわけじゃない。
はい、これが間違いの全て
文字列リテラルはコンパイラーだけが理解できる「構文」に過ぎない
それを実行時にさせないとはこれいかに?w
文字列リテラルは「実行時」には何て名前になってんだ?
配列でもないぞ
省2
177(1): (ワッチョイ 9f56-3vlU) 2024/09/15(日)01:45 ID:hg9QOZOF0(1) AAS
>>171
なんかいろいろ書いたけど最終的には自分もそれで合っていると思う
実用上は正直どこで役に立つのかあまり思いつかないが、規格上どういう建て付けになってるのかはとりあえず理解できたかも
というか、実用上あんまり役に立つわけじゃないから今まで調べもしなかったというか
規格上は「リテラル」は存在せず integer/enumeration/floating/character は定数なんですね
それで定数は記憶域期間を持たない
文字列リテラルは静的記憶域期間を持つ
省4
178(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-vU+L) 2024/09/15(日)01:46 ID:B6k8li/O0(2/3) AAS
>>175
> 静的記憶期間というのはスコープの事
ちがう。 記憶域期間はオブジェクトの寿命の区分。
6.2.4 を参照のこと。
寿命の区分が設定されている以上はオブジェクト (メモリ上のどこかにある) のこと。
> 文字列リテラルで生成されたデータは実行時には確実にアクセス可能で、消えてるなんて全くあり得ない
関数 (C のプログラムは関数の集合なので実質的にプログラムの全て) はオブジェクトではない。
省3
179: はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-vU+L) 2024/09/15(日)01:53 ID:B6k8li/O0(3/3) AAS
>>177
C++ の右辺値参照も左辺値参照も左辺値なんだよね。
参照を経由したら左辺値になるなら最初からそう出来ないか? と思ったことはある。
180: (ワッチョイ ffe1-1pYN) 2024/09/15(日)01:58 ID:STy65/7c0(4/5) AAS
>>178
> ちがう。 記憶域期間はオブジェクトの寿命の区分。
だからエクステントと書いてんだろ!
もしかして理解出来なかったか?
> 配列の初期化子としての文字列リテラルは本来あるべき場所 (オブジェクト) から最適化で消えてるし
本来あるべき場所(オブジェクト)って何だよ?!
目茶苦茶だなw
省1
181: (ワッチョイ ffe1-1pYN) 2024/09/15(日)02:33 ID:STy65/7c0(5/5) AAS
初期化に使われた(文字列)リテラルが実行時にrvalueになったものに名前を付けるべきだな
これは最適化でも消えることはない(当たり前だが…)
名前がないとまたリテラルは消えるから参照出来ない野郎が発生しかねないw
182(2): (スッップ Sdbf-2MD7) 2024/09/15(日)12:24 ID:WkBCL5VYd(1) AAS
>>174
>char* foo = "hoge";
>
>のようなケースではポインタ foo は文字列リテラルを指してる
その表現が間違ってる。
fooは静的記憶域を指してるが正しい。
intptr_t *bar = 0xAABB;
省1
183(1): 警備員[Lv.2][新芽] (ワッチョイ 5707-/vo+) 2024/09/15(日)13:50 ID:krajCak80(1) AAS
>>char* foo = "hoge";
>>
>>のようなケースではポインタ foo は文字列リテラルを指してる
>
>その表現が間違ってる。
>fooは静的記憶域を指してるが正しい。
彼も文字列リテラルは静的記憶域に置かれると言ってなかったっけ
省2
184: (ブーイモ MM8f-GITO) 2024/09/15(日)16:04 ID:7leD3hDGM(1) AAS
もっと中身のある話しようぜ
185(1): (ワッチョイ 9794-z7on) 2024/09/15(日)17:53 ID:V70NGKYC0(1) AAS
>>68
規格に後置++演算子は実数型とポインタ型にしか使えないとあったけどそれの関係じゃないの?
規格でそう決まってるだけの話では?
186: (スプッッ Sd3f-2MD7) 2024/09/15(日)18:13 ID:/tCGodXOd(1) AAS
それだな
187(1): (ワッチョイ d7cd-qbvN) 2024/09/15(日)21:42 ID:/wZr5+b/0(2/2) AAS
ちなみに
int main(int argc, char *argv[])
と定義しても
argvは++できる
188(1): (ワッチョイ ff63-y7MN) 2024/09/15(日)23:27 ID:dUpBu3ui0(1) AAS
main の引数だけど、人によって好みがある
*argv[]だったり、 **argvだったり、
さすがにargv[][]はいないと思う
189(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-vU+L) 2024/09/16(月)08:22 ID:JwEVxA0h0(1/6) AAS
>>185
配列はポインタに型変換される。 だから型は合うんだよ。
変更可能な左辺値でなければならないという制約に違反してる。
190(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-vU+L) 2024/09/16(月)08:28 ID:JwEVxA0h0(2/6) AAS
>>182-183
静的記憶域期間ってのは静的+記憶域期間なんだよ。 静的記憶域+期間じゃないんだよ。
まあ静的記憶域期間を持つオブジェクトが配置されている場所を静的記憶域と呼んでもカジュアルな場面ではそんなに不自然ではないとは思うけど。
実装上は専用のセクションに配置するのが普通だし。
191(1): (ワッチョイ 776e-SKTh) 2024/09/16(月)08:30 ID:+a4Swf1f0(1) AAS
ここまでのまとめ
Cは生産性が低い
C使いも生産性が低い
192(1): (ワッチョイ ff63-y7MN) 2024/09/16(月)10:51 ID:yKwOC4kA0(1/2) AAS
ID:+a4Swf1f0 は、言語に何使おうと生産性が低そう
193: (ワッチョイ ff2a-48Tr) 2024/09/16(月)11:29 ID:0nzerU0W0(1) AAS
>>191,192
生産性など、君ら社畜を計る尺度に過ぎんよ。
芸術家は、時間をかけて1行の美しさを追及するものだ。
194(1): (ワッチョイ 1751-z7on) 2024/09/16(月)12:43 ID:T6H9+ne50(1/2) AAS
>>189
変更可能な左辺値に配列型は含まれないからそれとは違うん?いつポインタに型変換されてんの?
195(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-vU+L) 2024/09/16(月)13:26 ID:JwEVxA0h0(3/6) AAS
>>194
6.3.2.1 より
> 左辺値がsizeof演算子のオペランド,単項&演算子のオペランド,又は文字配列を初期化するのに使われる文字列リテラルである場合を除いて,
> 型“〜型の配列”をもつ式は,型“〜型へのポインタ”の式に型変換する。
式として出てくる配列は一部の例外を除けば問答無用で変換されるので ++ のオペランドに配列が出てくるときも変換後のポインタ (rvalue) に対する演算 (実際には出来ないけど) として解釈されるということでいいと思う。
196(1): (ワッチョイ 1751-z7on) 2024/09/16(月)14:56 ID:T6H9+ne50(2/2) AAS
>>195
配列オブジェクトの先頭の要素で左辺値じゃないって書いてあるな
ということは左辺値の式の中に出てくる配列は左辺値じゃなくなっちゃうということ?
なんでそんな仕様になったんだろうね
197(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-vU+L) 2024/09/16(月)16:28 ID:JwEVxA0h0(4/6) AAS
>>196
C には配列の要素を指すポインタとは別に配列を指すポインタというものもある。
こんなことが出来る。
int foo[10];
int (*bar)[10] = &foo;
このときの bar の型は int(*)[10] ということになるわけだが……。
型情報として長さが含まれるのはかえって邪魔だ。
省5
198: (スプッッ Sd3f-2MD7) 2024/09/16(月)17:22 ID:udznqyd1d(1/2) AAS
>>190
横からすまんが、記憶域期間って言葉も変
199(1): (スプッッ Sd3f-2MD7) 2024/09/16(月)17:23 ID:udznqyd1d(2/2) AAS
>>189
>配列はポインタに型変換される。
それは関数呼び出しの場合だぞ
200: (ワッチョイ bf79-MnYn) 2024/09/16(月)17:29 ID:E0fXFEgV0(1) AAS
この糞コテは半端知識のかまちょだからNGやスルー推奨
201(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-6w0d) 2024/09/16(月)18:10 ID:JwEVxA0h0(5/6) AAS
>>199
こっちは根拠になる規格の文面を提示してるんだから違うというなら違うと思う根拠を提示して。
202: (アウアウウー Sa5b-E6+g) 2024/09/16(月)18:57 ID:ISRAyNkZa(1) AAS
>>188
そらargv[][]では誤りだもんな
203(1): (アウアウエー Sadf-N1Zj) 2024/09/16(月)21:32 ID:NNTpe0yPa(1) AAS
>>187
たしかに関数の引数だと違うんだな
外部リンク:ideone.com
#include <stdio.h>
char *hoge(char fuga[10])
{
++fuga;
省10
204: (ワッチョイ bf4f-NiVF) 2024/09/16(月)22:10 ID:hHcIxSUD0(1) AAS
>>197
流石に言ってる事が的外れ過ぎるのでもうちょっと勉強した方がいいと思うよ
205(1): 警備員[Lv.1][新芽] (ワッチョイ f731-/vo+) 2024/09/16(月)22:25 ID:z+htC2pc0(1/2) AAS
恥ずかしながら、静的記憶域期間(で合ってるのか?)という言葉を知らなくて、ライフタイムは「静的」に含意されているのかと思ったワ…
しかし、記憶域期間って違和感あるなぁ
206: 警備員[Lv.1][新芽] (ワッチョイ f731-/vo+) 2024/09/16(月)22:30 ID:z+htC2pc0(2/2) AAS
わけわからん
>>205は撤回します
207(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-vU+L) 2024/09/16(月)22:43 ID:JwEVxA0h0(6/6) AAS
>>203
余談だけど配列だけじゃなくて関数型も関数ポインタ型に調整されるよ。
208(1): (ワッチョイ 9f7c-2MD7) 2024/09/16(月)22:52 ID:TDYyKtgo0(1) AAS
>>201
規格に配列は常にポインタに変換されるなんて書いて無いぞ。
209: 2024/09/16(月)23:00 ID:f3T7KT8T0(1) AAS
>>208
「常に」とは書かれていない
「ポインタに変換される」ではなく「ポインタに型変換される」
>>102がまさにそれでしょ
E1という配列が関数呼び出しでない場合においてもポインタという型に変換されているから出来ること
210(1): (ワッチョイ ff63-y7MN) 2024/09/16(月)23:10 ID:yKwOC4kA0(2/2) AAS
>char *hoge(char fuga[10])
こう書いてあっても、関数内で10を使う訳ではない
関数内で仮に100個めの要素アクセスするロジック書いてもエラーにはならない
(実行時にはエラーになると思う、多分)
だから、
>char *hoge(char fuga[])
添え字無しにしても良いことになる
211: (ワッチョイ d7cd-qbvN) 2024/09/17(火)01:04 ID:BokinMog0(1) AAS
>>210
元々ローカルでchar hage[10];と定義して10以上をアクセスしてもコンパイル時にはエラーにならないでしょ
引数に[10]と書くとしたら可読性のため(この関数では[0~9]までアクセスする可能性があると明示するため)
212(1): (スプッッ Sd3f-2MD7) 2024/09/17(火)10:15 ID:9gub94Dsd(1/3) AAS
__FILE__ とか __LINE__ は大文字なのになんで __func__ は小文字なん?
213: (アウアウエー Sadf-N1Zj) 2024/09/17(火)10:17 ID:TMGdiCOOa(1/2) AAS
範囲の問題じゃなくて
++hage または hage++ が出来るか出来ないかが問題なんです
214(1): (ワッチョイ ff63-y7MN) 2024/09/17(火)11:06 ID:bX/ekV+z0(1/3) AAS
一見配列を受け渡ししているように見えるけれど、
実際はポインターとして受け渡ししているってことでしょ
215(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ d70f-6w0d) 2024/09/17(火)11:56 ID:FRc2ySeD0(1) AAS
>>212
__func__ はマクロではないからだと思う。
216: (ワッチョイ ff63-y7MN) 2024/09/17(火)12:47 ID:bX/ekV+z0(2/3) AAS
#include <stdio.h>
char hage[10] = {0};
char *hoge(void)
{
// ++hage; // error '++' には左辺値が必要です。
// return hage;
return &hage[1];
省6
217(1): (アウアウエー Sadf-N1Zj) 2024/09/17(火)13:07 ID:TMGdiCOOa(2/2) AAS
>>214
そんなことは判ってるよ
(char hage[10]) で hage++ または ++hage 出来ちゃってる(ように観える)のが問題なんでしょ
関数の引数は (char hage[]) または (char *hage) のみにすれば良かった
(char hage[10]) はどうみても蛇足(結局境界テストされてないし)
218: (ワッチョイ ff63-y7MN) 2024/09/17(火)13:11 ID:bX/ekV+z0(3/3) AAS
問題だと思う人は、使わないようにしましょう
開発サイトでそういうルールを用意するのも手です
219: (スプッッ Sd3f-2MD7) 2024/09/17(火)17:17 ID:9gub94Dsd(2/3) AAS
>>215
納得しました。
220: (ワッチョイ 9ffd-NiVF) 2024/09/17(火)20:17 ID:dLWvmxgr0(1) AAS
>>197
そもそもstr系mem系はアドレスを受け取るんであって配列を受け取る関数ではないっていう勘違いがあるんだけど
それはともかく大きさがどうのとかなんちゃらが都合がいいとか、本当にC言語でなんかプログラムを書いた事あるの?
221: (スプッッ Sd3f-2MD7) 2024/09/17(火)20:58 ID:9gub94Dsd(3/3) AAS
俺は尻より胸派なんだよね。
222(8): (ワッチョイ d7cd-qbvN) 2024/09/18(水)00:42 ID:wcwImUMc0(1/3) AAS
>>217
この場合に限らずcでは範囲チェックなどされないでしょ
必要なら自分でチェックするのが原則
void aaa(char hage[10],int idx)
{
if((UINT)idx < sizeof(hage)/sizeof(hage[0]))
printf("%d=%d¥n",idx,hage[idx]);
省4
223: (ワッチョイ bfee-GITO) 2024/09/18(水)01:22 ID:9DvoA/Ly0(1/2) AAS
ド素人w
224(1): (ワッチョイ d712-IGT5) 2024/09/18(水)05:59 ID:Y3+kk9yU0(1) AAS
>>222
c faq 6.21 (英文が詳しい)
外部リンク[html]:c-faq.com
>>207 の'調整'は'adjust'だろう
N1256を'adjust'で検索するのじゃ
Look, a new day has begun.
225: (ワッチョイ d710-SKTh) 2024/09/18(水)07:51 ID:9Z5pFVfx0(1) AAS
8/16bit時代の1バイトでも、1ステップでも減らせってのを経験した人と
最近の可読性、移植性、安全性優先設計が当たり前世代とのギャップ。
226: (ワッチョイ bf32-GITO) 2024/09/18(水)08:59 ID:9DvoA/Ly0(2/2) AAS
ギャップの問題じゃねーから
文脈すら理解できないじじいはすっこんでろ
227: (ワッチョイ 5701-vU+L) 2024/09/18(水)09:30 ID:Qk7JHPx80(1) AAS
専門板によくいるアスペだな
228: (ワッチョイ ff63-y7MN) 2024/09/18(水)10:34 ID:UYQxUcxO0(1/4) AAS
225 は釣りでしょう
229: 警備員[Lv.2][新芽] (ワッチョイ bfd9-/vo+) 2024/09/18(水)13:08 ID:eTGNACyx0(1/2) AAS
>>222
sizeof(hage) で配列のサイズが求まるの?
と思ったら、「char * (ポインタ)の大きさを返すよ」みたいな警告が @gcc
230: (ワッチョイ ff63-y7MN) 2024/09/18(水)13:15 ID:UYQxUcxO0(2/4) AAS
釣りだか天然だか、分からなくなってきた 笑
231: はちみつ餃子◆8X2XSCHEME (ワッチョイ f732-vU+L) 2024/09/18(水)13:35 ID:td/rS/wM0(1) AAS
今どきの統合開発環境を使ってるなら変数の型くらい見れると思うけれど
古典的な手法としてあえてエラーにしてメッセージを読むという型の確認方法がある。
void foo(char bar[10]) {}
int main(void) { int baz = foo; }
こんなコードをたとえば gcc でコンパイルを試みると
error: initialization of 'int' from 'void (*)(char *)' makes integer from pointer without a cast
というエラーになる。
省3
232: 警備員[Lv.3][新芽] (ワッチョイ bfa6-/vo+) 2024/09/18(水)13:51 ID:eTGNACyx0(2/2) AAS
なるほど
勉強になります
233(1): (スプッッ Sd3f-2MD7) 2024/09/18(水)14:54 ID:LEoKOQZWd(1/5) AAS
>>222
>この場合に限らずcでは範囲チェックなどされないでしょ
>必要なら自分でチェックするのが原則
>
>void aaa(char hage[10],int idx)
>{
> if((UINT)idx < sizeof(hage)/sizeof(hage[0]))
省8
234: (スプッッ Sd3f-2MD7) 2024/09/18(水)14:56 ID:LEoKOQZWd(2/5) AAS
書式のとのuzじゃなくてzuだっけ?zだけでよかったっけ?
ま、主旨はそこじゃないからいっか。
235(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ d7e2-6w0d) 2024/09/18(水)15:47 ID:3rwci13t0(1) AAS
>>233
sizeof(char*)/sizeof(char) ということになる。
sizeof(char) は確実に 1 だから結果としては単に char* のバイト数ってことだね。
この場合は「『もし 10 に意味があるとしても』境界チェックはされないことに変わりないのでなんの役にも立ってない。 役に立てるとしたらここまで書かなきゃならない」というのが主旨なのであくまでもしもの話。
実際の値はどうでもよい文脈だと思う。
236: (ワッチョイ d7cd-qbvN) 2024/09/18(水)16:33 ID:wcwImUMc0(2/3) AAS
>>224
ああそうなの
昔のことだから記憶違いをしてたようだ
237: (スプッッ Sd3f-2MD7) 2024/09/18(水)16:43 ID:LEoKOQZWd(3/5) AAS
>>235
>>222 の「これなら[10]に意味が出る」ってのは間違いってことね。
238(1): (ワッチョイ d7cd-qbvN) 2024/09/18(水)18:00 ID:wcwImUMc0(3/3) AAS
'ここの10は意味ありませんよ'
って警告を出してもいいじゃんってことでしょ
それなら例えば
typedef char HAGE_TBL[10];
void foo(HAGE_TBL hage) {}
(毎回10とか書くのは危険なのでこういう使い方が多いと思う)
などとした場合に毎回警告が出てうざいことになるんじゃないか
239: (ワッチョイ ff63-y7MN) 2024/09/18(水)18:07 ID:UYQxUcxO0(3/4) AAS
警告ならまだ笑っていられるが、
明らかに書いた奴の意図とは違って誤動作してるだろ
240: (スプッッ Sd3f-2MD7) 2024/09/18(水)18:30 ID:LEoKOQZWd(4/5) AAS
>>222 のバグを晒すスレはここですか?
241: (スプッッ Sd3f-2MD7) 2024/09/18(水)18:46 ID:LEoKOQZWd(5/5) AAS
C言語は難しいな
242: (ワッチョイ ff63-y7MN) 2024/09/18(水)20:53 ID:UYQxUcxO0(4/4) AAS
void aaa()の中で、
引数で渡された値が何かを確かめて見ると良い
それと、 sizeof(hage)やsizeof(hage[0])の値も
プログラム書いた人の意図としては、
sizeof(hage)/sizeof(hage[0])が10になるはずなんだが
さてさていくつだろうか?
243: (ワッチョイ 9f7c-2MD7) 2024/09/19(木)00:15 ID:5H+5PGV10(1) AAS
もうやめて!>>222 のライフはゼロよ!
244(1): (ワッチョイ 9f1e-S785) 2024/09/19(木)06:32 ID:zdFAvN1E0(1) AAS
本人が新たなネタを出してくるんだもん。
>>238 でもわざわざ
typedef char HAGE_TBL[10];
ってやっておきながら、なんで
void foo(HAGE_TBL hage)
なの? 構造体と同じように
void foo(HAGE_TBL *hage)
省1
245(1): (ブーイモ MMbf-GITO) 2024/09/19(木)15:36 ID:bQAYIDF0M(1) AAS
cは洗練された型システム持ってないんだからそんなところ頑張っても無駄なんだよ
この悟りに至って始めて脱初級
原則語るならそれからにしてくれ
246: (ワッチョイ ff63-y7MN) 2024/09/19(木)15:40 ID:cPR7xA8Z0(1/3) AAS
Cは一部の洗練された型システム持つ言語よりも遙かに自由度が高い
そこが分かってようやく中級レベル
あとは本人の努力次第で空も飛べるし海も潜れる
247: (ワッチョイ bfda-GITO) 2024/09/19(木)15:50 ID:c2v//UgT0(1/2) AAS
おいおい
そのぶん危険なんだから持ち上げる部分でもないだろ
お前も初級
上下前次1-新書関写板覧索設栞歴
あと 755 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.026s