トップページ⇒tech
1001コメント334KB

C言語なら俺に聞け(入門編)Part 126

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2014/05/25(日) 22:55:50.62ID:/Ed46QJw
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 125
http://peace.2ch.net/test/read.cgi/tech/1392482954/
★過去スレ
ttp://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 167代目
http://peace.2ch.net/test/read.cgi/tech/1392388003/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
ttp://codepad.org/
ttp://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
【重要】
当たり前の事ですが、2chではコピペ荒らしは禁止されています。
0153デフォルトの名無しさん2014/06/28(土) 00:39:56.75ID:9xXyI8Cq
気づいた時点で弾けばいいだけ
0154デフォルトの名無しさん2014/06/28(土) 02:55:52.88ID:UKD/KYiN
DM○の電子書籍でDRMのガードがAPIをフックしててマルチまがいなことしてるんじゃないかと思ったんだけど
どうすりゃええの?
0155デフォルトの名無しさん2014/06/28(土) 06:21:56.82ID:8spGr7lj
>>152
1つだけNULLをキャストしても問題ない型が99にある気がするw
0156デフォルトの名無しさん2014/06/28(土) 06:22:53.35ID:8spGr7lj
あ、2つか2つ。
符号の有り無しでペアw
0157デフォルトの名無しさん2014/06/30(月) 11:52:03.92ID:nVpZ4SaX
void convert(void)
int convert(void)
int と voidの違いってなんですか?
0158デフォルトの名無しさん2014/06/30(月) 12:00:46.27ID:lJxnkRTG
戻り値があるかないか。
0159デフォルトの名無しさん2014/07/01(火) 08:47:59.26ID:aIWSKYXT
c言語とはずれて処理系の話ですいません。
gccで動的ライブラリ(libxxx.so)をリンクして実行ファイル作るとき、
コンパイラやリンカは何してるのでしょうか?
実際のリンクは実行時に行われると理解しているのですが、、、
型のチェックとかだけしてるのでしょうか?
0160デフォルトの名無しさん2014/07/01(火) 09:20:22.53ID:kPzbbcEJ
◎2chスレッド勢いランキングサイトリスト◎

★+ニュース板
・ 2NN (推薦)
・ 2chTimes
★+ニュース板新着
・ 2NN新着
・ Headline BBY
・ unker Headline
★+ニュース板その他
・ Desktop2ch
・ 記者別一覧
★全板
・ 全板縦断勢いランキング (推薦)
・ スレッドランキング総合ランキング
・ ログ速
★全板実況込み
・ 2勢 (推薦)
・ READ2CH
・ i-ikioi

※ 要タイトル名検索
※ 推奨2chブラウザ併用
0161デフォルトの名無しさん2014/07/01(火) 13:06:22.47ID:xCHeKPxQ
>>159
リンクできるかのチェックをするし、そのライブラリを使うという情報を実行ファイルにいれる。
動的リンクの場合、ライブラリの関数のアドレスが不定だから
未解決のままにしてる(リンカはなにもしない)と思ってるかもしれないけど
普通の環境だと関数コールの宛先は確定してるので、普通に?リンクしてるよ
0162デフォルトの名無しさん2014/07/01(火) 14:11:38.53ID:WdBXMFPF
接続端子みたいなのを被せるだけの簡単?なお仕事です
0163デフォルトの名無しさん2014/07/01(火) 18:08:52.69ID:ktmXStnC
void関数内で配列に何かを入力するのって
scanfでいいんですか?
0164デフォルトの名無しさん2014/07/01(火) 18:09:41.81ID:ktmXStnC
(void)から始まる関数のことです
0165デフォルトの名無しさん2014/07/01(火) 18:10:25.17ID:ktmXStnC
間違えました
void ○○(??)
0166デフォルトの名無しさん2014/07/01(火) 18:26:34.60ID:/V+CYOkD
関数の返す値がない という事と、その関数内で入力に何を使うかということが
どう関連するの?
0167デフォルトの名無しさん2014/07/01(火) 19:59:53.55ID:WdBXMFPF
やりたいことをもっと直接的に書いた方がマシ
0168デフォルトの名無しさん2014/07/01(火) 21:00:02.11ID:Jx+aGKzH
質問します

