C言語なら俺に聞け 153

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 5fba-LL4R)
垢版 |
2019/08/17(土) 23:02:42.00ID:tN5mSQYg0
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.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/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
※前スレ
C言語なら俺に聞け 152
https://mevius.5ch.net/test/read.cgi/tech/1560763630/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2019/09/17(火) 20:37:25.67ID:g1BlUkdva
>>40
不可能。やるなら自前でプリプロセサでも書けばいいが、そんなことするくらいなら、ソース上に書くのではなく独自のデータファイルとそれを読み込んでデータを初期化するような処理でも作れば?
2019/09/17(火) 20:47:01.62ID:pZqZMIzxM
>>41
ありがとうございます。
最終的な目標は、Cを他言語ライクな記述でコーディングすることなので、プリプロセッサについて調べてみます。
43デフォルトの名無しさん (アウアウウー Sa63-0qvw)
垢版 |
2019/09/17(火) 22:44:02.30ID:WDh8MszDa
新言語作った方が良さそうな。
初期のC++みたいにC言語へのコンバータとして作っちゃえば楽だと思う。Cと同じで良い部分はほとんど素通しで行けるし。
2019/09/18(水) 03:52:29.58ID:YwguJHoc0
そこまでしてCに拘る意味がわからない
2019/09/18(水) 05:50:30.71ID:A+b/Im8h0
あの変態的にC言語には見えないObjective CでさえほとんどプリプロセッサでCに変換してからコンパイルしてたと聞くので、やろうと思えばできるんだろうね。
46デフォルトの名無しさん (ワッチョイ ff8c-e0wG)
垢版 |
2019/09/18(水) 07:02:57.91ID:ik5RQtCe0
yaccとlexを使えばできるだろう。たぶん
2019/09/18(水) 08:32:22.55ID:cLmp+ocZM
独自言語を開発したときなんかはとりあえずCに変換するというのはわりとある話。
コード生成とか最適化とか考えずに済むから。

昔、独自じゃないけど、とある言語からCへのコンバータ作ったよ。
楽しかった。
2019/09/18(水) 08:40:59.31ID:vdXxwq0s0
コンパイル前にソースを別のソフトで変換、置き換えさせて・・・
2019/09/18(水) 09:00:45.02ID:qgVAc8a30
そしてCにもどるネズミの嫁入り
2019/09/18(水) 12:47:21.47ID:1Vhu13ZT0
BNFとyaccのお勉強から
2019/09/19(木) 15:34:03.81ID:yCvdPLl+M
#define ARR_NAME(n) arr##n

int arr0 [] = {0,0,0};
int arr1 [] = {1,1,1};

int* select_arr(int i){
return ARR_NAME(i);
}

これはどうしてコンパイルエラーになりますか?
ちなみにreturn ARR_NAME(0)だと正しく動きます。
2019/09/19(木) 16:38:05.33ID:1k0/HGmS0
タイミングの問題だ
#defineはコンパイル前に解釈されるが
関数仮引数の値は実行時に渡される

