C言語なら俺に聞け 162
0001デフォルトの名無しさん (ワッチョイ 2389-FUJr)
垢版 |
2023/10/30(月) 17:13:00.82ID:hHEGE8Ol0
!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言語なら俺に聞け 161
https://mevius.5ch.net/test/read.cgi/tech/1682053520/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0643デフォルトの名無しさん (ワッチョイ 0bd0-FDlJ)
垢版 |
2024/03/19(火) 19:07:27.75ID:qnPpFeXM0
最短経路問題をCudaで解くのはむずくね?
0646デフォルトの名無しさん (スフッ Sdb2-W6Ep)
垢版 |
2024/03/24(日) 18:06:00.35ID:UMIIXnOjd
構造体変数の宣言の初期化のとき、ヌルポインタを,{ }でくくらないと、警告が出るのですが、なぜですか? 例えばこんな具合にしないと警告が出ます

struct monster {
char name[80];
int HP, MP;
};

int main(void)
{
struct monster template = {{0}, 7, 4};
0648デフォルトの名無しさん (スフッ Sdb2-rfcW)
垢版 |
2024/03/24(日) 18:24:20.57ID:UMIIXnOjd
>>647 よくわかりました ありがとうございます
0651デフォルトの名無しさん (スフッ Sdb2-rfcW)
垢版 |
2024/03/24(日) 18:47:29.73ID:UMIIXnOjd
我ながら Lolです☺
0652デフォルトの名無しさん (ワッチョイ 09f0-d20A)
垢版 |
2024/03/24(日) 18:57:40.29ID:9Ye9tMrz0
>>621
Perlでメモリ不足になるってことは循環参照が発生してメモリが解放されない(PerlはリファレンスカウントGC)
もしくは深い再帰でPerl管理のVMスタックが枯渇したか
どちらにしろCで書いてもメモリをバカ食いするのは間違いないから
データ構造を見直すべき
循環参照を見直す、再帰をループに変えるなどを試してみてはどうか
0655デフォルトの名無しさん (ワッチョイ 6fb3-MjEX)
垢版 |
2024/04/11(木) 18:10:49.56ID:h5i5y7Gi0
#include <stdio.h>
#include <string.h>

void main(void)
{
 char c[32];
 char *pc;

 strcpy(c, "JAPAN-TOKYO-OSAKA");
 pc = &c[0];

 //for(int i=0; i<strlen(c); i++, *pc++){
 for(int i=0; i<strlen(c); i++, pc++){
  printf("%c", *pc);
 }
 printf("\n");
}
0656デフォルトの名無しさん (ワッチョイ 6fb3-MjEX)
垢版 |
2024/04/11(木) 18:12:37.98ID:h5i5y7Gi0
コメントアウトしてる方のforにしても出力結果は同じになります
*付きポインタ変数は、中身へアクセスを意味するからめちゃくちゃな文字列が出力されるはずじゃ・・・?

どうしてなの?
0660デフォルトの名無しさん (ワッチョイ 4ef0-WBP1)
垢版 |
2024/04/11(木) 20:25:30.86ID:RdqITFFi0
*も++も単項演算子で適用される優先順位がある
優先順位を意識してコーディングしないと痛い目に合う
a + b == cは想定通りだろうが、a & b == cは想定外の結果になるとかねw
0662デフォルトの名無しさん (ワッチョイ 6f2a-MjEX)
垢版 |
2024/04/11(木) 21:46:39.46ID:6HtedQOj0
>>661
え、なぜ。
0669デフォルトの名無しさん (ワッチョイ df01-B3tP)
垢版 |
2024/04/12(金) 00:21:54.57ID:GtdzNQir0
>>655
後に現れたC++のiostreamがシフト演算子をオーバーロードし入出力演算子として流用するのに
好都合で、思わぬ役に立つことになったからまあ良いだろ。もしシフト演算子が四則演算子より
優先順位が高かったら、cout << 1 + 2 * 3 << endl を cout << (1 + 2 * 3) << endl と
書かなければならず面倒だった。(C++がシフト演算子を全く別の機能に流用したのは不適切
だったという意見もあるが…)
0671デフォルトの名無しさん (ワッチョイ e2ad-lyNC)
垢版 |
2024/04/12(金) 02:09:51.24ID:Wv2Zy+UZ0
>>656
*pc++ はまず *pc の処理をする。これで pc の差している先にある値を取り出すことになる。その次に pc を一つ分進ませる(実際に加算される値は sizeof(*pc))。
では最初に *pc で取り出した値はどこへ行ってしまうのか? それは何にも使われずにただ捨てられる。
0672デフォルトの名無しさん (ワッチョイ 4e28-Nnmc)
垢版 |
2024/04/12(金) 07:08:32.50ID:gi41fiD00
*pc++の形はcやってたら所々で見るから否応なく慣れる
個人的にはケチくさい書き方で避けたい気持ちもあるがまぁそういう文化が根付いてるなら合わせざるを得ない
0674デフォルトの名無しさん (スッップ Sd02-3rFQ)
垢版 |
2024/04/12(金) 12:25:07.52ID:OadUyd3Md
C言語の標準化委員はC++のほうも兼任してたりするから、ぶっちゃけC言語の改善にはやる気無しだから。
0676デフォルトの名無しさん (ワッチョイ 4ef0-WBP1)
垢版 |
2024/04/12(金) 14:41:57.50ID:nGLEgXOo0
C++はRustと比較されて安全性に劣るとレッテルを貼られて、どうしたもんか考えあぐねてるところだろうw
言語の拡張に対して完全に方向転換を強いられてるのは間違いない
それはCも一緒だな
0678デフォルトの名無しさん (スフッ Sd02-L5r3)
垢版 |
2024/04/12(金) 15:20:27.37ID:dUdcEEpod
>>674
もはやbetter Cでも何でもないのに、このスレでも繰り返しc++の話題出す奴居るし、やっぱユーザーも被ってるんだろな

まあCの設計の良否を他言語よりは比較的小さな差異から論じるのに有用だとは思う
おれみたいにC++は書かずともcpprefとか読んで式や文、宣言など局所的な構文知識だけちょっとある人は多かろう(ClassとかCに無い概念は読み飛ばしてて無知)

生まれた順序が逆だけど、FortranがC++とすればF言語/JuliaがCだね
大体サブセット+独自進化、標準化コミュニティ丸被り
0679デフォルトの名無しさん (スッップ Sd02-3rFQ)
垢版 |
2024/04/12(金) 16:33:17.52ID:OadUyd3Md
C++は好きじゃないからC言語はもっと改善していって欲しい。
nullptr型とか入るの遅すぎじゃね?
0680デフォルトの名無しさん (ワッチョイ 62e3-WBP1)
垢版 |
2024/04/12(金) 22:48:41.07ID:fQv3jEzD0
C++はCの機能を保ったまま、ありとあらゆるプログラミングパラダイムを突っ込んだもの
それがベターかどうかは人によるな
ただ、Cと互換性を保ったままそこまで進化したのは奇跡に近い
0682デフォルトの名無しさん (ワッチョイ 62e3-WBP1)
垢版 |
2024/04/13(土) 00:06:24.07ID:c7UXCLXT0
でも、Rustが安全性と性能は両立出来ることを証明してしまってから、一気に旗色が悪くなったw
今まで性能を免罪符にして、多少(かなり?)の安全性を犠牲にしてきたけど、もはや通用しない時代になった
今後どう進化するか見物だな
Cだって対岸の火事ではない
0683デフォルトの名無しさん (ワッチョイ 62e3-WBP1)
垢版 |
2024/04/13(土) 01:23:26.45ID:c7UXCLXT0
ちなみに、Rustは安全な代わりに書きたいコードを書けるとは思わない方がいいw
これは書いてみないと分からん感覚だ
書きやすくて安全な言語は存在しないことも証明されたw
0684デフォルトの名無しさん (ワッチョイ e2ad-ZiZa)
垢版 |
2024/04/13(土) 07:18:38.29ID:SxW/5mRR0
慣れの問題では?
0686デフォルトの名無しさん (ワッチョイ 9f79-Zl9R)
垢版 |
2024/04/19(金) 20:19:37.90ID:5JxGOdzk0
今日から戯れに数十年前のx86なGUIのソースをx64に移植し始めたんだが
とりあえずエラーになるGetWindowsLongだかをx64用に書き換えていったらそこそこ動いてしまって、後は文字列が関係する処理だけだ
俺が書いた過去のコードがよっぽど優秀だったようだ
やはり若い頃にソースを沢山書いといてよかった
0687デフォルトの名無しさん (ワッチョイ 9f79-Zl9R)
垢版 |
2024/04/19(金) 20:37:53.24ID:5JxGOdzk0
x64化でちょっとsize_tの扱いで躓いたので書いておこう
ポインタが64bitだから、その差を取る場合もあるsize_tも64bitなのは理屈では理解できるんだが
明らかに64bit幅が不要な箇所でsize_tに出くわすとおいおいと思ってしまう
これはbit数を明示した型を別に定義した方がよさそうだ
ああまいったまいった
0688デフォルトの名無しさん (ワッチョイ 9f1c-A/o5)
垢版 |
2024/04/19(金) 23:35:27.85ID:uO847wzt0
>>686
Windows1.0のexeもWindows10(32bit版)でも動くからな
64bit版は16bitコードの実行が廃止されたから無理
APIの方は割と変わってるけど、それでもちょっと直せばビルドできる
優秀なのはMicrosoftの方だなw
0691デフォルトの名無しさん (スフッ Sd70-mNzP)
垢版 |
2024/04/21(日) 10:58:55.51ID:WM7IEXRid
win10使ってるけどOffice 97をバイナリコピーして使ってるぞ、とうとう11では動かんのか…?
主にExcel使うが関数の数は劣ってもヘルプは古い方がよく出来てて一般ユーザとしては好み、一々ブラウザ起動されてたらい回しは嫌だ
0693デフォルトの名無しさん (ワッチョイ 66ad-6Ywt)
垢版 |
2024/04/21(日) 13:02:16.05ID:kDNr1IJ/0
Office97は32bitだから動くでしょ
駄目なのはWindows3.1までの16bitアプリ

じぶんもフリーソフトをいくつか64bit化したけどほとんど修正してない
早めにUnicodeにしてたおかげもあるかな
レスを投稿する


ニューススポーツなんでも実況