自分は最近明解c言語入門編でc言語の勉強を始めましたが、

p27のlist2−7をがうまくいきません
下が自分の参考書をみて打ち込んだプログラムですが
#include <stdio.h>

int main(void)
{
double vx,vy;

puts("2つの数を入力してください");
printf("実数vx:"); scanf_s("%1f", &amp;vx);
printf("実数vy:"); scanf_s("%1f", &amp;vy);

printf("vx+vy=%f\n", vx + vy);
printf("vx-vy=%f\n", vx - vy);
printf("vx*vy=%f\n", vx * vy);
printf("vx/vy=%f\n", vx / vy);



return(0);
}

これをデバックなしで開始して
vxに40.5を入力まではできるのですが
vyが入力できず滅茶苦茶な値がかえってきます
開発環境はvisual studio 2013 です
01691682014/07/01(火) 21:03:25.82ID:Jx+aGKzH
168です 解決しました
0170デフォルトの名無しさん2014/07/01(火) 21:18:01.53ID:XzU8UZNA
%lfか。
0171デフォルトの名無しさん2014/07/02(水) 06:23:21.82ID:f2aJiwOs
>>161
>>162
ありがとうございます
なんとなくイメージできました。
0172デフォルトの名無しさん2014/07/03(木) 00:52:06.61ID:yifSsDmR
C言語ってメモリのアドレスに書き込んだりできるけど他のプロセスのメモリに書き込んだりってできるの?
0173デフォルトの名無しさん2014/07/03(木) 00:55:09.38ID:DXaZxPH6
他のプロセスのメモリが保護されてないとき
0174デフォルトの名無しさん2014/07/03(木) 01:03:49.64ID:yifSsDmR
>>173
保護するってそういう関数があるの?
int *p =malloc
if(fork()==0){
pにアクセス
}
これってできる?
0175デフォルトの名無しさん2014/07/03(木) 01:29:24.35ID:ZQktXMZq
>>174
forkするとメモリ内容がコピーされて別々になる。
アドレスは同じになるようにページングで見せかけてる。
0176デフォルトの名無しさん2014/07/03(木) 01:39:31.64ID:yifSsDmR
>>175
ページングはよくわからないけど、プロセスごとにメモリ空間?ができるん?
アドレスの値が一緒なのに指してる先が違うってことだよね?
0177デフォルトの名無しさん2014/07/03(木) 01:48:56.03ID:dV5x+oVa
>>172
MS-DOS のような原始的な OS でもない限り、各プロセスは独自のメモリ空間を持つ
0178デフォルトの名無しさん2014/07/03(木) 02:45:28.93ID:yrFJuqwB
原始人……
0179デフォルトの名無しさん2014/07/03(木) 07:05:57.11ID:hoM7mJ8v
>>176
そう
>>177
メモリ管理ユニットの無い環境で使われるOSは今でも全プロセスで同一のメモリ空間を使う事がある
0180デフォルトの名無しさん2014/07/03(木) 07:58:10.25ID:ZQktXMZq
>>179
興味本位で聞くけど、そういうOSで今でもよく使われてるのあったら名前教えて。
PICとかAVRとかのマイコン用かな。
0181デフォルトの名無しさん2014/07/03(木) 08:07:02.97ID:ZQktXMZq
>>177
MS-DOSはセグメントでページングと同等のことしてなかった?
それともロード時にローダーが頑張ったの?
メモリ保護は当然ないと思うけど。
0182デフォルトの名無しさん2014/07/03(木) 08:47:49.99ID:hoM7mJ8v
>>180
あんま詳しく知ってるわけじゃないけど、MMU無しのμClinuxとかは今でもメンテされてるっぽい。
H8(開発停止、生産供給のみ)で使うMESってOSも確かMMU無しで、ホビー用途では流行ってた筈。
ホビーで使われてる場合は作例等がネット上で観測できるから多少はシェアが分かるけど、
業務で使われてる場合は実際に何がどの位の数で使われてるかよくわからん。