実行時とはコンパイル〜リンクまで全て終わった後の話だ
だから関数仮引数の値を#defineで置き換えることができない
2019/09/19(木) 17:34:18.54ID:fzYUHnaEd
arriという変数はない。プリプロセッサでは変数の中身までは見られない。
2019/09/19(木) 18:13:33.75ID:yCvdPLl+M
分かりやすかったです。ありがとう。
この機能の代替として良き方法はありますか?配列のdimを増やすしかないですか?
2019/09/19(木) 18:22:24.66ID:fzYUHnaEd
次元を増やすのがベストだろう。
2019/09/19(木) 18:23:38.47ID:QG4rugRZ0
配列変数名はコンパイル時には分かっているのだから
その配列のアドレスを格納したポインタ配列を用意してやる
2019/09/19(木) 18:24:58.88ID:Hv2f/JNH0
>>55
これに1票。
2019/09/20(金) 15:15:19.52ID:X5/vL2CD0
                            __、
                iー'゙゙゙゙''''ー-,/^´  ゙';
                |      ゙ゝ....‐  .}
                !           |,
                   i____________......r'".'''゙ヽ  . ..,,、
                ,,. -/        `'ー  |      .' 、
             ,..-'"  l゙          __.. -''′     ./
        . ,/     .`''''〜- ....---''''"゛        ,/
       /.,,                           ,,..r'"
         `''ー、,、                 _,,,-'"  `!、
               /'r‐、          ,/´ /゙゙',    ヽ
            / レ'゙ ´゙リ´ . `^^゙゙゙゙゙゙厂j  .! │    . l
           /  |  .l.      丿/ / . /      !
            l  !  .,,....--ー'''''''″ /  .| (、     . !
         _  .ィ‐¨゙゙'广゛ ......    ./  ,ノ.l.  `'ィ ..,,_/
     ..-‐'"゛  'l_゙'ーノ`' ..........,,_ .,, -"  / │   .!   ゙''''-.
   .i''i       ヽ、          /  .!    !
   ,)イ      : ..,,,,,>u;;;;,、.__ _,,,.. /    |    "
  / . 、          !  .`             |
     !,                     ,!
     ."                        ゙
2019/09/20(金) 17:51:25.98ID:/93Uxf6sM
それは増やさなくていいから
2019/09/23(月) 14:43:33.00ID:995jKG080
グローバル変数を宣言する時、ヘッダファイルでextern int hogehoge;ってするよね。
*.cからヘッダファイルをincludeすると、
extern int hogehoge;を毎回書いたのと同じ状態になるの?
2019/09/23(月) 14:47:57.02ID:LA+tlTim0
そうだよ
includeはファイルをそのまま展開するだけ
2019/09/23(月) 15:58:05.13ID:ZLX7TvLd0
>>60
被参照側(メイン)に int hogehoge と書く
参照側(サブ)には extern int hogehoge と書く

これが基本です、*.h を使うのなら

*.h に extern int hogehoge と書く
被参照側(メイン)に int hogehoge と書き、*.h をインクルード…@
参照側(サブ)は *.h をインクルード
@でヘッダと実体に矛盾がないかチェックします
2019/09/23(月) 21:19:08.91ID:995jKG080
>>61-62
ありがとうございました
64デフォルトの名無しさん (アウアウウー Sa8b-dyKo)
垢版 |
2019/09/29(日) 22:13:04.83ID:wBLVWLTJa
お前がC言語を 使う前に
言っておきたい 事がある
かなりきびしい話もするが
俺の本音を 聴いておけ
初期化前の変数を 使ってはいけない
gets()関数も 使ってはいけない
文字列の長さと 配列サイズは別物だ
使い終わったバッファは ゼロクリアしろ
できる範囲じゃなくて 全部やって

https://twitter.com/satoru_takeuchi/status/1176429522687676416?s=03
https://twitter.com/5chan_nel (5ch newer account)
2019/09/30(月) 07:29:14.67ID:II5MOx76M
>>64
> 使い終わったバッファは ゼロクリアしろ
これは要らんやろ
2019/09/30(月) 08:11:22.10ID:gJLA2fQe0
パスワードやらなんやらの機密情報を保存したバッファは解放前にゼロクリアしようねという話です。
任意のバッファという意味ではありません。失礼しました
2019/09/30(月) 08:13:21.71ID:VG7pOpzld
物凄く初歩的な質問で申し訳ないのですが
1%5のような余剰計算をした場合解は5になるのでしょうか0になるのでしょうか
2019/09/30(月) 08:15:49.83ID:VG7pOpzld
すみません自己解決しました
2019/09/30(月) 08:18:14.42ID:II5MOx76M
それC言語固有の話じゃないし個々にやるべきかプロセス毎にやるべきかとかのポリシーもあるし
70デフォルトの名無しさん (アウアウウー Sa8b-dyKo)
垢版 |
2019/09/30(月) 09:14:54.65ID:eZfyppwla
>>66
元のツイートした本人か。
ここ見に来ているとは思わなかった。
2019/10/04(金) 06:41:48.31ID:UVSgb2bf0
ゼロクリアだとそこだけ異様にキレイなので逆に重要な値が入るものと察知される
乱数値でクリアすべき
2019/10/04(金) 08:54:32.98ID:iKrL2UhC0
>>71
すごいコストがかかるよねそれ・・・
2019/10/04(金) 09:53:27.82ID:gjBxAXtl0
一々乱数計算しなくても数パターン乱数表つくってメモリコピーでもいいんじゃね?
2019/10/04(金) 10:40:51.28ID:0WBkPtDcx
そもそもゼロクリアされてるbss領域なんて重要なもの以外にも大量に存在してるので攻撃者がピンポイントで判断することなどまず不可能。
逆に綺麗すぎる乱数のほうが目立つ。
2019/10/04(金) 11:02:52.42ID:uYF9K7e8M
そこだけにするからバレると言うなら全部ゼロクリアすればいいってことでしょ

> 使い終わったバッファは ゼロクリアしろ
> できる範囲じゃなくて 全部やって
2019/10/04(金) 11:23:25.74ID:rAj4fuhv0
今の流行りは不変プログラミング
スコープが短い云々ではなく使い捨て
再利用なんてしない
2019/10/04(金) 11:28:53.13ID:MVQV/kgg0
アメリカ国防省のDoD5200.28-Mとかね
2019/10/04(金) 11:42:07.63ID:TDKY2TUM0
HDDだと少数回のゼロクリアじゃデータ復旧される可能性が残るけどメモリだったらその心配はないのかね?
2019/10/04(金) 11:48:30.26ID:0WBkPtDcx
>>78
DRAMはリフレッシュがあるので原理的に不可能な気がする。
SRAMもフリップフロップなら不可能な気がする。
80デフォルトの名無しさん (アウアウウー Sa21-8Spd)
垢版 |
2019/10/04(金) 14:20:51.26ID:hcjI0QEWa
スワップされてディスクに書き込まれたら終わりなのでスワップされないようにする必要がある。
2019/10/04(金) 14:34:25.76ID:TDKY2TUM0
windowsの細かな動きがわからんけどスリープとかでメモリ内容を全部ディスクに保存する動きしない?
するなら言語レベルではどう頑張ってもディスクにデータを書き込まずにスルーする術なんてないんじゃなかろうか?
ということは漏洩防止目的でバッファをゼロクリアする意味は無い?
windows以外は知らん
2019/10/04(金) 15:03:33.90ID:gjBxAXtl0
スリープ処理って関数実行中でも起きるの?
メッセージ待ちとかで起こると思ってた。
2019/10/04(金) 15:23:30.09ID:0WBkPtDcx
多分priemptされてたら実行状態でも普通にswap outされるだろうな。
2019/10/04(金) 15:25:19.34ID:uYF9K7e8M
スワップに書いてある内容がどのプロセスのものかをどうやって知るつもりなんだろう…
てかそんなのがわかる状況ならそもそもセキュリティうんぬん言ってもしょうがないと思う
85デフォルトの名無しさん (アウアウウー Sa21-8Spd)
垢版 |
2019/10/04(金) 15:35:25.79ID:hcjI0QEWa
Linuxにはmlock()がある。
https://linuxjm.osdn.jp/html/LDP_man-pages/man2/mlock.2.html
多分他のOSにも似たようなのはある筈。
なければ高度なセキュリティが必要なプログラムは作れない。
86デフォルトの名無しさん (アウアウウー Sa21-8Spd)
垢版 |
2019/10/04(金) 15:43:12.94ID:hcjI0QEWa
サスペンドでメモリ内容が全てディスクに書き込まれるような場合は暗号化サスペンドイメージを使うように予め設定しておくしかないようだ。(もはや言語の問題ではない。OSの問題)。
2019/10/04(金) 15:53:58.62ID:TDKY2TUM0
最終的にはOSやらハードウェアファームやらのレベルの話に行き着くんで上位レイヤーでの完全対応は無理
ならば他アプリが自アプリのバッファにアクセスできないよう下位レイヤーが保証してるならバッファクリアは不要ということになる?
そんなレベルで心配が必要なことは個人的に触ることは無いと思うけど
2019/10/04(金) 17:34:20.04ID:SD7r35lfM
関数ポインタの書式と宣言方法がわからぬ(´・ω・`)
だれか助けてクレメンス
2019/10/04(金) 18:02:32.55ID:TP3p64JiM
ここで講義始めるわけに行かないんだからもっとspecificに頼むよ
2019/10/05(土) 01:05:45.82ID:JlWvx+CH0
Makefileなどに書かれているCCって「C Compiler」の略でしょうか?
2019/10/05(土) 08:03:44.94ID:9T2eUTn80
UNIXのccコマンドじゃね?
2019/10/05(土) 20:19:21.97ID:JlWvx+CH0
http://www2.scphys.kyoto-u.ac.jp/BIRDnet/manuals/A1_BIRDintro/cc1.html
C コンパイラーっぽいですね
2019/10/07(月) 09:08:10.49ID:wNNRR3l10
ピザ好きな不老不死の女の子かと思った
2019/10/07(月) 19:40:47.02ID:Xs+XlBV4d
250億分の1のドム?
2019/10/08(火) 06:14:41.38ID:T9JnCGiw0
Card Captor
2019/10/08(火) 07:56:55.95ID:/Tt7z8U00
さくらちゃん!
97デフォルトの名無しさん (アウアウウー Sa21-8Spd)
垢版 |
2019/10/08(火) 10:23:23.04ID:UHIrT7RMa
Chupa Chups
2019/10/10(木) 14:01:00.49ID:at1yx75i0
このスレこんなに過疎ってたっけ
99デフォルトの名無しさん (アウアウウー Sa5b-DLKC)
垢版 |
2019/10/10(木) 20:53:57.73ID:f2z6TkRsa
まずは燃料投下する必要があるんじゃないかな。C言語はダメとかクソとか、あるいは引数にvoidなんて見たことないとか、そういったことを書けば火が付いて3スレぐらいあっという間に消費すると思うよ。
2019/10/10(木) 21:22:58.67ID:uAIxYTc70
void君呼ばれてるよ〜
2019/10/10(木) 21:27:26.48ID:uUO69neG0
void君だと日下部を連想しちゃう
2019/10/10(木) 23:54:41.04ID:a+kHg1ZD0
C言語がクソなのは誰の目にも明らかだから燃料にもならない

