X



C言語なら俺に聞け 143
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ b375-rVGZ)
垢版 |
2017/10/27(金) 21:28:08.20ID:pAogLeJi0
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言語なら俺に聞け 142
http://mevius.2ch.net/test/read.cgi/tech/1502364083/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0423デフォルトの名無しさん (エーイモ SEed-Aqvu)
垢版 |
2017/11/21(火) 11:41:02.99ID:qTGygbeTE
gcc -lライブラリ名 hoge.c

stdio.hと同じフォルダに自分が使いたいヘッダーファイルが存在してるのに
いちいち-lライブラリ名ってしないと参照できないんです
どうしてstdio.hは-lstdioって書かなくても使えるのに自分がインストールしたヘッダーファイルはいちいち-lで指定しないと使えないんでしょうか?
すか?
0429デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)
垢版 |
2017/11/21(火) 14:47:42.58ID:uBkGRn7P0
>>423
スクリプトかバッチを作ればいい
たとえばmycc.batというファイル名で
gcc -lライブラリ名 %*
と書き込んでおいて
mycc hoge.c
とやる
0430デフォルトの名無しさん (ワッチョイ e18a-H2sc)
垢版 |
2017/11/21(火) 19:27:53.90ID:5ScqS7z90
>>423
標準ライブラリオブジェクトはスタートアップファイル(crt0)に組み込まれていて自動的にリンクされる
標準以外のライブラリオブジェクトは明示的にリンクしないと使えない
0432デフォルトの名無しさん (ワッチョイ feeb-MUuo)
垢版 |
2017/11/21(火) 21:45:59.93ID:EZGPgPj40
まあ、先の問題については、ステップの厳密な定義が読み取れないし。
回答者の説明に矛盾がなければ○でいいと思うわ。
それでも誤答とされてしまったら、出題者がウンコだと思って忘れるレベル。
0438デフォルトの名無しさん (ワッチョイ 7d7f-GXP8)
垢版 |
2017/11/21(火) 23:33:58.03ID:6oQfsQ1l0
>>435
>>428はGnuWin32って名前から察するにPOSIXのregexだろ
置換なんてないから、正規表現コンパイルして検索して自分で書き換えるんだぞ

正規表現の置換を呼び出し一回で済ませられるような関数が
ANSIとかPOSIXにあるなら良いけど、そうじゃないだろ
0442デフォルトの名無しさん (ワッチョイ 919f-8CrJ)
垢版 |
2017/11/22(水) 00:18:19.23ID:CvPbHYJg0
>>417
こんなのはどうかなあ。
char *s が元になる文字列へのポインタ。p は char *p。

for (p = strrchr(s, '/'); p && p >= s && *p == '/' && ! *(p + 1); *p-- = '\0');
0443デフォルトの名無しさん (ワッチョイ 919f-8CrJ)
垢版 |
2017/11/22(水) 01:37:39.91ID:CvPbHYJg0
>>418
こんな感じかねえ。

if (cmd) {
 int s = system(cmd);

 if (s == -1) {
  // 子プロセス作成失敗またはステータス取得失敗

 } else if (WIFEXITED(s)) {
  // 子プロセスは正常に終了した。

  int es = WEXITSTATUS(s);

  // es の内容が子プロセス側での exit(es) または return es
  // これはたいてい 0 以外がエラーになっている。0なら成功。
 } else if (WIFSIGNALED(s)) {
  // 子プロセスはシグナルで中断して終わった。
  // (人が Ctrl+C をキーから押したとか、kill したとか、プログラムバグってて core dump したとか 0 で割ったとか)
  // シグナルの意味は signal(7) の man page 見るとわかる。

  int sg = WTERMSIG(s);
  // sg にシグナル番号が入る。
 }
}
0449デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)
垢版 |
2017/11/22(水) 15:08:01.31ID:qJn/S+Fz0
面倒くせえ奴らだなあ。。。
//aho.cpp
extern "C" char* regex_replace(char* str, size_t n, char const* pat, char const* put) noexcept
{
try
{
string buff{str};
buff = regex_replace(buff, regex{pat}, put);
strncpy(str, buff.data(), n);
return str;
}
catch(...) {}
return nullptr;
}
0450デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)
垢版 |
2017/11/22(水) 15:08:31.73ID:qJn/S+Fz0
//baka.c
char* regex_replace(char*, size_t, char const*, char const*);