PICやAVRまでいくと規模が小さすぎる上にプログラム空間がFlashメモリ固定だったりして、
OSというよりブートローダーって呼ばれる類の小さなシステムばかりな気がする。

>>181
セグメントとEMSは別の仕組みだった気がするけど、それら含めたメモリ空間は共用って事になるんでね?
0183デフォルトの名無しさん2014/07/03(木) 08:58:11.99ID:ZQktXMZq
>>182
ありがとう。OSについて参考になった。

セグメントはリロケートしやすくする機構であって
確かに、空間を分けるってものじゃないね。
セグメントレジスタはいじり放題だし。
0184デフォルトの名無しさん2014/07/03(木) 13:39:10.99ID:b94sekO1
int series(void);
int main(void)
{
int i;
for (i = 0; i < 10; i++)
printf("%d ", series());
return 0;
}
/* これは正しくない */
int series(void)
{
int total;
total = (total + 1423) % 1422;
return total;
グローバル変数とローカル変数なんだけど
なんでエラーなのかわかりません・・・orz
0185デフォルトの名無しさん2014/07/03(木) 13:49:32.71ID:x6tWgs3u
よくみてないけど
static int total;
0186デフォルトの名無しさん2014/07/03(木) 14:40:21.54ID:M7lcZRBS
エラーの内容がないから何ともいえないが
とりあえず最後に } がいるんじゃないか
0187デフォルトの名無しさん2014/07/03(木) 15:31:36.05ID:hoM7mJ8v
初期値入れたいだろうしstatic int total=0;じゃね?
0188デフォルトの名無しさん2014/07/03(木) 15:59:19.23ID:UCpRmhSf
まぁ、staticな変数は初期値0だけどね。
0189デフォルトの名無しさん2014/07/05(土) 06:40:04.07ID:ZLTRe8Cj
>>180
tron
VxWorks
0190デフォルトの名無しさん2014/07/05(土) 09:39:23.10ID:NUdHoME9
すまん、美少女のイメージが湧かない、誰かサンプルイメージをうpしてくれ
こいつはたしかトイレにいっていたみたいhttp://blog-imgs-46.fc2.com/s/a/r/saritoma/kikitoilet.jpg
0191デフォルトの名無しさん2014/07/05(土) 09:53:44.96ID:LmLbrS1U
キキが美少女?とんちなの?
0192デフォルトの名無しさん2014/07/05(土) 13:56:41.10ID:PrOFO7gh
>>172
メモリーマップドファイルで共有する領域ならお互い読み書きできる
0193デフォルトの名無しさん2014/07/08(火) 11:31:06.66ID:Cf/IosMu
{ } 中括弧の使い方がわからないんだが・・・
どうすればいい?
0194デフォルトの名無しさん2014/07/08(火) 11:42:33.70ID:SUG27oZM
#define BEGIN {
#define END ;}
0195デフォルトの名無しさん2014/07/08(火) 11:45:11.67ID:z6eg5pPo
>>193
どう分からんのかくやしく。
0196デフォルトの名無しさん2014/07/08(火) 13:05:29.37ID:w5EkuvqN
>>193
中括弧を省いていいケースが不透明というならまだ分からなくもない

