19/06/08 15:41:42.45 KzIynz9K0.net
ダメだこりゃ
851:デフォルトの名無しさん
19/06/08 15:41:57.08 bm2ApAetM.net
正常時1で異常時0を返す関数が混ざってたり
正常時ポインタで異常時ヌルポ返す関数があったり
それらの関数の返り値を全部 if でチェックしててカオスだったことがあります
852:デフォルトの名無しさん
19/06/08 15:56:39.68 KzIynz9K0.net
BOOLを返す関数が負数を返したかどうか調べにゃあかんやつとかな
853:デフォルトの名無しさん
19/06/08 16:38:04.87 WG7jlf5q0.net
ワインバーグの本にあったなあ。ドル紙幣はみんな同じ色、同じサイズで見分けがつきにくいけど、
それが常識だと思っている人は、一定の確率で間違えてしまうことも世界の法則で仕方のない
ことだと思っているとか。
854:デフォルトの名無しさん
19/06/08 17:13:44.27 auwh2hzj0.net
>>827
GetMessage()の悪口はいくら言ってもよいぞ
DWORDにしとけよ
855:デフォルトの名無しさん
19/06/08 18:39:07.71 jm0tDZO60.net
>>826
カオスっていうかこれ普通じゃない?
標準ライブラリのラッパー書くとき互換性保つために0成功にするでしょ
で他のオレオレライブラリはboolという
856:デフォルトの名無しさん
19/06/08 18:53:36.19 jXs/KV+s0.net
戻り地がboolのときはtrueが成功
intのときは0が成功なんだよ
857:デフォルトの名無しさん
19/06/08 19:39:01.75 ogfAGAzJ0.net
bool型ができたのはC99のときなので
858:デフォルトの名無しさん
19/06/08 19:42:23.71 jm0tDZO60.net
boolぐらいなにもインクルードしなくても使わせてくれぽよ
859:デフォルトの名無しさん
19/06/08 19:54:54.89 ogfAGAzJ0.net
「歴史的理由」という奴
860:デフォルトの名無しさん
19/06/08 21:28:56.66 gCLo3iIIa.net
>>830
それのせいでPrelではシステムコールと同名の関数の返り値がいまいち統一取れてなかったりして、結局マニュアル見ながら個別に覚えざるを得なかったりする。
Perlはだいたいは1が成功でundefが失敗なんだけどね。(undefはCでのNULLみたいなもの。未定義を意味する。定義されてて値が0の時とは違うが、書き方によっては同じように扱えることもある)。
861:デフォルトの名無しさん
19/06/08 21:58:16.60 nbjDJ9kZa.net
今C++にあるoptionalだっけ?
あんな感じの有ってもいいな。かなりうざい感じになるから使わんか。
862:デフォルトの名無しさん
19/06/09 11:06:53.62 42ARNGRn0.net
インクルードをURLで引っ張ってこれたら面白いのに。
863:デフォルトの名無しさん
19/06/09 11:17:01.45 ZHA7gcDF0.net
一発でウイルス仕込まれそう
864:デフォルトの名無しさん
19/06/09 11:59:40.15 W83DJxDE0.net
コスパ最強の副業「動画編集」で稼ぐ方法【生ハム登場】
URLリンク(www.youtube.com)
【最強の副業】動画編集で稼ぎ続ける人の条件【未来予想】
URLリンク(www.youtube.com)
【おすすめ副業・在宅ワーク】「動画編集」は初心者でも時給1,500円狙えます。
URLリンク(www.youtube.com)
【与沢翼】動画編集素人でも本気でやれば個人で月収1000万も夢ではないですよ。
実は動画ってすぐプロと同じクオリティで作れちゃうし月収20万はすぐですよ
URLリンク(www.youtube.com)
センスのいい映像を短時間で編集する方法
URLリンク(www.youtube.com)
865:デフォルトの名無しさん
19/06/09 14:38:56.62 zgQq0a060.net
>>837
/use/include ディレクトリをNFS マウントでもしとけ。
866:デフォルトの名無しさん
19/06/11 14:18:29.61 suKt4vmPd.net
すみません、質問があります。
環境はlinuxです。
ある共有ライブラリlibA.soをロードするプログラムbがあります。
このプログラムbをlibA.so抜きでgccでビルドすることはできるでしょうか?
もちろん実行時にはlibA.soは用意します。
867:デフォルトの名無しさん
19/06/11 15:09:21.38 UmxJxqMia.net
>>841
リンクされる関数やグローバル変数が全て揃ってれば誤魔化し効くのではないかな。
868:デフォルトの名無しさん
19/06/11 16:20:37.89 X43Szptna.net
シンボルだけ定義したsoファイルを用意するのが普通ではないかと
869:デフォルトの名無しさん
19/06/11 18:35:03.43 z8NS6dzQ0.net
ダミーファイルを用意とか、かっけえな
870:デフォルトの名無しさん
19/06/11 20:38:50.54 UmxJxqMia.net
そ、そうか?
871:デフォルトの名無しさん
19/06/11 21:26:50.36 suKt4vmPd.net
ビルド用のsoファイルを用意する、でいこうと思います。ありがとうございました!
872:デフォルトの名無しさん
19/06/11 22:01:48.05 vnr40KfNa.net
スタブってやつね。
dlopen使うと基本そうなると思う。
もともと自動的なシンボル解決して
873:る場合は無視できたかも。
874:デフォルトの名無しさん
19/06/12 00:00:59.88 82Q6hISi0.net
>>847
お前は何を言ってるんだ
875:デフォルトの名無しさん
19/06/12 02:05:00.40 vWkgJgOw0.net
たぶん、DLL import, export みたいな定義ファイルさえあれば、コンパイルできるだろ?
876:デフォルトの名無しさん
19/06/12 09:25:53.48 apqCeTcNa.net
DLL? Windowsだとそうなの?
877:デフォルトの名無しさん
19/06/12 10:40:58.95 QpFBULjO0.net
a) dll import キーワードつきのヘッダでコンパイル
DLLを読み込みシンボル解決する .lib をリンク
実行時には dll 読み込みをやってくれる (無いと文句言う)
b) 自前で DLL読み込んで GetProcAddress で関ポにセットして、
その関ポを呼び出すラップ関数を用意
自前ロードしてるので、実行時に無い時別の処理の記述が可能になるん
878:デフォルトの名無しさん
19/06/13 13:22:19.29 tXoihok+d.net
大学でc言語を学び始めました
ポインタが意味不明でした
何がわからないのかわからない
879:デフォルトの名無しさん
19/06/13 13:54:13.91 wTJRUi3Ix.net
メモリとアドレスの概念が分かってないからじゃね?
880:デフォルトの名無しさん
19/06/13 19:07:04.64 mXxRrk+K0.net
現実世界にポインタと同じものを説明する概念がないから簡単な説明のしようがないんだよなぁ。住所録とか余計こんがらがるし。
素直に本を沢山読んでプログラムを組んで慣れるしか無い
881:デフォルトの名無しさん
19/06/13 19:27:38.29 HQZYLHkVa.net
本にページ数がない世界?
882:デフォルトの名無しさん
19/06/13 20:56:34.51 8abVSTNa0.net
アドレスは&つけてprintfした時に出てくるやつでしょ?
箱のラベルみたいなのだとかなんとか言われた気がする
メモリは単純に容量?
別関数で計算した値をmain関数に持ってくる時にポインタを使えばreturnがいらないだとかコピーじゃなくて直接数値を変えるから処理が楽だとか書いてあるけど結局普通に代入するのに比べて利点がよくわからない
883:デフォルトの名無しさん
19/06/13 21:10:17.33 mvKDv9Bs0.net
タワーマンション
884:デフォルトの名無しさん
19/06/13 21:10:41.15 HQZYLHkVa.net
何かの容量と言ったときの「何か」がメモリです。
利点は基本的にないです。
885:デフォルトの名無しさん
19/06/13 21:22:11.61 0e3y3dPM0.net
データが存在する場所
886:デフォルトの名無しさん
19/06/13 21:44:19.75 VQ1VjdQ1M.net
みんな思い思いのモデルで遊んでるから、パパは箱モデル出しちゃうぞ
887:デフォルトの名無しさん
19/06/13 21:45:29.38 vVgcrwZV0.net
うさみみハリケーンでメモリ覗いてチートしよう!
888:デフォルトの名無しさん
19/06/13 21:52:15.32 o6WQvi940.net
天使のような微笑みに
時は立ち止まる
889:デフォルトの名無しさん
19/06/13 22:05:37.40 mXxRrk+K0.net
なんか分からない部分のコード示してもらわないと
ここの有能な人たちもどう説明したらいいか分かんないから雑談始まったがw
890:蟻人間
19/06/13 22:14:30.76 wtG0GGqp0.net
1ビットが0か1かの二通りを表せる情報量。
1バイトは0~255までの256通り(2の8乗)を表せる情報量で8ビットに等しい。
1バイトを複数並べたのがメモリーで、各バイトの位置がアドレス。
891:デフォルトの名無しさん
19/06/13 22:16:01.81 dMX2AWSU0.net
このスレにエスパーいるの?
892:蟻人間
19/06/13 22:22:12.70 wtG0GGqp0.net
アドレスに型情報を加えて、先頭アドレスを起点として配列のようにアクセス可能にしたものがポインタ。
しかし、配列は実体を要求するが、ポインタは実体を要求しない。ヌルポインタは、何も指し示さないポインタ。
893:デフォルトの名無しさん
19/06/13 22:29:06.28 o6WQvi940.net
ポインタ配列ってやると実体のない配列になるのかなw
894:デフォルトの名無しさん
19/06/14 00:57:04.32 v+vUDnm40.net
ポインタ配列
895:? ポインタの配列 *array[] 配列のポインタ (*array)[]
896:デフォルトの名無しさん
19/06/14 06:12:05.65 hJXFGwRg0.net
“メモリ”って言葉がフラッシュメモリのような、
ストレージデバイスのイメージになってるのも
説明を難しくしてる要因かもしれないね。
メモリは記憶単位ごとに数字で番地が振られていて…と言っても、
「メモリってディレクトリ構造中のファイルとして記憶するんじゃないの?」
みたいな感じに、互いの言葉の意味がチグハグで。
897:デフォルトの名無しさん
19/06/14 06:41:21.97 f7k/n5Cq0.net
RAMとROMの違いなんて今の時代説明しても分かる人の方が少ない気がする
898:デフォルトの名無しさん
19/06/14 07:27:48.00 Q6PAXFreM.net
>メモリは記憶単位ごとに数字で番地が振られていて
キャッシュメモリ「せやろか?」
899:デフォルトの名無しさん
19/06/14 07:30:51.51 0tg6L2nj0.net
URLリンク(i.ytimg.com)
URLリンク(upload.wikimedia.org)
やっぱりコレを見せれば理解しやすいんでね?
900:デフォルトの名無しさん
19/06/14 08:11:51.98 9CL7rguOx.net
>>872
磁気コアメモリと、右側はRAMACか?
901:デフォルトの名無しさん
19/06/14 08:31:34.65 0nKPup2VM.net
磁気ドラムだよ
ランダムアクセスでさえないのにメインメモリにしたとかいう
902:デフォルトの名無しさん
19/06/14 09:02:07.63 vN7LRDhO0.net
>>856
ポインタ=君と感覚を共有してる全く同性能の影分身だ。
君の価値が100万なら、影分身は1円で作れる。
ポインタのメリットは会社が君を働かせたい時、君を直接雇うと100万円かかるが、影分身を雇うと1円で済むわけだ。
影分身が働いてる間、君は家でエロゲでもしてればいい。
気をつけないといけないのは、仕事中、影分身の腕が切断されたら、エロゲやってる君の腕も切断されるし
影分身が死んだら君も死ぬ。
これ以上わかりやすい説明はないと思うが、どうよ?w
903:デフォルトの名無しさん
19/06/14 09:44:07.68 y8r4DOsw0.net
例えられても伝わらないとさらに混乱させるのが、ポインタと配列周辺の話
904:デフォルトの名無しさん
19/06/14 10:03:42.87 +nXqXsIga.net
>>875
分身と言ってしまうとそっくりな実体がもう一つあるかのように思ってしまうのではないか?
やはり実体を指し示すものを連想させる何かにした方が良いのではないか?道標とか。
905:デフォルトの名無しさん
19/06/14 10:26:13.82 6se/aPBa0.net
このように、どうわかりやすく書こうとしてもどっかに不都合が生じるのがポインタの説明
素直にコンピュータの仕組みを勉強するしかないんや・・・
906:デフォルトの名無しさん
19/06/14 10:36:21.57 9CL7rguOx.net
ポインタはWindowsのショートカットみたいなもの。
これでもまだ誤解されそうね。
907:デフォルトの名無しさん
19/06/14 11:45:14.96 suWeiIcg0.net
インデックスレジスタを拡張したもの
908:デフォルトの名無しさん
19/06/14 12:26:01.65 2kFHhEHgd.net
キャッシュとバッファの違いを教えてください
909:蟻人間
19/06/14 12:32:55.71 lQGpZUNAd.net
キャッシュは次回のアクセスを高速化するためにデータを一時的に保存しておくこと。
バッファはデータを受け止めるために、保存場所を確保するためのメモリー領域。
910:デフォルトの名無しさん
19/06/14 14:56:26.65 6Rxhp4270.net
アセンブラやらせてみる。
911:デフォルトの名無しさん
19/06/14 15:05:09.54 AQvHkPsD0.net
>>881
文脈による
汎用機
912:だと二次キャッシュをバッファストレージなんて言ったりすることもあるし
913:デフォルトの名無しさん
19/06/14 17:36:32.38 TPMloxQtM.net
>>875
本体がパンツ下ろしたら影分身も職場でパンツ下ろすんですね分かります
914:デフォルトの名無しさん
19/06/14 17:45:59.79 zWOLB0k60.net
ポインタがよくわからないんだけど、普通にメモリアドレス==ポインタって認識なの?
int i;
int *p=&i;
の時に変数iのポインタであるpっていういい方は正しいですか
915:デフォルトの名無しさん
19/06/14 17:52:24.52 f7k/n5Cq0.net
メモリアドレスは格納されるけど
メモリアドレス==ポインタっていうのは違う気がする
nullだのvoidだのもあるし
916:デフォルトの名無しさん
19/06/14 17:58:41.54 Soq0+PVxa.net
iのポインタを格納してるポインタ変数p
値自体を問題にするときはアドレスだが、プログラム中で操作の対象となってる場合はポインタって感じだな。
917:デフォルトの名無しさん
19/06/14 18:21:37.60 Js4PARtC0.net
>>886
ポインタはメモリアドレスと型もってて
メモリアドレスからのデータをその型として解釈する
918:デフォルトの名無しさん
19/06/14 18:23:47.92 zWOLB0k60.net
なるほど、なんとなくわかったありがとう。混乱の原因はポインタっていう言葉がいろんな使われ方してるからだった。
919:デフォルトの名無しさん
19/06/14 18:25:31.19 Kaq8zorwa.net
こう書くとまた荒れそうだが、ポインターとはアドレスが入った変数である、というのは正しい。
NULLは0番地を特別扱いしてるだけだし、void *もあくまでアドレスだ。
920:デフォルトの名無しさん
19/06/14 18:32:50.01 N06YB3IUM.net
>>887
nullはまだしもvoidは関係なくね?
921:デフォルトの名無しさん
19/06/14 18:34:58.75 Js4PARtC0.net
荒れる要素なくない?
メモリアドレスを保持する整数と型を組合せてあるだけだし
void*はアドレス保持するだけの変数って意味じゃないの
922:デフォルトの名無しさん
19/06/14 18:35:21.76 6z9b86iK0.net
void *p;
p++ を許すのは GCC拡張だっけか
923:デフォルトの名無しさん
19/06/14 18:37:46.52 AQvHkPsD0.net
>>891
「正しい」とか書くと荒れる元にしかならん
(初心者のうちは)…「という理解でいい」ぐらいにしとき
924:デフォルトの名無しさん
19/06/14 18:39:36.73 BA+tS0rQa.net
>>891
NULLの件はそれ逆だろう。
実際の0番地を特別扱いにしているのではなく、「どこも指さない特殊なアドレス」を表記するために整数0を使用しているだけで、0番地が特別な訳ではないはず。まあ実際にメモリ割り当てで0番地を割り当てることはしないだろうけど。
void*も、型を指定しないポインタを表すのに使っている型の指定であり、アドレスというのはおかしい。
925:デフォルトの名無しさん
19/06/14 18:45:34.86 Js4PARtC0.net
>>894
サイズどういう扱いなのそれ
926:デフォルトの名無しさん
19/06/14 18:48:29.67 6z9b86iK0.net
>>897
確かポインタ演算時は1バイト (char) 扱いだったかな?
927:デフォルトの名無しさん
19/06/14 18:52:58.09 Js4PARtC0.net
1バイトなんか
まあそりゃそうか
928:デフォルトの名無しさん
19/06/14 21:41:25.35 WbpzR08B0.net
void*なんていらなくね?char*でいいじゃん
構造のわからないものは「バイト列」って意識でしょ?
929:蟻人間
19/06/14 21:47:11.03 Qn7Uv1x90.net
>>900
void *がないとmemcpyに引数を渡すとき面倒。
930:デフォルトの名無しさん
19/06/14 21:51:26.70 6z9b86iK0.net
double * には double * だけを許し char * や strucut foo * を渡したらアカンと
要求される型を厳しくチェックしようとすると
「ポインタだったら実体の型は何でもいい」 という指示を char * に含ますわけにはいかない
931:デフォルトの名無しさん
19/06/14 21:52:14.30 sIZagWQx0.net
汎用ポインタがchar*型になってたらコードレビューは絶対に通さないわ
932:デフォルトの名無しさん
19/06/14 22:42:50.69 6se/aPBa0.net
汎用ポインタというかvoid型という概念そのものが嫌い。
全てを厳密にやれ。言語を作る時点でまず関数に戻り値を強制すべきだったんだ。
ポインタわからん軍の原因はvoid型とかいう曖昧なせいなの�
933:ェあるせいなのも一理あろうて。
934:デフォルトの名無しさん
19/06/14 23:06:06.10 sIZagWQx0.net
>>904
関数型言語に行ってらっしゃい
935:デフォルトの名無しさん
19/06/15 00:02:16.99 n7CfuAo60.net
Kotlin もよろしく
936:デフォルトの名無しさん
19/06/15 01:25:34.80 RN+u9pJY0.net
windowsにおいて
setLocale(LC_ALL, "en_US.UTF-8");
が成功する環境と失敗する環境があるのですが何が原因かわかりません。。何かご存じの方いらっしゃらないでしょうか?
937:デフォルトの名無しさん
19/06/15 09:25:25.61 oZ4xCIwS0.net
>>904
お前の好き嫌いなんてどうでもいいし、よくわからん時点ならvoid*なんて無視しとけばいいだけ
この手の人は何故か全部を一気に理解しようとするけど今どきの言語仕様でそれやったら終わらんよ
938:デフォルトの名無しさん
19/06/15 09:37:31.78 pAE5sudp0.net
「俺の考える最強に分かりやすいポインタの説明」
・・・無理
939:デフォルトの名無しさん
19/06/15 10:05:45.19 QD7Sd0bs0.net
>>907
OSは?両方ともWindows10?
940:デフォルトの名無しさん
19/06/15 10:23:13.60 T0BSudQv0.net
>>908 void君だろ
C言語なら俺に聞け 148
スレリンク(tech板:37番)
37 名前:デフォルトの名無しさん (ワッチョイ f94f-yqSl)[sage] 投稿日:2018/09/22(土) 01:42:06.64 ID:16ZpsTnK0
>>36
マジでIDE使え。
そして貼るときはlanguageをCにしとけ。シンタックスハイライトが変わるから。
で、どれが分からんの?
> enter
> find
> delete
> show_all
> delete_all
mainはこの際分からなくていい。
最初に理解しないといけないのは show_all だ。
ただし細かいことを言ってもキリがないが、
> void show_all(void)
なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
さらに酷いのは show_all 内でグローバル変数 address を掴んでいること。
普通は void show_all(tag_address* ta) だよ。
そうじゃないと複数のリストがあったときに使い物にならないだろ。
マジな話、このソースのレベルの本なら捨てた方がいい。
俺は大学の教材がいいと思うぞ。
(読んでないが)リストならググったら東工大とか出てきた。
URLリンク(www.is.titech.ac.jp)
941:デフォルトの名無しさん
19/06/15 11:55:35.29 hahimQeS0.net
懐かしいな、void君
942:デフォルトの名無しさん
19/06/15 13:59:23.10 RN+u9pJY0.net
>>910
コメントありがとうございます。
8と10で成功する端末があることを確認しています。失敗する端末は今のところ10だけです。
そして
SetConsoleOutputCP(65001);
を使用することで失敗する端末でもUTF-8をコンソールに表示でき、一応目的は達成できました。
調べてみると、結局のところwindowsではsetlocaleで2バイト以上文字は設定できないとのことだったのですが、ではなぜ成功する端末があるのか……
943:デフォルトの名無しさん
19/06/15 15:49:06.56 fUxHfD4R0.net
謎だな
944:デフォルトの名無しさん
19/06/15 16:57:06.86 RWV4c9qt0.net
引数voidって古いシステムの保守でたまに見るな
945:デフォルトの名無しさん
19/06/15 16:59:05.33 5ne/m9/q0.net
と、古いシステムの保守なんかやったことねえやつがぬかすか
946:デフォルトの名無しさん
19/06/15 18:17:17.87 ulIUfSMj0.net
引数voidは今でも普通に使うけどな
947:デフォルトの名無しさん
19/06/15 18:22:29.22 5ne/m9/q0.net
void show_all(); なんて書くやつ見かけたらなるべく距離を置く
948:
19/06/15 18:40:21.75 8bW7ANPO0.net
>>918
C++ ではそれは当たり前ですが…
949:デフォルトの名無しさん
19/06/15 18:42:04.96 fAAVk5UIM.net
>>918の場合
C++なら問題ない
C言語だとちょっと不味い
950:デフォルトの名無しさん
19/06/15 18:46:57.27 5ne/m9/q0.net
おまえからも距離を置きたいぜ
ここをどこだと思っている
C++なら無問題などと言わねばわからぬ者がいるとでも思っているのか
951:デフォルトの名無しさん
19/06/15 22:30:32.42 BY4KYcRQ0.net
とりあえず、シングルステートでも返り値をboolにする俺がやってきましたよ。
952:デフォルトの名無しさん
19/06/16 02:14:21.54 wRD2pOBha.net
ケースバイケースで使い分ける
953:デフォルトの名無しさん
19/06/16 08:10:06.75 ORkp7ynDM.net
>>921
>>918の意図が分かってない者がいるぞ
さあどうする?
954:デフォルトの名無しさん
19/06/16 10:35:26.32 jvyHVZd00.net
>>924
世も末だな
困ったもんだ
955:デフォルトの名無しさん
19/06/16 11:22:43.26 RqGVrKm70.net
大丈夫だよ
ここを見ながらシステム作っている奴はいないから
956:デフォルトの名無しさん
19/06/16 13:20:19.90 X7GbKeYn0.net
Cはvoid省略すると可変長引数扱いになるんじゃなかったっけ?
C++は省略してもvoidだけど
957:
19/06/16 13:35:27.88 gDHKfsB60.net
>>927
無指定でどうこう、というのは確か C89 までの話だったかと
C99 では C++ と同じく省略しても void と記憶しています
958:デフォルトの名無しさん
19/06/16 13:51:25.10 Mp4zqsM90.net
>>928
破壊的変更が行われた仕様が回避できるなら回避すべきだな
959:デフォルトの名無しさん
19/06/16 13:58:56.49 VBKycPxl0.net
>>928
記憶違いでしょ。変わってないよ。違うと言うなら出典確認してから来てね。
URLリンク(kikakurui.com)
> ...関数定義の一部でない関数宣言子の識別子並びが
> 空の場合,仮引数の個数及び型の情報がないことを指定する。
960:デフォルトの名無しさん
19/06/16 15:14:33.98 +bML8jLFa.net
>>915
新しく作るプログラムでも引数なしならvoidにするよ。
まあこの頃Cで作ることそのものが減ったけどな。
961:デフォルトの名無しさん
19/06/16 15:41:14.25 rIa5AgZza.net
入力がない関数ってのは関数ではないな
962:デフォルトの名無しさん
19/06/16 15:51:28.54 eI7bdJXk0.net
>なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
こんな汚物が上から目線で何かもの言ってるかと思うと反吐が出る
さっさと消えてほしい
963:デフォルトの名無しさん
19/06/16 16:33:52.45 wZzXbGgB0.net
>>932
なぜ入力がないと思ったんだ?
964:デフォルトの名無しさん
19/06/16 16:48:40.62 xMbXVdd30.net
DCL20-C. 引数を受け付けない関数の場合も必ず void を指定する
URLリンク(www.jpcert.or.jp)
を見ると(かなり読み解きにくいんだけど)…
プロトタイプ宣言では
int func(void); ... 引数0個
int func(); ... 関数呼び出しでの引数の整合をチェックしない
関数定義では
int func(void) {...} ... 引数0個
int func() {...} ... 引数0個
って具合に func() の解釈が一貫していない、
だから引数0個の関数は同じ形になるようにvoidをつけましょう、
という話に思える。
この辺が議論の混乱を生んでるんじゃないかな。
ついでに関数定義の int func() {...} の形式は廃止予定とも出てる。
プロトタイプの方は廃止予定ではない、ってことかな。
965:デフォルトの名無しさん
19/06/16 17:08:16.47 jvyHVZd00.net
そこでjpcertを持ち出すのは興醒めだ
どっかの馬の骨が「こうすべき」と主張してるってだけな話は
現実のマシンの動きとそれ束縛しているiso/iec9899でどうなのかという話とは論点が違う
966:935
19/06/16 17:32:48.77 xMbXVdd30.net
>>936
JPCERTを引用したのは「プロトタイプ宣言と関数定義とで
引数
967:部が空の関数 func() の引数の解釈が違う」って話を 根拠つきで引き出すためでな。 >>927-930 あたりの流れを受けて。 規格の文章が並べて載ってるので都合が良いのだ(読みにくいけど)。 実際のところ、JPCERTのルールっていうか提案には 俺も全面的に賛成してるわけじゃない。むしろ強く反発する部分もあったり。
968:デフォルトの名無しさん
19/06/16 19:00:02.87 jvyHVZd00.net
必要ねえじゃん
iso/iec9899の条文を引用して
その箇所がどのように解釈できると
自分の言葉で言えばいいのを
虎の威を借る形でサボる怠慢を
読まされる側は付き合ってらんねー
969:デフォルトの名無しさん
19/06/16 19:52:17.11 5fyh92Dva.net
>>932
そうだね。関数ではないね。しかしCだと処理をまとめる方法が関数しかないから仕方がないね。
970:デフォルトの名無しさん
19/06/16 20:02:46.68 5fyh92Dva.net
まあしかし getchar() みたいにプログラムとは無関係な所から取ってきた値を返すとか、バッファやstatic変数で外部からアクセスできない変数の内容を返すみたいな処理は必要だから引数なしも必要だ。
グローバル変数やハードウエアの初期化処理だけまとめて書きたいなんて時にも使える。
971:デフォルトの名無しさん
19/06/16 20:22:18.78 6QFVwEqYd.net
○○Initialize()
的な関数の存在に違和感ないんだが
972:デフォルトの名無しさん
19/06/16 20:26:17.96 rIa5AgZza.net
クラスのメンバーの操作だとしても、だったらそのクラスのコンテキストを渡すのが正しいだろうとは思うけどね。
現実としてはまあ規模による。
973:デフォルトの名無しさん
19/06/16 20:40:48.32 Mp4zqsM90.net
プログラムの関数は数学の関数とは微妙に違うから仕方ない
仕方ないと思えない奴らが関数型言語を作った
兎に角Cでは本来の関数に制限するのは事実上不可能
974:デフォルトの名無しさん
19/06/16 20:47:50.76 EhqtZL1+0.net
functionって関数の他に機能って意味もあるけど、英語圏の人はどちらの意味で使ってるんだろうね?
975:
19/06/16 21:15:12.39 gDHKfsB60.net
>>944
多分語義をわざわざ意識していないと思われ
976:デフォルトの名無しさん
19/06/16 21:19:48.09 paRCIAHRa.net
>>942
オブジェクト指向言語のクラスだとプロパティでゲッターやセッター作る事があるが、ゲッターは普通は引数なしだな。
で、そういう言語ではだいたいはメソッドの引数なしで ()にしとけばC言語での(void)と同じ意味になる。
977:蟻人間
19/06/16 21:39:10.07 KLVL0nwc0.net
機能という意味で言いたいときは、functionalityという単語もある。
978:デフォルトの名無しさん
19/06/16 22:26:00.96 rIa5AgZza.net
ゲッターセッター自体が、本当にそれ要るのかって思うこと多いよ。
手元にインスタンス持ってるわけだしさ。
979:デフォルトの名無しさん
19/06/16 23:14:47.03 2lhSAUjOM.net
ゲッターセッターはインスタンス変数を隠蔽化することでインスタンス間の結合強度を下げるのが目的
なんでもなんでもインスタンス内部の構造に直接アクセスするとOOPの意味がない
980:デフォルトの名無しさん
19/06/16 23:22:32.20 rIa5AgZza.net
いや、ゲッター使うんだったら隠蔽できてないじゃん。
981:デフォルトの名無しさん
19/06/16 23:34:39.49 Fv7+hlk/0.net
昔ゲッターセッターってスレッドセーフにするための仕組みだと思ってた。
それくらいしか意味が思いつかなかった…
982:デフォルトの名無しさん
19/06/16 23:43:48.77 3o8UCwiCa.net
そうね、なんか前後に処理を入れるくらいの使い方はある。
でもそもそもその値を使う処理をそのクラスに持たせるのが隠蔽ということだね。
983:デフォルトの名無しさん
19/06/16 23:45:38.60 7nwjMCFt0.net
今の仕組み上での利点としては
GetterSetter作ることで
インターフェースに適合させれるようになる
Cは知らん
984:デフォルトの名無しさん
19/06/17 00:04:18.25 0K02i6cy0.net
Cのスレで
985:言っても仕方ないが オブジェクト指向においてクラス外からフィールドに直接アクセスするのは禁じ手だぞ
986:デフォルトの名無しさん
19/06/17 00:10:42.98 seiOMGnS0.net
getter/setterなんてうざいだけだぜ
メンバ変数直でいいじゃん
987:デフォルトの名無しさん
19/06/17 00:23:14.51 YSrJE9j8a.net
>>954
そうそう、だからゲッターは駄目なんだよね。
C++でclassとstructのアクセス範囲が異なる理由がわかってない人が多すぎる。
988:デフォルトの名無しさん
19/06/17 00:26:17.86 0K02i6cy0.net
>>955
お前には一生オブジェクト指向は無理だな
989:デフォルトの名無しさん
19/06/17 00:39:11.63 YSrJE9j8a.net
まあ、ゲッター使うのはバカ。
データとメソッドを集約しないのはオブジェクト指向ではない。
ゲッターとセッターしかないオブジェクトなんて構造体で充分。
990:デフォルトの名無しさん
19/06/17 01:11:23.59 J2deS77t0.net
たしかPythonだとgetterもsetterも推奨されてないんだっけ?
991:デフォルトの名無しさん
19/06/17 02:13:20.34 BSqpudUb0.net
文字列クラスで文字数返すやつなんかはゲッターの一種だが、ああいうのは必用だよな。
文字数指定する事が出来るようにする場合もセッター必用だよな。
992:デフォルトの名無しさん
19/06/17 06:18:25.03 6C3tyyZH0.net
データメンバ直でもラッパーを挟めるなら問題なし
993:デフォルトの名無しさん
19/06/17 07:27:38.45 yl5KJ/vEM.net
問題ないというよりも下手な設計をとりあえずカプセル化する時はラッパー被せて誤魔化すしかない
994:デフォルトの名無しさん
19/06/17 08:27:04.42 ikLTlFyV0.net
ゲッタって仮想関数にする?
995:デフォルトの名無しさん
19/06/17 08:52:31.79 sn1adIo3a.net
ラッパーって関数に対して被せるもんだろ?
メンバー変数のラッパーってなんだよ
996:デフォルトの名無しさん
19/06/17 08:57:03.61 mR1b1vjg0.net
「メンバ書き換えたから更新よろしくな関数」の呼び出しで
やっと内部状態が変更するようなしくみ?
997:デフォルトの名無しさん
19/06/17 09:09:34.98 8UjaS7YF0.net
>>960
ゲッターとセッターは使わないのが主流
とくにゲッターとか名前からしておっかねーだろ
998:デフォルトの名無しさん
19/06/17 09:34:11.11 sn1adIo3a.net
真とかエンペラーとかいろいろあるしな
999:デフォルトの名無しさん
19/06/17 12:37:41.39 WHxj8IY7a.net
>>966
え?でも値のセットや取得時に何か処理が必要なやつはゲッターやセッターではないの?
名前がそれっぽくなくて普通のメソッドだったとしても機能としてはそうなるよな。
1000:デフォルトの名無しさん
19/06/17 12:44:11.30 6pEy3XEna.net
>>968
だから、何故値を取得する必要があるのかと
1001:デフォルトの名無しさん
19/06/17 13:06:30.69 0K02i6cy0.net
値を取得する必要ガーとか馬鹿なのか?
主要言語の標準ライブラリにGetterを含まないクラスとかまず無いぞ
1002:デフォルトの名無しさん
19/06/17 13:27:51.70 6pEy3XEna.net
>>970
引数のvoid見たこともないのによくそんなこと言えるな…
1003:デフォルトの名無しさん
19/06/17 13:33:44.73 WHxj8IY7a.net
>>969
例えばファイルデスクリプタのようなものもそのデスクリプタによって識別されるファイルに関する情報の読み書きをするオブジェクトと言えるが、それ使ってファイルのバイト数を取得するとかデータを読み書きするとか、普通にやるよね。
1004:デフォルトの名無しさん
19/06/17 13:42:27.76 qKjcjk6x0.net
猿でもわかるポインタって本誰か出せよ
1005:デフォルトの名無しさん
19/06/17 14:24:17.06 6pEy3XEna.net
>>968
そのオブジェクトの中で密接にデータと関連する処理だったらゲッターは使わんでしょう。this->hogeを直接使うだけ。
あとたぶんあなたの場合はセッターゲッターの神髄を知らんと思う。単に構造体のメンバーにアクセスするだけのメソッドをイメージしてもらえれば。
1006:デフォルトの名無しさん
19/06/17 14:25:01.27 6pEy3XEna.net
974は972あてね
1007:デフォルトの名無しさん
19/06/17 14:25:36.67 FBMbqlks0.net
>>968
URLリンク(dotup.org)
ゲッターはあぶない
1008:デフォルトの名無しさん
19/06/17 14:40:56.45 lfEwbGXOM.net
同一インスタンス内なら余計なことしなくても直接アクセスできる
セッターゲッターは他のインスタンスの変数にアクセスするための手段
オブジェクト間のメッセージパッシングにセッターやゲッターを利用する
1009:デフォルトの名無しさん
19/06/17 14:41:55.67 WHxj8IY7a.net
>>974
あー。それでもリードオンリーにしたい時に言語にその機能がないならゲッターだけ作るよね。
Kotlinの場合はvalで済んじゃってしかも自動でゲッター作られてるけど。
で、真髄って何?
1010:デフォルトの名無しさん
19/06/17 15:00:44.76 6pEy3XEna.net
>>978
リードオンリーとか言わず、読ませなきゃいいじゃん
1011:デフォルトの名無しさん
19/06/17 15:49:21.53 WHxj8IY7a.net
>>979
上で書いた文字列クラスの場合の文字数とかファイルのバイト数とか、外部から読めないとまずいものがあると思うんだが。
1012:デフォルトの名無しさん
19/06/17 15:57:28.98 6pEy3XEna.net
>>980
たとえばstd::stringのメソッドでgetってついてるのget_allocatorとgetlineくらいだよね。setなんてないし。
ゲッター感のあるやつ無くない?要らないのでは?
1013:デフォルトの名無しさん
19/06/17 16:10:03.98 qeDnhEK2M.net
メンバー変数はreadonlyなどの属性ではなくてprivateアクセス権限を設定して他オブジェクトから隠蔽するのが一般的
1014:デフォルトの名無しさん
19/06/17 17:25:37.86 0K02i6cy0.net
なんでC++とかいう後付けのオブジェクト指向もどき言語で延々と語ってるんだろうか…
1015:デフォルトの名無しさん
19/06/17 17:48:43.23 6pEy3XEna.net
>>983
そりゃもう、javaについで保守的だから。
他の意識高い感じの言語だとゲッターセッターなんて発想はありえないでしょ。
1016:デフォルトの名無しさん
19/06/17 17:52:05.72 0K02i6cy0.net
>>984
保守的?単なる継ぎ接ぎの欠陥言語だぞ
C#だとプロパティで隠蔽されてるが結局はGetter/Setterだな
1017:デフォルトの名無しさん
19/06/17 18:00:37.93 6pEy3XEna.net
>>985
つまり、Cの構造体アクセスは実質ゲッターセッターだという主張か?
1018:デフォルトの名無しさん
19/06/17 18:01:53.33 0K02i6cy0.net
>>986
お前は何を言ってるんだ…
1019:デフォルトの名無しさん
19/06/17 18:11:27.38 6pEy3XEna.net
>>987
引数void馬鹿を馬鹿にしてんだよ。わからんか?
1020:蟻人間
19/06/17 18:13:51.25 Qf1//+vQd.net
そろそろ次のスレ
1021:デフォルトの名無しさん
19/06/17 18:24:49.71 3L1/L9kLa.net
>>981
うーん。C++のクラスで喩えられてもすがわからんなあ。C++この頃全然やってないし。
昔ちょっとC++Builder使ったことあるがDelphiの延長線上の使い方しかしなかったし。
とりあえずJavaで言うとそれは何にあたるんだ?
Kotlinでもいいぞ。
1022:デフォルトの名無しさん
19/06/17 18:26:16.26 3L1/L9kLa.net
すが、じゃねえ、すぐだ。
スマホだと間違いが変になるな。
1023:デフォルトの名無しさん
19/06/17 18:28:01.53 3L1/L9kLa.net
次スレ
C言語なら俺に聞け 152
スレリンク(tech板)
1024:デフォルトの名無しさん
19/06/17 19:42:03.79 biel+EqR0.net
>>992
>>2-3 あたりの
「次スレを作るときは…」の説明を書き足さなくて良いのかしら?
自分、その辺の正しい立て方を知らず下手に書き加えられないので指摘だけ。
1025:デフォルトの名無しさん
19/06/17 20:01:23.71 vIcnvKOP0.net
IDを非表示にする場合
!extend:none::1000:512
IDを表示し、強制コテハンは表示しない(5ch標準設定と同じ)
!extend:checked::1000:512
IDを表示し、IPアドレスを表示
!extend:checked:vvvv:1000:512
IDを表示し、強制コテハンを表示
(レスの名前欄に「ワッチョイ」「スプー」「ササクッテロ 」などのニックネームがつく)
!extend:checked:vvvvv:1000:512 ← 今はこれ
IDを表示し、IPアドレスと強制コテハンを表示
!extend:checked:vvvvvv:1000:512
RONIN使えばまた表示を消せるので、強制とは言いがたいが
1026:デフォルトの名無しさん
19/06/17 20:16:07.33 /ODDlXVN0.net
ああワッチョイ消してる奴ってRONIN使ってるのか
知らなかったな
1027:デフォルトの名無しさん
19/06/17 20:27:33.84 IK9o4iD50.net
密結合を避ける
1028:
19/06/17 20:55:12.93 mDiaA7dQ0.net
>>995
RONIN 餅ですがワッチョイの消し方がわからないのです、消すつもりもないのですが…
1029:デフォルトの名無しさん
19/06/17 21:23:19.93 J2deS77t0.net
名前欄に!slip:verboseじゃないの?
コテハンとかはどうなるかまでは知らないけど
1030:
19/06/17 21:26:41.57 mDiaA7dQ0.net
>>998
どれどれ、試してみましょうか…
1031:デフォルトの名無しさん
19/06/17 21:29:58.20 6C3tyyZH0.net
>>945
そんなことはどうでもいい
C99ではどうたらを早く説明しろ
逃 げ ん な こ ら !
1032:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 76日 10時間 6分 21秒
1033:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています