X



C言語なら俺に聞け 154

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ bf63-lB9F)
垢版 |
2020/01/14(火) 19:32:30.16ID:SgRnb4BR0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
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/

※前スレ
C言語なら俺に聞け 153
https://mevius.5ch.net/test/read.cgi/tech/1566050562/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
0586デフォルトの名無しさん (ワッチョイ d7ca-BKMK)
垢版 |
2020/04/11(土) 21:29:37.03ID:BTIsFQoK0
例外処理っぽいことをやること自体が目的になってる感はあるな。
ある程度のところへ longjmp したら後は return でいいんじゃねーの?みたいな。
goto 使ってもいいしな。
0592デフォルトの名無しさん (ドコグロ MM2b-Y19k)
垢版 |
2020/04/12(日) 08:34:51.02ID:3HJi1EoTM
>>591
これまた意味不明なことを言い出したな

> longjmpが性能悪いわけねえだろ
はどうしたんだよw

あと前の話に噛み付くなら
>> C++の動きもわかってねえな
> 具体的に指摘しなよ
にもちゃんとレスしろよな
0607デフォルトの名無しさん (ワッチョイ ffd2-Ho7r)
垢版 |
2020/04/16(木) 09:06:42.33ID:kHN+0sn+0
インラインアセンブラで1バイト相対ジャンプ命令使ったとき、
128バイト以上離れても警告されなくて何度もバグったわ。
当時はデバッガー使ってなかったし。
0611デフォルトの名無しさん (ワッチョイ 9f0e-Ho7r)
垢版 |
2020/04/16(木) 12:44:21.19ID:zHaHU1HF0
ショートブランチの射程距離ぎりぎりを使うときはうっかりミスなどあり得ない
通常はそんなことになるまでにロングブランチに切り替えるが
それをあえてショートで責める理由があるときは細心の注意を払う
0612デフォルトの名無しさん (ワッチョイ 37b3-3r4m)
垢版 |
2020/04/16(木) 12:52:02.41ID:dbvXh7HJ0
インラインアセンブラを使うのはせいぜい数行
それより多かったり分岐を含むのは
インラインじゃない普通のアセンブラ
intrinsicで済むのはintrinsicで

ていう考え
0620デフォルトの名無しさん (ワッチョイ 57ca-1VFb)
垢版 |
2020/04/16(木) 14:19:30.03ID:CVnBB3Bm0
>>614
今時のCPUは最適化のためのルールが複雑で人の手に負えないからコンパイラ任せの方が大抵いいけど、昔はそうでもなかった。
まあそこまでキリキリにチューニングしたいならインラインアセンブラなんかじゃなくアセンブラで書く方がいいと思うけどね。

最適化以外だと、地味にローテートを多用するアルゴリズムだとアセンブラでやりたくなるよね。
他には、alloca とか longjmp とか効率のいい排他処理みたいな類いのアセンブラじゃないと書けない処理もあるし。
0622デフォルトの名無しさん (ワイーワ2 FFdf-TqHL)
垢版 |
2020/04/16(木) 14:41:22.11ID:rX5xM8bmF
このスレのみなさんは逆汗したら判るんですか
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
0626デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 15:51:36.77ID:gk/+OIqE0
cの関数の場合関数内でintを生成してそれに数値を代入してreturnして
戻った先で戻り値を使うことができる。そのままでdeleteする必要はない。
同じようにストラクチャでもできるの?
typedef strudt{ char x,y;] XY;
XY func(){
XY a;
a.x =1; a.y = 2;
return a;
}
void main(){
XY xy = func();
}
0627デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 15:57:13.19ID:gk/+OIqE0
int bitcount(int32 val){
 ct = 0;
 for(int i = 0; i < 32; ++ i){
   if( val>>1)++ct;
 }
 return ct;
}
0628デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 15:59:17.39ID:gk/+OIqE0
(val>>=1) & 1 の間違い
0629デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 16:03:06.35ID:gk/+OIqE0
int bitcount(int32 val){
 ct = 0;
 for(int i = 0; i < 32; ++ i){
   if( val & 1) ++ct;
   val >>=1;
 }
 return ct;
}
0630デフォルトの名無しさん (ワッチョイ 57ca-V882)
垢版 |
2020/04/16(木) 16:12:48.22ID:CVnBB3Bm0
>>622
先頭の pop ax で何が入ってくるのか分からなくて挫折したw