結論:省くな
0197デフォルトの名無しさん2014/07/08(火) 16:48:15.10ID:SUG27oZM
変数の範囲を切るために使いまくるわ
0198デフォルトの名無しさん2014/07/08(火) 18:39:45.73ID:/j57w1JY
>>197
単にスコープのためだけにブロック作るのって、
大抵は別関数にしたほうが読みやすい
0199デフォルトの名無しさん2014/07/08(火) 23:31:14.68ID:w5EkuvqN
do
{
// ...
}
while (...)
{
// ...
}
0200デフォルトの名無しさん2014/07/08(火) 23:46:50.82ID:qe5n8Iyp
>>199
あきらかにセミコロン漏れでエラーでしょ
0201デフォルトの名無しさん2014/07/09(水) 08:52:10.73ID:2y0ZrYim
引数が大量にある別関数
0202デフォルトの名無しさん2014/07/09(水) 09:23:46.87ID:Lo3XeDUI
中括弧(コードブロック)の使い方がわからないって事は
VBやRubyなどのコードブロックを使わない言語
やってたからだろうな。
0203デフォルトの名無しさん2014/07/09(水) 09:40:18.51ID:3VBCG+k8
>>201
密結合にしかできないんならスコープを分けるのもそれほど筋が良くなかったってこと
0204デフォルトの名無しさん2014/07/09(水) 11:39:38.46ID:2y0ZrYim
一番最初に宣言した変数のアドレスだけ別関数の引数に渡して
元関数内の変数と同じ型と順序でメンバが定義された構造体の
ポインタにそのアドレスを代入する鬼仕様
0205デフォルトの名無しさん2014/07/09(水) 22:31:57.03ID:D5g6nYoo
メモリを食うクラスを使ってる時に
deleteするタイミングを明確にする
0206デフォルトの名無しさん2014/07/09(水) 23:43:58.20ID:Fnk70cEF
>>205
Cにはクラスもdeleteもないけどな
0207デフォルトの名無しさん2014/07/10(木) 07:08:11.75ID:0vEa2fxD
OOP in C なんてマニアックな本もあるけどよくやるよって読んで思った
ポリモーフィズムや継承までやってんだぜ
要はC++が裏方でやってる事を全部書かなきゃ行けないという本だった
0208デフォルトの名無しさん2014/07/10(木) 09:20:05.65ID:7qdPhGap
>>207
組み込みではそういうのもあり
OOPを勉強したい人にもあり
実用性はグレーかな
0209デフォルトの名無しさん2014/07/10(木) 09:44:17.33ID:ih9I7QvO
組み込みだったら素直にC++使えよ。
0210デフォルトの名無しさん2014/07/10(木) 12:11:26.25ID:1VHW603R
RAIIはほしいがOOPは別に…
0211デフォルトの名無しさん2014/07/10(木) 12:33:07.80ID:dtRC2hu/
RAIIはc++じゃ無いと実現できないもんね。
OOPは…まあ、必要に応じて最小限で良い気がする。
何かOOPが目的な奴もいるからoopsって感じ。
0212デフォルトの名無しさん2014/07/10(木) 13:35:53.89ID:b/HkBDRx
>>209
最近は組み込みでもC++使えるくらいリッチな環境になってるの?
0213デフォルトの名無しさん2014/07/10(木) 14:15:32.49ID:E/oPwPCa
プリンターとか画像,映像を扱うのはC++扱うの多いと思う
0214デフォルトの名無しさん2014/07/10(木) 17:33:49.48ID:nbN7Amch
組み込みと一口に言っても色々あるからなぁ…
SRAMの無い8ビットマイコンはCもほぼ無理。
8ビットでもSRAM乗ってればCも使えるし実用になるかはともかくC++も使える。
ARMあたりになると組み込み組み込みしてる物からAndroid走るくらいのやつまであってC++は当然動く。
ていうか組み込みPCを持ってくると結構前からWindowsが動くくらいの状態だからC++が動かないわけがない。
0215デフォルトの名無しさん2014/07/10(木) 17:36:15.58ID:hqBK5Ssd
JAVA(のサブセット)が動くこともある。
だがしかし、組み込みはアセンブラかC言語が普通だね。
0216デフォルトの名無しさん2014/07/10(木) 17:47:00.79ID:ih9I7QvO
どんだけ底辺組み込みなんだろう。
今時のSBCはLinuxが載ってて当たり前だから、普通にC++使えるんだけど。
PICみたいな小容量のマイコンだってCで書くのが当たり前だし。
0217デフォルトの名無しさん2014/07/10(木) 18:10:11.86ID:ZvvgKyMx
また、どんでもくんが脳内妄想語ってくれるのかな
0218デフォルトの名無しさん2014/07/10(木) 18:24:59.00ID:nbN7Amch
組み込みって単語だけで組み込みPCクラスをまず最初に持ってくるとかすげぇなぁ…
彼の家の家電製品は時計に電灯に洗濯機から炊飯器まで、
全てLinux搭載またはマイコン非搭載で揃ってたりするのかな。頂点SEさんパネェっス
0219デフォルトの名無しさん2014/07/10(木) 20:39:54.83ID:E/oPwPCa
Linuxを使っているところは、ラウンドロビンでOKみたいなところだろ
シビアな要求あるところは、使うプロセッサを分けるとか専用回路とか
0220デフォルトの名無しさん2014/07/10(木) 20:47:58.23ID:E/oPwPCa
車には数十個ものプロセッサが使われているそうだが、
妄想君には大半がLinuxで動いていることになっているんだろう
0221デフォルトの名無しさん2014/07/10(木) 20:55:31.00ID:nbN7Amch
どの程度成功してるかは知らないが、Linuxを改造してRTOS化する方向もあるぞ
RTOSで駄目なくらいシビアな所は専用回路というかプログラマブルロジックというか
# そしてプログラマブルロジック上にソフトプロセッサが乗る、と
0222デフォルトの名無しさん2014/07/10(木) 21:09:32.99ID:E/oPwPCa
ケータイ用に非対称マルチプロセッサが出てきた時、
LinuxのRTOSがうまく使えなかったんだなぁと思ったな
0223デフォルトの名無しさん2014/07/11(金) 08:11:37.83ID:uxQKijF3
まぁ、今時の炊飯器はOS載ってても不思議じゃないけど。
それはさて、この板の住人が語る組み込みなんてそんなもんだろ。
0224デフォルトの名無しさん2014/07/11(金) 11:40:20.70ID:OHkVxFp9
クラスもテンプレートも参照も使えなくて良いから
C++で書きたいと思うことがよくある
0225デフォルトの名無しさん2014/07/11(金) 13:19:50.46ID:V7EkPFDv
C++ のクラスライブラリが用意されているのに、
意地でもCオンリーでコード組むことなら良くある
0226デフォルトの名無しさん2014/07/12(土) 20:21:28.84ID:2sG0i3qJ
ケータイやスマホのせいか、組み込みLinuxって負け組のイメージがある
0227デフォルトの名無しさん2014/07/13(日) 07:34:58.24ID:fGnnU/OX
>>226
?
0228デフォルトの名無しさん2014/07/13(日) 08:55:54.74ID:OfL9oG5/
>>226
そのスマフォのOSカーネルには linuxやFreeBSDの血が脈々と流れているというのだが‥
0229デフォルトの名無しさん2014/07/13(日) 09:11:18.87ID:170EvHlI
書き方が悪いな
その組み込みLinuxのエンジニアは負け組
0230デフォルトの名無しさん2014/07/13(日) 09:39:43.96ID:0Iul1EJe
>>229
なんで?
0231デフォルトの名無しさん2014/07/13(日) 17:46:36.86ID:j69AiKJb
スマフォとセマフォってどう違うん?
0232デフォルトの名無しさん2014/07/13(日) 18:23:56.48ID:iAOcvloy
>>231
お前程度の知能の奴にはたいして変わらん
0233デフォルトの名無しさん2014/07/13(日) 18:52:07.95ID:7y/Xcjj/
>>231
ほとんど一緒だから気にしなくていいよ
0234デフォルトの名無しさん2014/07/14(月) 01:04:15.33ID:upDk1kff
>>230
ケータイ開発の泥沼引きずってそうだから、とか。
0235デフォルトの名無しさん2014/07/14(月) 01:12:52.53ID:k3UE1OMQ
大手系あほうどりどもが誰がやっても同じものができると勘違いしたみたいだからね
生きてるだけの屍増やしまくって、あの世に送るより怖いことしたことすらわかったなかったような
0236デフォルトの名無しさん2014/07/15(火) 21:24:12.02ID:l5KdQcGw
 聞いた話ですがソートでポインタを使ったものと配列を使ったものは