何を犠牲にしてでも最速を求めなければならないとか
今時キロバイト単位のメモリしか載ってないとかで渋々使わざるを得ないだけ
2019/10/11(金) 00:09:31.72ID:pVz4+WpI0
>>102
プログラムに関係する問題を人に伝えたく、かつ、言語固有の事情をできるだけ排除したいときにあえて c で表現することはあります、普段書きはすでに c++ ではあるのですが
https://mevius.5ch.net/test/read.cgi/tech/1551247748/442-443
2019/10/11(金) 07:30:31.94ID:nZkXsNOYd
だな
2019/10/11(金) 07:53:34.25ID:3LFsZ0AAx
かと言ってC++にそんなにメリット感じないんだよなぁ。
2019/10/11(金) 08:03:12.82ID:tJJSdY6IM
python最強!python最強!python最強!
2019/10/15(火) 23:35:16.76ID:j31F4ljf0
pythonスレ、寂れているぞ
2019/10/15(火) 23:36:55.58ID:41wob9vL0
Cスレより寂れてから出直してこい
2019/10/18(金) 13:14:43.91ID:fz6Ul+V20
あんなに活気のあったスレがこんなに寂れるとは
5chから人が減っているという噂は本当だったか・・・
2019/10/18(金) 13:17:46.21ID:TRDqZrvk0
2chに戻れば盛況になると思うよ
111デフォルトの名無しさん (アウアウウー Sa43-n65Q)
垢版 |
2019/10/18(金) 13:50:16.30ID:Re5f6/3aa
誰かYouTuberになって布教活動すれば良いんじゃないか?
この際VTuberで美少女だけど実はおっさんがやってるってのでも良い。
2019/10/18(金) 14:13:00.14ID:fz6Ul+V20
名前はCちゃんだな
バストもCちゃん
2019/10/18(金) 20:01:00.56ID:6mXxrgrB0
>>109
C 宿題スレも激しく活況だったのに、ね、…
114デフォルトの名無しさん (アウアウウー Sa43-n65Q)
垢版 |
2019/10/18(金) 22:18:29.15ID:Re5f6/3aa
そう言えば中国にもYouTubeみたいなのがあってYouTuberのようなのをやってる人も居るのだが、顔を若く変換するアプリ使って40代だか50代のおばちゃんが20代ぐらいに見せかけてやっていたってのがあったなあ。

そういうの使えばお前らのハゲもフサフサになるに違いない。
2019/10/21(月) 17:55:25.84ID:SxBFh1HX0
顔を変換するアプリと言えばアダルトサイトに芸能人の顔を合成したAVが上がってたな
見た感じ本物と区別付かないぐらい精巧だった
個人的にここ最近の技術革新では一番衝撃的だったな
2019/10/21(月) 20:28:50.85ID:niRnsl0k0
画角やライティングに異常なし?
2019/10/21(月) 21:24:45.66ID:Pn9LVi/O0
>>111
>>114
のらきゃっと + 顔バレあたりで現代に触れよう
118デフォルトの名無しさん (ワッチョイ de8c-U7Hu)
垢版 |
2019/10/22(火) 11:58:42.07ID:w6Pn7J3f0
printf("%*d", width, num);

printf("%2$*1$d", width, num);
がなぜ等価でですか?だいたい等価?正確に等価?
2019/10/22(火) 12:33:17.32ID:Cu6k19+70
>>116
異常なし
すごい自然な合成
120デフォルトの名無しさん (ワッチョイ c3b0-ecnW)
垢版 |
2019/10/24(木) 00:19:19.09ID:Wak+wQ5e0
ずばり日本人って利己的な奴ばっかだから会話から何まで発展しようがないんだな。
後はもう負の連鎖。
121デフォルトの名無しさん (ワッチョイ ffad-LHKE)
垢版 |
2019/10/24(木) 04:25:22.54ID:nZ5fKqYm0
おまえ利己的だな
2019/10/24(木) 13:03:27.14ID:4BUO8cnl0
ワッチョイ取ったほうがいいんじゃないの?
なんでワッチョイ付けてるの?
2019/10/24(木) 13:13:49.39ID:rzYbrWLoM
人を寄せ付けないため
124デフォルトの名無しさん (アウアウウー Sa27-nFuE)
垢版 |
2019/10/24(木) 16:43:51.20ID:gElHX+jGa
荒らされることで活気を保つというのもまたナンだなあ
125デフォルトの名無しさん (ワッチョイ c3b0-ecnW)
垢版 |
2019/10/25(金) 06:37:52.18ID:2lz/0LgC0
本音だけど、何処の板もそうだけど、噛みついてくるのはすぐさま来るけど親身になって
答えてもそのまま逃げる奴ばっかだし、そりゃ人減るよ。
答える奴には聖人を求める癖に自分がカスすぎるじゃん。
2019/10/25(金) 07:36:46.68ID:1flCt2Jcd
他人に対する期待が多すぎるやつは
いつも文句ばっかりぬかしてて
思い通りにならないと発狂する
127デフォルトの名無しさん (アウアウウー Sa27-nFuE)
垢版 |
2019/10/25(金) 12:45:36.00ID:f89Z34lqa
期待が大きいというか、依存だよね。
2019/10/25(金) 18:54:11.10ID:1g0JfiSRM
依存じゃなくて利用だな
他人なんて自分がラクするための道具でしかないという
129デフォルトの名無しさん (アウアウウー Sa27-nFuE)
垢版 |
2019/10/25(金) 20:51:37.05ID:f89Z34lqa
道具に依存している
2019/10/26(土) 12:46:18.79ID:EiwJrseOM
なくても困らない代わりはいくらでもあるものに対して依存しているとは言わない
2019/10/26(土) 12:49:03.78ID:bOvK5kTL0
5ちゃんねる依存症
132デフォルトの名無しさん (ワッチョイ ffad-LHKE)
垢版 |
2019/10/26(土) 21:16:39.88ID:2eoY+VbT0
依存できなくなると怒るんだよ
2019/11/05(火) 20:25:04.26ID:AZeD0bR10
$ ctags -R /usr/include/alsa
をしても、int snd_pcm_open(...); 等が tags に記載されない。
どうして? どうしたら?
2019/11/07(木) 06:31:27.14ID:+Fv/+mh50
>>133
ctags --c-kinds=+p -R /usr/include/alsa
でどうだろ。
見当つくだろうけど「Cのプロトタイプ宣言部分も出力に加える」の意。