でもテキストな実行ファイルなら前にこんなの作ったよ。
https://dotup.org/uploda/dotup.org2114206.zip パスワード C
MSDOS用で 64bit windows上じゃ動かせないけど、DOSBOX とかで試せる。
C と関係無いしダウンロードしてまで見るのは面倒だと思うけど、見てもらえればちょっとは面白いかも。
0632デフォルトの名無しさん (ワッチョイ 9fb6-xa8R)
垢版 |
2020/04/16(木) 17:44:50.58ID:ZrTWKD3l0
>>626
できるよ。
正確には関数が持ってた構造体(funcのa)を戻り先の構造体(mainのxy)へ代入している感じ。
構造体はコンパイル時にサイズが決まるのでintとかの値と同じようにコピーができる。

https://wandbox.org/permlink/AIZ0DCmCSZJpFhE1
0636デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/16(木) 21:47:10.87ID:gk/+OIqE0
>>633
ポインタで返さないなら、つまり関数内でメモリ確保したストラクチャでも値そのものを返すのであれば、受け取った側でdeleteしなくてもいいの?
typedef strudt{ char x[10000], y[10000];] XY;
XY func(){
XY a;
a.x =1; a.y = 2;
return a;
}
void main(){
XY xy = func();
}
0638デフォルトの名無しさん (ワッチョイ 57ca-1VFb)
垢版 |
2020/04/16(木) 22:21:38.07ID:CVnBB3Bm0
>>636
その a のためのメモリはスタックフレーム上に確保されてて、関数から return すると黙ってても消えて無くなる領域だから、
new とか malloc なんかでヒープ上に確保するメモリと違って delete とか free とかはいらない。
関数 func を呼び出してる間、xy の領域と a の領域は同時に存在し、return するときに a の内容を xy にコピーして、a は func のスタックフレームと共に消滅する。
0642デフォルトの名無しさん (ワッチョイ b732-xa8R)
垢版 |
2020/04/17(金) 07:11:17.78ID:AqgoekXO0
>>638
なるほど!!よくわかりました。
関数はreturn値を呼び出し側にコピーして実行完了となりstackを開放する。
local 変数はstack上に作るので実行完了まではlocal変数の内容は保持される
が実行完了で自動的に消滅する。
ということですね。
0643デフォルトの名無しさん (ブーイモ MMbb-fsvn)
垢版 |
2020/04/17(金) 11:34:39.45ID:0SFvwi0RM
常識過ぎてデフォルトコピーコンストラクタみたいな盲腸がC++に埋め込まれてしまったんだよ
あくまでC言語の中でコーダーが工夫し不便を乗り越えてた常識なのにね
0644デフォルトの名無しさん (ワッチョイ 9f63-Ho7r)
垢版 |
2020/04/17(金) 12:08:02.28ID:uZ4GpX9X0
>人間の虫垂は、親知らずや体毛と同じように、かつては必要とされていたが今は
>なくても問題なくやっていける器官と考えられいた。

>しかし、虫垂がかつて何をしていたのか、また実際にいま用無しなのかについては、
>これまで明確になっていなかった。そんななか、米ミッドウェスタン大学の研究者が
>主体となった研究が発表され、この問題にひとつの答えが提示された。虫垂は、
>免疫細胞の反応を促し、有益な腸内細菌(善玉菌)が減少するとこれを増やすという
>二次的な免疫機能を担っているという。この役割は限定的な形ながら、いまも人間
>の体内で継続して機能している。

https://www.kagaku-kentei.jp/news_detail/data/355

むだなものなんて一つもない
0647デフォルトの名無しさん (ワイーワ2 FFdf-xa8R)
垢版 |
2020/04/17(金) 14:09:42.57ID:3B9MCfUYF
虫垂炎で虫垂取っちゃった人はコロチャンに弱いってことかな
0649デフォルトの名無しさん (ワイーワ2 FFdf-xa8R)
垢版 |
2020/04/17(金) 15:10:48.97ID:3B9MCfUYF
0651デフォルトの名無しさん (ワッチョイ 9fad-Ho7r)
垢版 |
2020/04/18(土) 13:49:13.30ID:VYQrLT4k0
>>645
環境が変化した場合に再度必要になるかも知れないのでなんとも言えない。
地球の自然環境は変化し続けるしね。
0652デフォルトの名無しさん (ワッチョイ 9fad-Ho7r)
垢版 |
2020/04/18(土) 14:51:32.00ID:VYQrLT4k0
>>646
この世界全体が無駄と言えば無駄だな。

まあしかし人間は自分の欲望を満たすものに対して無駄がないと感じるだけのことなので、
欲望がなくなればそれもなり全てはあってもなくても良いどうでも良いものになる。
0654デフォルトの名無しさん (アウアウエー Sadf-xa8R)
垢版 |
2020/04/21(火) 11:05:50.29ID:dT9nwdnwa
石田晴久ってまだ生きてんの?
0660デフォルトの名無しさん (アウアウエー Sa6a-0GGu)
垢版 |
2020/04/22(水) 10:11:23.93ID:O/jaLKmba
サイボウズのCGIってCで描かれてるんだっけ
0662デフォルトの名無しさん (ワッチョイ ae85-R0M4)
垢版 |
2020/04/23(木) 23:53:15.47ID:wF6p0RUq0
英小文字の出現回数を出現した文字だけ数えたいのですがうまくいきません
ご指導お願いします


#include <stdio.h>

int main(void) {
char ch;
int cc[26] = {0};
int i;

for(;(ch=getchar())!=EOF;){
if((ch>='a')&&(ch<='z')){
cc[ch-'a']++;
}
}




for (i='a'; i<'z'; i++) printf("%c:%d\n", i, cc[i+'a']);

return 0;
}
0668デフォルトの名無しさん (ワッチョイ 1caf-808h)
垢版 |
2020/04/24(金) 01:12:46.99ID:onlsKD/x0
https://paiza.io/projects/z-ohjvsIhSR6X_lC8q7MKA
コンパイルが通りません。
どこが悪いか教えてもらえないでしょうか。
-Iと-Lの使い方や、regexのコンパイル?(.a)の指定方法等を調べてみたのですがわかりません。
C:\clang>gcc -I "C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\opt\include" -L "C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\opt\lib" filename.c
C:\Users\maru\AppData\Local\Temp\ccgTVd7X.o:filename.c:(.text+0x75): undefined reference to `regcomp'
C:\Users\maru\AppData\Local\Temp\ccgTVd7X.o:filename.c:(.text+0xf0): undefined reference to `regexec'
C:\Users\maru\AppData\Local\Temp\ccgTVd7X.o:filename.c:(.text+0x19a): undefined reference to `regfree'
collect2.exe: error: ld returned 1 exit status
libregex.aとregex.hは上記pathに存在します。
環境:
windows10 64bit
gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
mingw-w64-install.exeで64bit版をインストールしました。
0669662 (ワッチョイ ae85-R0M4)
垢版 |
2020/04/24(金) 01:29:37.91ID:zB+8iNgr0
>>666
ありがとうございます!
あと、入力されてない文字を出力したくないんですが
もう一つご教授願います!
0673デフォルトの名無しさん (ワッチョイ 1caf-808h)
垢版 |
2020/04/24(金) 10:36:16.91ID:onlsKD/x0
>>671
C:\clang>gcc -I "C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\opt\include" -L "C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\opt\lib" filename.c -lregex
コンパイルと実行ができました。
c言語の勉強を始めて間がないので、かなり困っていました。
先へ進めることができます、ありがとう。
■ このスレッドは過去ログ倉庫に格納されています

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