int main()
{
char buff[100];
while(fgets(buff, 100, stdin))
if(regex_replace(buff, 100, "/+$", "")) puts(buff);
else puts("error");
}
0451デフォルトの名無しさん (ワッチョイ ae6e-Eq1o)
垢版 |
2017/11/22(水) 15:08:55.87ID:qJn/S+Fz0
rem test.bat
cl baka.c aho.cpp /EHsc && baka

ったく世話の焼ける(ぶつぶつ
0453デフォルトの名無しさん (ワッチョイ 02ab-RuWE)
垢版 |
2017/11/22(水) 17:50:15.00ID:MV3BmYS20
初心者です、教えていただけませんか?
大文字の配列を小文字にするコードなのですが

1 int main(){
2 int i;
3 char str[]={'A','B','C'};
4
5 for(i=0;i<3;i++)
6 {
7 str[i]=str[i]+'a'-'A';
8 }
9 return 0;
10
11 printf("答え \n");
12 for(i=0;i<3;i++)
13 {
14 printf("%c\n",str[i]);
15 }
16 return 0;
17 }
を実行すると 「Info: Nothing to build for Hello」 となります。
5行目から9行目までを削除して実行すると答えは大文字で「ABC」となります
5行目から9行目の文法がおかしいと思うのですが何処がおかしいのかわかりません
誤っている個所をご指導頂けないでしょうか?よろしくお願いします。
0461デフォルトの名無しさん (ワッチョイ 879f-UVmO)
垢版 |
2017/11/23(木) 06:33:31.65ID:ZFTBiu2d0
君の言っている事がよくわからない
0462デフォルトの名無しさん (アウアウカー Sadb-AymA)
垢版 |
2017/11/23(木) 09:17:29.44ID:N/op9puJa
>>461
mmap で割り当てた物理メモリは munmap、プロセス終了時以外にも解放される契機はあるのでしょうか?

madvise の MADV_SEQUENTIAL で解放するとか書かれてますが、ソース見てみるとフラグ的にはノーマルと変わらない処理してるみたいなんですよね
0465デフォルトの名無しさん (ワッチョイ a77f-8Ex9)
垢版 |
2017/11/23(木) 10:51:34.50ID:ijGzvwTZ0
結局何を聞きたいの?
mmapで割り当てた仮想メモリが解放されるかどうかであれば、解放されない
物理メモリの話なら解放される

madviseが実際に指示通りに動くかどうかは実装次第だけど
一応LinuxとかはMADV_DONTNEEDで物理は解放できる

というか、これはC言語の話じゃないから各環境のスレで聞け
0466デフォルトの名無しさん (アウアウカー Sadb-AymA)
垢版 |
2017/11/23(木) 12:41:47.79ID:FGycjMyka
>>465
mmap 時の物理メモリ使用量とその変化を知りたかったんです。
結局非DIRTYなら物理メモリは解放されることあるんですね。
ありがとうございます

一応linuxの場合で考えてました
ホットで適当なスレが見当たらず、一番mmap使いそうなcスレでいいかと
失礼しました
0468デフォルトの名無しさん (スプッッ Sdbb-T4vC)
垢版 |
2017/11/24(金) 14:08:06.79ID:/RqU0h4Pd
コーディングの仕方的な教材になる本あるかな?
コーディングとはこうやって沿っていくと良いよ的な本
それを読んでからテクニックの本を読もうとしてる(effective)
0473デフォルトの名無しさん (JP 0H4b-9mpY)
垢版 |
2017/11/24(金) 17:56:03.88ID:37SoWLJsH
ポインタのことなんだけど、*pt と pt みたいに同じ名前で宣言したら、別々の変数になる?
0475デフォルトの名無しさん (アウアウアー Sa4f-9mpY)
垢版 |
2017/11/24(金) 18:23:00.58ID:LzLaFdMta
>>474
たしかに
家帰ったらやってみる
0478デフォルトの名無しさん (ブーイモ MMcf-V9cG)
垢版 |
2017/11/24(金) 20:43:22.73ID:yshQtEuUM
>>466
まあここでいいと思うぞ

madviseはあまり関係ない
落とされる前提でポリシー決めてるだけ
MAP_SHAREなら解放される可能性がある
MAP_LOCKEDで解放されない

他のフラグは知らん、試せ
0479デフォルトの名無しさん (ワッチョイ 078a-9mpY)
垢版 |
2017/11/24(金) 21:30:01.83ID:Mh0dfdoe0
これまた初歩的な質問なんだけど、intとdoubleとかで変数名が衝突したらどうなる?
0482デフォルトの名無しさん (ワッチョイ 078a-9mpY)
垢版 |
2017/11/24(金) 22:54:20.18ID:Mh0dfdoe0
確かにエラー出るんだけど、できないってことでいいの?
0485デフォルトの名無しさん (ワッチョイ 078a-9mpY)
垢版 |
2017/11/25(土) 00:53:38.80ID:JCp8dCym0
サンガツ
0488デフォルトの名無しさん (ワッチョイ 0793-C/lT)
垢版 |
2017/11/25(土) 08:28:27.42ID:InRb1JFJ0
変数名が型ごとに独立した名前空間に属する、という言語があるのかな。
原理的には可能だと思うけど、えらく組みにくそうな気がする。
「型だけが異なる同名の変数を使わない」みたいなコーディング規約を強制されそう。
0496デフォルトの名無しさん (ワッチョイ 879f-UVmO)
垢版 |
2017/11/25(土) 17:02:06.40ID:DmTU06Rg0
>>488
perlは$aと@aと%aが違うけどな。型と言うよりはスカラか配列かハッシュかの違いだな。
0499デフォルトの名無しさん (ワッチョイ bfe7-enc/)
垢版 |
2017/11/25(土) 17:24:25.43ID:6ctJHfBp0
処理重視なら毎回毎回変数宣言って処理が鈍くなるよな?
0506デフォルトの名無しさん (ワッチョイ 879f-UVmO)
垢版 |
2017/11/25(土) 20:41:30.63ID:DmTU06Rg0
>>499
宣言だけ?メモリ確保とかは自分でやらずに?
だったら最初に確保する一回分だけの時間しか掛からないと思うぞ。
0507デフォルトの名無しさん (ワッチョイ 879f-lrN+)
垢版 |
2017/11/25(土) 20:51:32.38ID:L+SRk42p0
あ、C++みたいな言語でクラスの中でメモリ確保してデストラクタで解放やってるような場合は
ループするブロックの中で宣言したら最低でもメモリ確保と解放でループの回数分時間
掛かっちゃうだろうけど、C言語にはそういうのはないので掛からない。
0508デフォルトの名無しさん (スッップ Sd7f-Xp/k)
垢版 |
2017/11/25(土) 20:59:06.21ID:XP2bT693d
動的に確保というのはあるだろうが、
俺を意識した使い方するだろうし
0509デフォルトの名無しさん (ワッチョイ bf8a-S11E)
垢版 |
2017/11/25(土) 21:27:39.55ID:FWelsGSm0
VLAはスコープの出入りで伸縮だと思うが
0511デフォルトの名無しさん (ワッチョイ bfe7-enc/)
垢版 |
2017/11/26(日) 16:09:01.86ID:EJqMiwXm0
>>506
for文とかの中で宣言してやったりすると毎回確保するから処理の速度が遅くなるってどっかで書いてあった
なるべく何回も宣言しないで中身を変える処理をする方が処理がはやくなるとか言ってた
0513デフォルトの名無しさん (ワッチョイ 5fb3-CDhT)
垢版 |
2017/11/26(日) 16:15:46.29ID:pGcZHtwF0
>>511
> for文とかの中で宣言してやったりすると毎回確保するから処理の速度が遅くなるってどっかで書いてあった
よほどショボいコンパイラでない限り気にする必要はない

> なるべく何回も宣言しないで中身を変える処理をする方が処理がはやくなるとか言ってた
そう言うアホな本は窓から捨てるべき
0514デフォルトの名無しさん (ワッチョイ bfe7-enc/)
垢版 |
2017/11/26(日) 16:46:48.52ID:EJqMiwXm0
>>513
それは中の処理が大量になっても大丈夫なのか?
20行、30行ぐらい長い処理でも?
0515デフォルトの名無しさん (ワッチョイ 07b3-3T+V)
垢版 |
2017/11/26(日) 16:52:44.80ID:14BIGute0
宣言と長い処理って何処に関連が?

初期化の右辺がすんげー長いというのは
変数宣言がループの中にあろうが変数宣言をループの外に追い出しても
同じで必須コストだしそこは論点じゃないよね
0518デフォルトの名無しさん (ワッチョイ bfe7-enc/)
垢版 |
2017/11/26(日) 17:20:34.69ID:EJqMiwXm0
なるほどなるほど、アルゴリズムの問題か納得した
■ このスレッドは過去ログ倉庫に格納されています

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