どうして、の答えは「デフォルトではプロトタイプ宣言部は対象外だから」だね。
2019/11/11(月) 23:11:25.01ID:W9timUKI0
構造体のメンバ変数に、関数のポインタ変数を入れて、クラスのメソッドのような感じで使ったりできると思うけど、そういう使い方って現実性あるかな?
2019/11/11(月) 23:22:53.41ID:zH1aWpOc0
そういうふうにCでOOPするのが昔流行った。
2019/11/12(火) 00:07:22.48ID:FaYMVIJ40
>>135
Linuxとかで今でも使われまくり
https://elixir.bootlin.com/linux/latest/source/include/linux/fs.h#L1789
2019/11/12(火) 09:07:31.78ID:lfRZP5P70
>>135
デバイスドライバのたぐいは大体それのオンパレードだよね
139デフォルトの名無しさん (ワイーワ2 FF3f-tB+Q)
垢版 |
2019/11/12(火) 09:36:57.66ID:uG6HIbdYF
>>135
普通

>>137
便利だよね
140デフォルトの名無しさん (アウアウウー Sacf-aSoi)
垢版 |
2019/11/12(火) 11:31:00.10ID:H6DlknKxa
>>135
C++がCへのコンバータだった頃はクラスをそんな風に変換してたんじゃないかな。
今はコンパイラが内部的にやってるんだろうけど。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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