速度差がないそうですが本当ですか?

だとすると現在の参考書でポインタを解説したものは速度的には
役にたたない、ということですか?
0237デフォルトの名無しさん2014/07/15(火) 23:19:53.64ID:c2LLaewH
>>236
ポインタの場合メモリは何処に確保する?
0238デフォルトの名無しさん2014/07/15(火) 23:22:48.98ID:G8cUQ8aO
>>236
ポインタの配列というパターンはどうするのというのは置いといて、
連結リストのソートのことだとすると、
最初からそのデータ構造を持っていて、
ソートが必要になるシチュエーションなんていくらでもありうる。
いちいち配列に変換したりしないよ。
0239デフォルトの名無しさん2014/07/16(水) 00:55:22.22ID:m0YcwmXR
>>236
たとえばC言語で「構造体の配列」と「構造体へのポインタの配列」について
要素の並びを変更に要する時間を比較してみると、
前者は構造体の全メンバの値をコピーしなければならないのに対して
後者はポインタの値だけをコピーすればいいから、後者の方が速い
ただし、最近は「PCの処理能力が飛躍的に向上している」から、
よほど巨大な配列でない限り、両者を性能測定しても僅かな差にしかならない

だから(両者の間には)「速度差がない」と言う人がいるのかもしれないが、
学校の演習やアルゴリズムの初歩的な学習過程のように、「まずは動く事が最重要」
という世界であれば、そういった意見も間違いではない(理由は上に書いた)
ただし>>236が社会に出て一人前のC言語プログラマを目指すのなら、
「コードの簡潔さと可読性を損なわない範囲」で論理的に速い手法、
つまりポインタを迷わず選択できる技術レベルを目指したほうがいいと思う
0240デフォルトの名無しさん2014/07/16(水) 01:35:42.22ID:Remwvl23
>226の聞いた話と言うのはそんなレベルじゃない悪寒。
0241デフォルトの名無しさん2014/07/16(水) 08:22:39.84ID:BURSNuP/
>>236
みんなが言うように、理論上一般的にはポインタの方が速いし、いかなる場合でも安定速度で動作すると思う。
でも、ボトルネックの多くはアルゴリズムになるので、同じアルゴリズムを使うなら、「事実上」優位な差は無いって事だと思う。
つまり、「速度を気にするなら、ポインタか実体か等の些細な事を気にするのではなくて、まずアルゴリズムに注力しなさい」ってことでは無いだろうか?
0242デフォルトの名無しさん2014/07/16(水) 09:22:00.35ID:b0IB8P33
>>240
軍曹のイメージが強いよね
0243デフォルトの名無しさん2014/07/16(水) 11:13:12.38ID:Bfvq8rh+
構造体のタグ名って、何のためにあるの?
0244デフォルトの名無しさん2014/07/16(水) 12:52:51.21ID:VblCYr0v
>>243
構造体を見分ける為。昔々、typedefがなかった頃からの仕様。
0245デフォルトの名無しさん2014/07/16(水) 22:50:56.69ID:i1elQGnl
構造体の定義の中で自分を指す時とか
0246デフォルトの名無しさん2014/07/18(金) 20:01:06.72ID:QuIJUfIo
タグ付きの古い書式で固定してtypedefを廃止すればコンパイル超速に出来るんじゃね
0247デフォルトの名無しさん2014/07/24(木) 11:58:13.75ID:WXYCrUOO
文字を入れ替えるだけのSWAP関数なんだが
さっぱりわからん・・・orz
0248デフォルトの名無しさん2014/07/24(木) 12:16:11.82ID:yzB7ELG1
>>247
文字を入れ替えるだけという前提が間違っているとか。
0249デフォルトの名無しさん2014/07/24(木) 13:07:02.46ID:3KospQng
UTF-8だったりしたら大事だな。
0250デフォルトの名無しさん2014/07/24(木) 13:18:09.15ID:xTQLZeLW
ましなほうじゃね
0251デフォルトの名無しさん2014/07/25(金) 08:17:52.98ID:Eg4WjsQK
マルチバイト文字列の場合だと
文字を入れ換えるのは単語を入れ換えるのと同義なんだよな
0252デフォルトの名無しさん2014/07/25(金) 09:32:56.18ID:VBJ8WzY7
for文の3重ループってどう解釈すればいい?
2重までだったら、わかるんだが・・・
■ このスレッドは過去ログ倉庫に格納されています