トップページ⇒tech
1002コメント304KB

C言語なら俺に聞け

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2014/08/22(金) 21:06:21.98ID:PYD8lyoN
前スレ
C言語なら俺に聞け
http://peace.2ch.net/test/read.cgi/tech/1393965167/
0002デフォルトの名無しさん2014/08/22(金) 21:08:38.11ID:mvEiVivf
テンプレ無し
0003デフォルトの名無しさん2014/08/22(金) 21:34:09.84ID:F4hwkY2i
C言語のことを俺に聞くな
0004デフォルトの名無しさん2014/08/22(金) 22:23:45.63ID:OuVncztg
スレタイトルに番号ナシか
0005デフォルトの名無しさん2014/08/22(金) 22:40:09.42ID:BtBgkxO2
C言語には行番号も無いぜ。(そういう時代に作られたな…)
0006デフォルトの名無しさん2014/08/22(金) 22:59:59.14ID:Bcjh1IOT
23090
23100 #include <stdio.h>
23110
23120 int main(argc, argv)
23122 int argc;
23124 char **argv;
23125 {
23130 printf("now is the time\n");
23140 printf("for all good men\n");
23150 printf("to come to aid our party.\n");
23160 }
0007デフォルトの名無しさん2014/08/23(土) 01:02:30.47ID:oyGZMUpk
ここまで読んだ
俺様用栞
0008デフォルトの名無しさん2014/08/23(土) 02:07:30.78ID:DFqma1HT
スレ番無しってのもありな気がする。次建てるときに間違えるのも面倒だし。

>>前スレ http://peace.2ch.net/test/read.cgi/tech/1393965167/989,991
構文処理というかインタプリタ作るって話なら、「次はここを処理する」ってカーソルを後ろに戻せ。
何処に戻るべきかについては、戻ってくる可能性のある場所を通る度にスタックに詰むのが楽だと思う。

ループの入れ子数だけ持っておいて、戻るとき逆順にコードを読んで「for (条件)」が来たらそれを処理、
「for (条件)」がループ終了であれば更に戻り、最上位のループ条件が終了なら前に抜けるでも良いが、
逆順の構文解析では//*/などが対処不能(ブロックコメントか行コメントか判別するまで戻る必要がある)だから、
無駄を覚悟で解析を何度もやり直すとか、解析結果を保持しておくとか、そもそも文法を制限してしまう必要がある。
0009デフォルトの名無しさん2014/08/23(土) 08:16:47.68ID:0xokXgrY
>5
8bitCPU用アセンブラでBASICのコメント行にソースコード書いてアセンブルするって仕様のがあったから
C言語でもありそうだけど。

10 'ORG 0C000H
20 '
30 'START:
40 'DI
...
0010デフォルトの名無しさん2014/08/23(土) 08:30:24.55ID:QEh+7879
>>9
それは言語仕様とは関係なくね?
0011デフォルトの名無しさん2014/08/23(土) 08:34:42.75ID:3fjA/9I4
BASICをエディタ代わりに使ってただけでしょ
0012デフォルトの名無しさん2014/08/23(土) 22:03:17.44ID:++Jtu7HW
ついでに言えば、アセンブルソースをプログラムとして保存可能になる。
どの途、Cには関係ない話だね。
0013デフォルトの名無しさん2014/08/23(土) 23:24:12.55ID:DFqma1HT
>>5>>9
シャープのPC-G850とか、ポケコンでは普通にみかける実装だな。
テキストエディタ自体が行ベースだから行番号なしでコード書けない。
コイツのCは規格への準拠も結構怪しい代物だし、
別に行番号使ったgotoが有るわけでもないけど、
実行時エラーなんかはキッチリ行番号拾ってくる。
0014デフォルトの名無しさん2014/08/23(土) 23:33:47.55ID:2b+VjRfl
>>13
> 実行時エラーなんかはキッチリ行番号拾ってくる。
Debugビルドだったんじゃない?
0015デフォルトの名無しさん2014/08/24(日) 03:50:16.87ID:DmrlVEVo
>>14
ポケコンのCはインタプリタだろう。
>>13
行番号出るのは良いことだ
0016デフォルトの名無しさん2014/08/24(日) 04:34:58.39ID:xqGwHcS8
>>15
なるほどねー
0017デフォルトの名無しさん2014/08/24(日) 12:08:52.68ID:EYMdVqe7
西アフリカで、アウトブレイクした潜伏期間延長型エボラの死者・罹患者の数を散布図にし近似曲線を出してみたら
片対数グラフで直線だから既に指数関数的増加だった

2014年に、西アフリカでアウトブレイクした潜伏期間延長型エボラの死者は、2014年8月半ばで1000人。←今ココ
2014年12月上旬で1万人。
この時点で世界規模で空路シャットダウン開始、世界経済大混乱

2015年5月で10万人。
2015年9月で100万人。
この時点で、第二次世界大恐慌発生

2015年大晦日で1000万人。

ちなみに
http://ja.wikipedia.org/wiki/2014%E5%B9%B4%E3%81%AE%E8%A5%BF%E3%82%A2%E3%83%95%E3%83%AA%E3%82%AB%E3%82%A8%E3%83%9C%E3%83%A9%E5%A4%A7%E6%B5%81%E8%A1%8C
:カナダ保健省のサイトでは体内に数個のエボラウィルスエアロゾルが侵入しただけでも発症するとしている
:ハマダラカが、吸血したての人の新鮮血を媒介しているという学説が浮上している

エボラ出血熱は蚊やアブに刺されただけで感染する。

:「この地域には内戦、政府による搾取、テロが長い間続いており、それによって生まれた恐怖、貧困、猜疑心などがある。エボラは耐え難い騒音に付け加えられた一つのざわめきに過ぎない」
現地では

や る 気 は 皆 無
0018デフォルトの名無しさん2014/08/24(日) 21:08:01.33ID:XBQdtjov
>>15
中間コードへのコンパイル付きだがインタプリタ。
標準のBASICより圧倒的に速いけどインタプリタ。
行番号も出るしデバッガもあるしそこそこ速いし、なかなか侮れない。
けど未だにZ80系でSRAMストレージってのはどーなんだ・・・・・・
0019デフォルトの名無しさん2014/08/26(火) 08:52:41.46ID:JCv2qQRX
行番号付きC言語と言えばX BASICだろーがw
0020デフォルトの名無しさん2014/08/26(火) 09:43:36.48ID:fTVolz/L
C言語なのかBASICなのかはっきりしろ!
0021デフォルトの名無しさん2014/08/29(金) 02:09:15.11ID:NR1ZEKqi
BASICプログラマをC言語へ誘うBASIC
0022デフォルトの名無しさん2014/08/29(金) 11:20:34.46ID:AEpwYDBa
テイルズオブのジャンル表記みたいだな
0023デフォルトの名無しさん2014/08/30(土) 13:35:42.48ID:wIFffQPl
>>20
BASI-C
0024デフォルトの名無しさん2014/09/06(土) 03:51:37.10ID:/nlSSeJZ
n++;
0025デフォルトの名無しさん2014/09/06(土) 15:58:18.28ID:z/gbJJfC
バシシ
0026デフォルトの名無しさん2014/09/09(火) 04:19:30.90ID:6jtdzn18
何のキャリアも身につかないまま年をとり、
派遣先の若手社員にアゴで使われ、
日本各地をさまよい続ける生活にうんざりしたので退職しました。
もし、あなたが入社する前にこの文章...
0027デフォルトの名無しさん2014/09/09(火) 18:24:49.98ID:LoSP30oF
http://www.buzzword.jp/img/face10.png
0028デフォルトの名無しさん2014/09/09(火) 21:49:25.66ID:TKb+1e5Q
デバッグで質問です
dbxでassignで代入できないことあるのですがなぜでしょうか
んで以下のメッセージが出て
操作不能になってプロセスkillするしかないという…

macro definition has to be followed by (, space or EOF
0029デフォルトの名無しさん2014/09/10(水) 06:58:17.15ID:YXyHPeZi
それはさすがにスレ違い。
0030デフォルトの名無しさん2014/09/11(木) 13:04:04.32ID:u7D02Ifa
dbx ってのが何か知らんが
Cのマクロ定数や式の展開はデバッガで扱えないのが常識
0031デフォルトの名無しさん2014/09/16(火) 23:54:05.20ID:nf/RaC+S
ファイルサイズを取得する関数GetFileSize()を下記からコピペし、
http://homepage3.nifty.com/mmgames/c_guide/q_filesize.html

printf("%s %d byte\n","test.c", GetFileSize("test.c"));
printf("%d byte%s\n", GetFileSize("test.c"),"test.c");

を実行すると、
test.c 636 byte
636 byte(null)
となります。(test.cは636バイト)

なぜ2行目の書き方だと"test.c"がnullになるのでしょうか?
(int)GetFileSize("test.c")としたら正しく表示されましたが、
理由がよくわからず、、、。
0032デフォルトの名無しさん2014/09/16(火) 23:59:12.16ID:mr9hFzih
fpos_tは何バイト?
0033デフォルトの名無しさん2014/09/17(水) 00:05:52.61ID:s7LkWnAU
確認したら8バイトでした
0034デフォルトの名無しさん2014/09/17(水) 00:09:11.88ID:0GY9a1ZF
intが4バイトでfpos_tが8バイトだから、%dは間違い
0035デフォルトの名無しさん2014/09/17(水) 00:12:23.62ID:s7LkWnAU
ありがとうございます。間違いが理解出来ました。

バイト数が合っていないとなぜ>>31のような動作になるのでしょうか?
0036デフォルトの名無しさん2014/09/17(水) 00:14:51.39ID:0GY9a1ZF
リトルエンディアンにおける可変長引数の格納方法だな
0037デフォルトの名無しさん2014/09/17(水) 00:33:59.48ID:AN2z60uT
可変長引数の格納仕様は勉強不足でわかりませんが、
4バイト分、次の引数をゼロで埋めたからヌルになったというイメージでしょうか?

マイナスの値や大きな値だったりするとヌル以外になり得るんですかね。
明日試してみます。
0038デフォルトの名無しさん2014/09/17(水) 04:29:10.83ID:TcWodmwf
ファイルサイズが4GB以上だったらNULL以外になるだろうな
0039デフォルトの名無しさん2014/09/17(水) 08:27:58.95ID:f/TEMlG2
>>36
それより先に、cdeclの仕様というべきかと
>>37
printfの可変長部分は4バイト等の単位で切り上げてからスタックに積まれる(引数の後ろから順に積む)
printfは書式指定に当たる毎に書式に沿うサイズでスタックを読んでいく(スタックの上から順に読む)
printf("%d%d",1,2);なら、4バイトの2が積まれ、次に1が積まれた状態で、%d毎に4バイト読んでいく
printf("%d",1,2);だと、4バイトが2つ積まれ、%dで上に置かれた1を読むが、残りの4バイト(2)は放置される
printf("%d%d",(fpos_t)1,2);だと、4バイトの次に8バイト積まれて、%dは4バイトずつ読むから4バイト(2)が残る
fpos_tのうち、スタックで下になった部分(リトルエンディアンだと上位4バイト)が2つ目の%dで読まれた事になる
printfで8バイトの整数を%dで出力する方法は、環境依存もあるけど%lldとか%zdとか%I64dとか%qdとか%Zdとかの指定
0040デフォルトの名無しさん2014/09/17(水) 12:37:28.58ID:gkW3ZjuN
まぁ、面倒だから(int) GetFileSize(...)でいいよ。
2GB超のファイルなんてそうそう扱わないだろw
0041デフォルトの名無しさん2014/09/17(水) 14:22:42.94ID:c1ogrgKw
>>40
と、昔は思ってたけど動画ファイルだと 4G 越えも普通にあるからなぁ
0042デフォルトの名無しさん2014/09/17(水) 14:41:23.34ID:gkW3ZjuN
>>41
そんときゃバイト単位なんて気にしないだろうから、(int) (GetFileSize(...) / 1024)でいいんじゃね?w
0043デフォルトの名無しさん2014/09/17(水) 15:12:35.47ID:pzZaxrRp
>>42
そりゃダメだろ...
バイト云々じゃなく
0044デフォルトの名無しさん2014/09/17(水) 18:25:50.32ID:gkW3ZjuN
>>43
何がダメ?
0045デフォルトの名無しさん2014/09/17(水) 19:10:12.43ID:DzFfqY+X
>>44
fpos_tは除算出来なかったり、intにキャストできない可能性がある
0046デフォルトの名無しさん2014/09/17(水) 19:14:11.87ID:gkW3ZjuN
そういうことか。
それならそもそもprintf()で出力できる保証もないからどうでもいいや。
0047デフォルトの名無しさん2014/09/17(水) 19:20:04.92ID:pzZaxrRp
>>44
GetFileSize( ) の第2引数
0048デフォルトの名無しさん2014/09/17(水) 19:21:49.99ID:tAFeaJze
どこぞの論破君並の...
言語能力疑われますよ
0049デフォルトの名無しさん2014/09/17(水) 19:22:57.94ID:gkW3ZjuN
>31のGetFileSize()のどこに第二引き数が?w
0050片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/09/17(水) 19:25:48.42ID:0GY9a1ZF
Win32 APIにもGetFileSizeという関数がある
0051デフォルトの名無しさん2014/09/17(水) 19:47:29.12ID:tAFeaJze
誤爆
0052デフォルトの名無しさん2014/09/17(水) 19:49:21.06ID:f/TEMlG2
>>47>>50
>>31の話してんだからWin32APIは関係ないし、
Win32APIのGetFileSizeは戻り値DWORDなんだが…
0053デフォルトの名無しさん2014/09/17(水) 20:09:39.59ID:pzZaxrRp
>>52
すまん、素で勘違いしてたわ
0054デフォルトの名無しさん2014/10/06(月) 09:06:22.56ID:oUfLU6hb
sndPlaySound(s,SND_ASYNC| SND_NOSTOP);
を使っているのですが音飛びが多々有ります。
どうしてもこの関数を使いたい時、皆さんはどうしていますか?
0055デフォルトの名無しさん2014/10/06(月) 21:37:07.95ID:oUfLU6hb
54です。効果音ファイルを普通にWindows Media Playerで再生してみましたが
ここでも時々ブツッと言う音がします。wavファイルの作り方が悪いのでしょうか?
それともwaveOutを素直に使ってみるべきなんでしょうか
0056デフォルトの名無しさん2014/10/06(月) 21:55:47.04ID:oUfLU6hb
54です、度々すいません。waveファイルをハイクオリティで作り直すと
上手くいきました。
0057デフォルトの名無しさん2014/11/03(月) 10:41:02.33ID:ygU/AgBb
GetFileSizeEx
0058デフォルトの名無しさん2014/12/04(木) 00:29:47.56ID:44/e6+B9
ポインタ変数の定義の仕方として、変数名(識別子)をaとすると

int* a;

と

int *a;

と

int * a;

の3パターンあると思いますが、皆さんはどれを使っていますか?

個人的には、*は変数の直前につける2番目の書き方がいろんなケースで
よいと思っています。
0059デフォルトの名無しさん2014/12/04(木) 00:48:01.85ID:d1LBD9cS
それでいいです
0060デフォルトの名無しさん2014/12/04(木) 00:53:16.29ID:5qgiX9+F
どれでもいいけど。
型宣言の意味から int* a が好きではある。でも int* a, b とか書くと int *a; int b; と解釈されたような。。。
0061デフォルトの名無しさん2014/12/04(木) 01:37:51.11ID:YQXHeRa/
int *a
これ最高
ワイのポインタちゃん可愛いね
0062デフォルトの名無しさん2014/12/04(木) 05:41:02.47ID:oJkFYkSJ
10年以上勉強しているのにポインタがわからないんですが、諦めた方がいいですか?
char**って何ですかというレベルです
0063デフォルトの名無しさん2014/12/04(木) 07:28:29.88ID:ce/wf1ga
例えば、char* を、A型と仮定すると、
char** → (char*)* → A* のことで、
A型のアドレスを保持する型(参照型)

A型とは、char型のアドレスを保持する型(参照型)
0064デフォルトの名無しさん2014/12/04(木) 07:58:13.26ID:44/e6+B9
>>59
>>60
>>61
ご見解の提示、ありがとうございます。
int型のポインタと考えるか、int* 型の変数と考えるかの違いですかね。。
0065デフォルトの名無しさん2014/12/04(木) 08:58:02.77ID:i8WWsgkD
>>60
「されたような」じゃなくて「される」。
どうしてもというならtypedefとかしとかないと…
0066デフォルトの名無しさん2014/12/04(木) 09:36:36.09ID:IxW6Yc9r
>>64
初心者には "int *"という型があるとみなすと分かりやすいけど
正確ではないので、初心者のうちだけにしておきたい。
変数宣言は教科書通り2番目がいい
0067デフォルトの名無しさん2014/12/06(土) 14:30:53.32ID:EShMBgwp
10年やっててポインタ分からないなんてありえない
デバッガでマシン語見ろよ、としか言えないな
0068デフォルトの名無しさん2014/12/06(土) 22:15:08.25ID:cLOHAQT2
え。デバッガで「マシン語」なんて見れたっけ。
とか言ってみる。
0069デフォルトの名無しさん2014/12/06(土) 23:58:07.47ID:Iv1q4dyj
ネイティブコード吐ける言語のIDEデバッガなら逆アセンブルモードがよく有るし、
汎用のデバッガならソースとマップ情報がない場合逆アセンブル表示するしかない。
逆アセンブル表示の場合機械語を表示するカラムも付いてる場合が結構ある。
0070デフォルトの名無しさん2014/12/07(日) 00:31:53.76ID:3OlOjTxN
見れるのはニーモニックじゃなかったっけ。てことなんだけど。いいや。
0071デフォルトの名無しさん2014/12/07(日) 00:37:54.91ID:T0oVgQBw
マシン語はバイナリエディタで当然見れるし、ニーモニック見れる=アセンブラリスト
見れるってことじゃないんかいw
0072デフォルトの名無しさん2014/12/07(日) 00:39:38.88ID:T0oVgQBw
PCばっかりやってるから仕組みもわからずプログラミングして、何かわかったつもり
になってんだろうから、おまえら、一度組み込み系マイコンでもいじってみろ
0073デフォルトの名無しさん2014/12/07(日) 00:47:53.01ID:3OlOjTxN
あ〜そうなんだ。詳しい方のご意見はひと味違いますね。
0074デフォルトの名無しさん2014/12/07(日) 17:06:01.59ID:dloxDQ5y
ニーモニックとマシンコードが対で表示されてない逆汗なんて見たことない
0075デフォルトの名無しさん2014/12/07(日) 18:44:19.68ID:hNd25+GQ
>>70
メモリーの内容を見れないネイティブコード用のデバッガなんて見たことないけどな

>>74
Visual Studio の逆アセンブル表示
0076デフォルトの名無しさん2014/12/07(日) 22:24:54.18ID:3OlOjTxN
マジレスされても。

でも元の人によると、バイナリエディタ「で」見れるそうですよ。発言元の詳しい方のご説明によると。
・・・ってことなんだけど。まあいいか。。
0077デフォルトの名無しさん2014/12/08(月) 01:08:10.73ID:2PF0peyD
>>75
VSに逆アセンブル表示なんてあったのか
知らなかった、今度使ってみよう
0078デフォルトの名無しさん2014/12/08(月) 07:01:28.62ID:LYySIAAO
>>76
> マジレスされても。

マジレスって >>70 みたいなレスのことだろ w
つまらない返しとも言うけど

> でも元の人によると、バイナリエディタ「で」見れるそうですよ。

ロード時にリロケーションする処理系もあるから、見れないこともあるだろ
0079デフォルトの名無しさん2014/12/08(月) 10:53:57.23ID:5WlbKN0+
>>75
VSでもコンテキストメニューの「コードバイトの表示」をONにすれば表示されるけど…
0080デフォルトの名無しさん2014/12/08(月) 12:31:35.00ID:fTOrgTla
>>79
>>74 が表示を見たことないって書いてるから、例としてあげただけ
そう言う機能があるのは知ってる
0081デフォルトの名無しさん2014/12/08(月) 14:01:36.12ID:5WlbKN0+
例になってないじゃん
0082デフォルトの名無しさん2014/12/08(月) 16:56:33.70ID:fTOrgTla
>>81
なぜ例になってないと思うの?
0083デフォルトの名無しさん2014/12/13(土) 10:03:17.64ID:t4ewlkfO
次のコードは合法。
 struct tagFoo { int x; }
 typedef tagFoo Foo;
 void bar(Foo* p_x); // Foo*型を含む関数のプロトタイプ宣言
でもstruct tagFooの定義が現れないうちに行う次のコードの方は
C89とかC99の規格上合法?
 struct tagFoo;
 typedef tagFoo Foo;
 void bar(Foo* p_x); // Foo*型を含む関数のプロトタイプ宣言
一応VS2010のやつだとコンパイルできる…
0084名無しさん@そうだ選挙に行こう2014/12/13(土) 12:54:17.14ID:t4ewlkfO
スマン
誤: typedef tagFoo Foo;
正: typedef struct tagFoo Foo;
0085名無しさん@そうだ選挙に行こう2014/12/13(土) 16:01:45.36ID:swRuJNUS
C99 6.7.5.3 Function declarators (including prototypes)
p.12: If the function declarator is not part of a definition of that function,
parameters may have incomplete type and may use the [*] notation in their
sequences of declarator specifiers to specify variable length array types.
C89は知らんなあ C89のコードなんて書かないし
0086デフォルトの名無しさん2014/12/14(日) 00:03:10.31ID:okNneqDf
c89でも大丈夫だったはず。
でないと、中身を隠す実装ができない。
0087デフォルトの名無しさん2014/12/14(日) 00:36:11.56ID:GxH7VwwN
>>85, >>86
レス�dクス、
関数のプロトタイプ宣言(the function declarator is not part of a definition of that function)
のparametersがincomplete typeであっても良いというのはそうなのだと思いますが、
 typedef <incomplete-type> <typename-alias>;
みたいなのも移植性的に大丈夫なんでしょうか…
0088名無しさん@そうだ選挙に行こう2014/12/14(日) 07:03:15.85ID:An0uQXKd
>>87
規格書は typedef 宣言時の不完全型について言及していないけど
逆に言うと不完全型であってはならないという記述もないよ。
型の類義語を定義するとだけ書いてる。

それに K&R の typedef の解説ですでに以下の使い方をしていて
typedef に対して不完全型が使えないと K&R のソースコードさえ
通らないことになってしまう。

typedef struct tnode *Treeptr;
typedef struct tnode {
char *word;
int count;
Treeptr left;
Treeptr right;
} Treenode;
0089名無しさん@そうだ選挙に行こう2014/12/14(日) 13:10:54.13ID:arCCpU9q
>>88
ありゃK&Rにtyedef <incomplete-type>の例がありましたか納得
木構造の例は記憶にあったのですが、
構造体の中でstruct tnode* left;とか、構造体タグを直接使ってたのだと記憶違いしてました;
ありがとうございます。
0090デフォルトの名無しさん2014/12/14(日) 20:27:00.00ID:GQuvsumZ
ニモニックだけで値が見れないCのデバッガなんてあるの?
糞過ぎて使い物にならないと思うが
0091デフォルトの名無しさん2014/12/14(日) 22:38:48.71ID:DVcU1Dgz
>>90
値が何を示してるのかよくわからんが、命令コードやオペランドのコードなんて普通見ないと思うが
0092デフォルトの名無しさん2014/12/14(日) 22:44:25.52ID:GQuvsumZ
素人さんのお遊びプログラムと違って仕事でやってる人達はオブジェクトファイルしかないライブラリをバイナリエディタで書き換えて使ったりとか普通なの
デバッガでマシン語見れない開発環境とかあり得ないのよ
0093デフォルトの名無しさん2014/12/14(日) 22:54:31.85ID:DVcU1Dgz
>>92
> オブジェクトファイルしかないライブラリをバイナリエディタで書き換えて使ったり

お遊びでやったことはあるけど、それこそ仕事だとあり得んやろ
ライセンスなにそれ? のブラック企業かよ w
0094デフォルトの名無しさん2014/12/15(月) 00:25:11.64ID:FvIQQyzB
>93は甘い
>90は本当に分かってるのか疑問符
0095デフォルトの名無しさん2014/12/15(月) 01:14:52.04ID:aJM9Vaxx
担当者が自殺してなんとかしてくれって言われて苦労して解析したことはあったな
この業界ブラック過ぎ
0096デフォルトの名無しさん2014/12/15(月) 01:43:18.65ID:/RjxNv/g
何が甘いのか知らんけど、今時バイナリパッチを普通にやってるとかガキの妄想にしか思えないぞ w
0097デフォルトの名無しさん2014/12/15(月) 02:27:24.15ID:mI1D61eZ
>>91
デバッグなんだからそんなお行儀のいい出力は期待できんわ
0098デフォルトの名無しさん2014/12/15(月) 02:37:05.92ID:UPDZozWH
マイクロソフトが始めて販売したC言語の製品名を調べています。
誰か教えてください。
0099デフォルトの名無しさん2014/12/15(月) 04:02:05.34ID:GJ+wxPK4
>>98
http://ja.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B
[製品名] C Compiler 1.0
[リリース] 1983年
[備考] Latice Cを元にした MS-DOS用コンパイラ。K&R未対応。

だろうか。
これより古いのがあるかどうかは知らない
0100デフォルトの名無しさん2014/12/15(月) 04:54:00.22ID:/RjxNv/g
>>97
011B5628: 8D 8D DC FC FF FF: lea ecx,[ebp-324h]

8D 8D DC FC FF FF を見て何してるんだ?
コンパイラのデバッグか? w
0101デフォルトの名無しさん2014/12/15(月) 05:33:47.97ID:0zemH3Hd
>>88
>typedef struct tnode *Treeptr;
が許されてもその場所で
>typedef struct tnode Treeptr;
は許されない
ポインタ型は不完全型とはいい難い
0102デフォルトの名無しさん2014/12/15(月) 08:02:56.00ID:U2IM0CY/
>>100
コードかデータかの判断
0103デフォルトの名無しさん2014/12/15(月) 12:39:15.81ID:1niTm30e
>>102
なんのために?
0104デフォルトの名無しさん2014/12/15(月) 15:20:12.79ID:OqstVb4W
>>101
できるけど?
0105デフォルトの名無しさん2014/12/15(月) 16:22:15.71ID:wfUC2aeT
int max(int vc{}, int no)
int max(int *vc, int no)
これって、どっちも同じなの?
0106デフォルトの名無しさん2014/12/15(月) 16:44:06.65ID:3s9eDA20
いいえ
0107デフォルトの名無しさん2014/12/15(月) 17:29:35.06ID:TN/bTmUZ
はいいえ
0108デフォルトの名無しさん2014/12/15(月) 17:30:48.85ID:iBoaUlSY
片方は文法エラー
0109デフォルトの名無しさん2014/12/16(火) 18:39:51.36ID:jmn4Eb45
もうそろそろC言語も入出力と文字列は言語内スクリプトを用意して機能移譲の標準化すべき時期
というかもう時期を逃してUIに近い部分にはマッタク適さない言語に落ちぶれてしまった
0110デフォルトの名無しさん2014/12/16(火) 19:00:39.03ID:e7BH2hjc
OSを書く言語、がアイディンティティなんじゃねぇの、結局
0111デフォルトの名無しさん2014/12/16(火) 21:39:09.51ID:rJ4g6hQd
>>109
C# なり LL に行けよ
0112デフォルトの名無しさん2014/12/16(火) 21:45:43.66ID:cZGPJzjR
Cは素朴さが美しいんよ
ポインタ片手に
ひたすら構造化プログラミングに打ち込む
これだけでOSも別言語も作っちゃうんよ
0113デフォルトの名無しさん2014/12/17(水) 00:56:19.89ID:dUhWutNj
>>103
コードとデータを混在させてるときに
データを無理に逆アセしてないか確認できるだろ
0114デフォルトの名無しさん2014/12/17(水) 05:56:26.10ID:OmIW45Ki
>>113
組み込みなら有るが、Windowsアプリでそれは無いだろ。
定数テーブルとかは、別領域にとられるはず。
0115デフォルトの名無しさん2014/12/17(水) 06:19:08.03ID:eQacyYSG
初投稿です。
PlaySound("sound", NULL, SND_FILENAME | SND_ASYNC);
PlaySound("sound2", NULL, SND_FILENAME | SND_ASYNC | SND_NOSTOP);
上記のように記述すると"sound"は流れず、"sound2"しか流れません。どうしてでしょう?
あと、soundは流れている間は、sound2は流さないようにしたいのですが、どなたか方法を教えてください。
Visual Studio 2010を使用しています。
0116デフォルトの名無しさん2014/12/17(水) 06:40:44.37ID:kXeYX2vA
SND_ASYNCはずしてSND_SYNCにしないとだめ
そうすると再生中GUIスレッドハングアップするので別スレッドで実行する
0117デフォルトの名無しさん2014/12/17(水) 06:47:51.86ID:eQacyYSG
>>116
ありがとうございます!ちなみに変更するのは1行目か2行目かそれとも両方ですか?
0118デフォルトの名無しさん2014/12/17(水) 08:56:35.85ID:pxRALis4
>>114
Windowsアプリだどスタックに格納されたリターンアドレスをぶち壊さないと申すか
0119デフォルトの名無しさん2014/12/17(水) 12:16:36.06ID:ev+qw7pl
>>117
一行目だけでも二行目は鳴るだろうけど、即時復帰するとスレッドが死ぬタイミングが掴めないぞ。
0120デフォルトの名無しさん2014/12/17(水) 18:47:37.17ID:OTUB5d1O
>>115
1行目に SND_ASYNC を指定しているから、"sound"が流れる前に 2行目が実行されて
"sound2" だけが流れるんじゃないの?

きちんと "sound" も流れて欲しければ 1行目に SND_ASYNC じゃなくて SND_SYNC を
指定すれば良いんじゃないの?

[参考]
http://msdn.microsoft.com/ja-jp/library/cc428768.aspx
0121デフォルトの名無しさん2014/12/17(水) 18:50:55.27ID:OTUB5d1O
あるいは、同時に流したければ 1行目も 2行目みたいに「 | SND_NOSTOP」を付けるとかでどう?
0122デフォルトの名無しさん2014/12/17(水) 18:52:09.65ID:OTUB5d1O
ああ、>>116>>117 を見てなかった…
0123デフォルトの名無しさん2014/12/18(木) 22:20:49.46ID:j55hapsb
木構造を表示するプログラムなのですが書き方がよくわかりません

http://www.dotup.org/uploda/www.dotup.org60150.c.html

print_tree(pp)やptree(p,h)って関数名なんでしょうか?

関数なら
(返却型) (関数名) (仮引数)
{
〜
}

って感じで書くものだと思っていたのですが・・・・
0124デフォルトの名無しさん2014/12/18(木) 22:30:12.81ID:on3AHD1c
>>123
それは古い書き方で、プロトタイプ宣言にするとこうなる。
--
int print_tree(struct node *pp);
--
つーか、今時そんな古い資料なんか見なさんな。
0125デフォルトの名無しさん2014/12/18(木) 22:43:44.14ID:j55hapsb
>>124
古い書き方だったのですか・・・ありがとうございます

あと、print_treeの中でptreeがありますが、
どうしてプロトタイプ宣言してないのに動くのでしょうか?
0126デフォルトの名無しさん2014/12/19(金) 03:58:13.57ID:srwp/ert
>>125
どうしてもこうしても、それが古いCだからとしか言いようがない。
だから、そんなコードじゃ今時勉強にならないってば。
0127デフォルトの名無しさん2014/12/19(金) 04:09:01.62ID:IN4kTmtP
呼び出し前に関数実体定義があればプロトタイプ宣言必要ない
0128デフォルトの名無しさん2015/01/21(水) 11:33:51.74ID:OFD7hqp5
staticとポインタって、どっちが強いの?
0129デフォルトの名無しさん2015/01/21(水) 13:51:06.23ID:n0BLIxbN
コードで質問してみ
0130デフォルトの名無しさん2015/01/21(水) 19:41:13.83ID:CWpKRL6H
惜しい!pointerとスタティックなら即答できたのに…
0131デフォルトの名無しさん2015/01/21(水) 19:41:56.77ID:5iEsyppn
::::::::        ┌───────────────-┐
::::::::        | static関数がやられたようだな…   │
:::::   ┌───└───────────v───┬┘
:::::   |フフフ…奴はアクセス制御の中でも最弱 … |
┌──└────────v──┬───────┘
|ポインタにアクセスされるとは |
| カプセル化の面汚しよwww.    │
└────v─────────┘
  |ミ,  /  `ヽ /!    ,.──、      
  |彡/二Oニニ|ノ    /三三三!,       |!
  `,' \、、_,|/-ャ    ト `=j r=レ     /ミ !彡      ●  
T 爪| / / ̄|/´__,ャ  |`三三‐/     |`=、|,='|    _(_
/人 ヽ ミ='/|`:::::::/イ__ ト`ー く__,-,  、 _!_ /   ( ゚ω゚ )
/  `ー─'" |_,.イ、 | |/、   Y  /| | | j / ミ`┴'彡\ '    ` 
  黒柳徹子      野々村真    草野仁   矢島正明
0132デフォルトの名無しさん2015/01/22(木) 08:24:03.78ID:LOQzAGts
staticの方が強いよ
ヒープはなくても動くけどスタックがないと動かないからね
0133デフォルトの名無しさん2015/01/22(木) 08:30:11.33ID:LOQzAGts
スタックじゃねーや性的なw
0134デフォルトの名無しさん2015/01/22(木) 09:58:09.98ID:fa37PsqD
これが噂の一人ボケツッコミってやつか
0135デフォルトの名無しさん2015/01/22(木) 11:04:05.78ID:QOe1Cpix
>>92
同じ機能のソースを新規に作る
方が手っ取り早くないか?
0136デフォルトの名無しさん2015/01/22(木) 11:58:37.84ID:qr7r7nY5
C初心者です。
char型の以下の3種類あります。

char a[100]
char b[200]
char c[300]

これを使用する時たとえば、a[100],b[200],c[300]といちいちと変数名を指定しないで
配列として使用する方法ってありますか?
ちょっと説明が下手ですみません。
どうしたいと言えば、x[3]という配列を用意して、
x[0] が a[100]
x[1] が b[200]
x[2] が c[300]
というように、x[任意の値]みたいな感じで使用したいです。
よろしくお願い致します。
0137デフォルトの名無しさん2015/01/22(木) 12:05:48.55ID:DCqYwtoa
char a[100];
char b[200];
char c[300];

char *x[3];
x[0]=a;
x[1]=b;
x[2]=c;

int xx=*(x[0]+1); /* xx=a[1] 相当*/
0138デフォルトの名無しさん2015/01/22(木) 12:06:05.78ID:pAtVVLrP
char a[100];
char b[200];
char c[300];
char* x[] = { a, b, c }

x[0][0] .. x[0][99] まで (実は a を指してる
x[1][0] .. x[1][199] まで (実は b を指してる
x[2][0] .. x[2][299] まで (実は c を指してる
0139デフォルトの名無しさん2015/01/22(木) 12:11:47.35ID:qr7r7nY5
>>137-138さん

ありがとうございます。
ポインタとかまだまだよくわからないのですが、
その方法だと、メモリ的にはx[3]という配列も、a[100],b[200],c[200]の合計、
500バイト分消費してしまうのでしょうか?
01401392015/01/22(木) 12:15:48.32ID:qr7r7nY5
あ、すみません合計600バイトでした
0141デフォルトの名無しさん2015/01/22(木) 12:18:33.63ID:ox+o4fhU
xはchar型のポインタ3つ分のサイズですね。
0142デフォルトの名無しさん2015/01/22(木) 12:24:53.88ID:pAtVVLrP
http://ideone.com/Oaf5Lf
こんな感じ

逆に100+200+300 を消費するような x は書けない
0143デフォルトの名無しさん2015/01/22(木) 12:27:34.50ID:pAtVVLrP
途中送信しちゃった

x[0][0] 〜 x[0][99]、x[1][0] 〜 x[1][199]、x[2][0] 〜 x[2][299]
と利用するけれども、
xに必要なメモリ空間を 100+200+300 にするような書き方ができない
01441392015/01/22(木) 12:33:07.15ID:qr7r7nY5
>>141-143さん

ありがとうございます。
http://ideone.com/Oaf5Lf
↑こちらを見た限り、xは600バイト消費しないってことで安心しました。
どうもありがとうございました。
0145デフォルトの名無しさん2015/01/22(木) 15:37:22.56ID:HcRqz3u4
c言語初心者です

0〜50の乱数を発生させそれを当てるゲームを
作成したいです
また入力した数字が正解より大きいか
小さいかも表示しなければいけません

お手数ですがよろしくお願いします
0146デフォルトの名無しさん2015/01/22(木) 15:59:01.08ID:a8JA+dBZ
宿題スレへgo
0147デフォルトの名無しさん2015/01/22(木) 16:00:39.29ID:aykmNMaC
>>145
C/C++の宿題片付けます 168代目
http://peace.2ch.net/test/read.cgi/tech/1408962564/
でもそれぐらい自分で書けよ。わからないところは聞いていいから。
0148デフォルトの名無しさん2015/01/30(金) 15:26:12.36ID:hLjQtDl/
printf("hello");
fgets(str, 10, stdin);
i = strlen(str) -1
これって\0を削除しているんですか?
0149デフォルトの名無しさん2015/01/30(金) 16:16:45.84ID:ohEKYuMM
>>148
改行文字も含めてカウントしたからそれを除いた文字列の長さを求めただけ。
ただし最後の文字が改行かどうか確認していないので条件によっては間違い。
0150デフォルトの名無しさん2015/01/30(金) 16:50:26.35ID:hLjQtDl/
意味がわからん
改行だったら、削除してるの?
0151デフォルトの名無しさん2015/01/30(金) 17:01:03.54ID:S7lOnqCz
>>150
http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/getc.3.html
0152デフォルトの名無しさん2015/02/02(月) 14:58:48.85ID:8AyVYO21
char*p
p = (char*)malloc(80)
if(!p)
このif(!p)を日本語にしてくれませんか?
0153デフォルトの名無しさん2015/02/02(月) 15:03:13.77ID:An/kZWGD
もし p が 0(ぬる) じゃなかったら
0154デフォルトの名無しさん2015/02/02(月) 15:05:34.33ID:8AyVYO21
>>153
molloc使った場合は?
0155デフォルトの名無しさん2015/02/02(月) 18:30:16.71ID:1XujXD7V
if( (char*)malloc(80))
これなら読めるの?
0156デフォルトの名無しさん2015/02/02(月) 18:31:40.18ID:1XujXD7V
間違った
if((char*)malloc(80)!=NULL)
0157デフォルトの名無しさん2015/02/02(月) 18:35:24.64ID:3RnazUVL
_人人人人人_
> molloc <
 ̄Y^Y^Y^Y^Y^ ̄
0158デフォルトの名無しさん2015/02/02(月) 18:50:53.15ID:2aaoC/Ew
>>156
お前にいいたいことが二つある
まず、NULL は使うな
次に malloc() でとってきたポインタをどこにも保存せずに捨て去ってどうしようというのか?
0159デフォルトの名無しさん2015/02/02(月) 19:00:17.15ID:StjX3QvU
>>158
> まず、NULL は使うな

なんで?
0160デフォルトの名無しさん2015/02/02(月) 21:14:49.91ID:v53ekLSV
>>157
バロス
0161デフォルトの名無しさん2015/02/02(月) 21:44:18.89ID:2aaoC/Ew
>>159
Cはな、0 と書いてもヌルポインタと解釈するための賢い解析器でいっぱいなんだ
0162デフォルトの名無しさん2015/02/02(月) 22:10:49.04ID:fVtqApcs
>>161
答えになってない
0163デフォルトの名無しさん2015/02/02(月) 22:20:21.18ID:80Peq6gS
NULLの扱い方は宗教。
0164デフォルトの名無しさん2015/02/02(月) 23:17:07.07ID:TrpaPNXw
!xと書くかx != 0と書くかという宗教戦争も含んでいる気がする。
0165デフォルトの名無しさん2015/02/02(月) 23:17:47.71ID:TrpaPNXw
>>164
x == 0だな
0166デフォルトの名無しさん2015/02/03(火) 00:10:07.74ID:DMsIYAF4
ヌルポインタは、CはNULLでC++が0じゃなかったっけ?
0167デフォルトの名無しさん2015/02/03(火) 00:19:01.85ID:sWg3nV6H
>>166
そうだよ。だからこそ「>>158 NULL は使うな」の意味が不明。
0168デフォルトの名無しさん2015/02/03(火) 05:02:47.56ID:yGwE0+2u
>>167
恥ずかしいなあ、おまえ、あっちいけ

http://www.kouno.jp/home/c_faq/c5.html#2
C言語の定義によれば、ポインターを書くべきところに現れた定数0は、 コンパイル時にヌルポインターに変換される。
すなわち初期化・代入・ 比較をするときに左辺/右辺のどちらかにポインター型の変数か式が 現れたときは、
コンパイラはもう一方の側の定数0がヌルポインター を要求していることを理解し、
適切なデータ型のヌルポインターの値 を産み出す

http://www.kouno.jp/home/c_faq/c5.html#9
Cプログラマーは、ポインターが必要な 状況ではNULLと0は交換可能で、キャストされていない0を使うことは ぜんぜん問題ないことを理解しなければならない。

http://www.kouno.jp/home/c_faq/c5.html#10
C言 語は、ソースコード上の0が(ポインターを使う場面では)ヌルポイン ターを作り出すことを保証している。
0169デフォルトの名無しさん2015/02/03(火) 07:17:08.50ID:Ak6uoSi3
>>168
> ポインターが必要な 状況
その状況とやらをコンパイラーさんが認識できないケースがあるからなぁ
0170デフォルトの名無しさん2015/02/03(火) 07:43:14.50ID:9S3xfl3n
Cでも規格による。以上。
0171デフォルトの名無しさん2015/02/03(火) 07:54:19.20ID:Gq0aN2ws
ポインターも結局は数値変数。
0172デフォルトの名無しさん2015/02/03(火) 08:28:34.37ID:Ak6uoSi3
>>171
昔は far ポインタとかあったので一概にはそうとは言えない
0173デフォルトの名無しさん2015/02/03(火) 09:06:55.44ID:6tRfWx8h
>>168
早く「NULL は使うな」の根拠を出してくれよw
0174デフォルトの名無しさん2015/02/03(火) 10:19:40.04ID:Gq0aN2ws
far型例

unsigned char far *fp;
fp = (unsigned char far *)0xaaaa0000; // fp = aaaa:0000

実装依存らしいが。
0175デフォルトの名無しさん2015/02/03(火) 11:48:37.89ID:u2KW1gca
というか、失敗したらNULLを返す関数の結果をNULLと比較して何が悪いの?w
0176デフォルトの名無しさん2015/02/03(火) 12:49:15.33ID:9S3xfl3n
当人の中ではreturn (foo_t *)0;となっているとでも思ってるんじゃないか?
0177デフォルトの名無しさん2015/02/03(火) 18:28:45.10ID:DOiws90O
#ifndef NULL
#define NULL ((void*)0)
#endif

俺の使ってる処理系にNULLの定義はなかった
0178デフォルトの名無しさん2015/02/03(火) 19:16:27.86ID:yGwE0+2u
>>176
我々がしているのはヌルポインタの話だ。ただ 0 とかけばいいだけのものに誰がタイプする時間をつぎ込む?まして#define で構えて運用するようなものじゃない。マクロ NULL が存在する事自体なにかの間違いなのだ。

http://www.kouno.jp/home/c_faq/c5.html#12
こんなマクロを使っていると、 作者のヌルポインターの知識が怪しげであることをプログラムを読む 人に暗示し、
読む人はこのマクロの定義されているところ、使われて いるところ、どんな形でもポインターの使われているところをすべて 注意深くチェックしなければいけなくなる。
0179デフォルトの名無しさん2015/02/03(火) 19:34:05.56ID:9S3xfl3n
>>178
我々がしているのはナル「ポインタ」の話だ。たかがNULLと書けばいいものに誰がわざとGCCに怒られようとする?ましてC99からはstddef.hに定義されている。マクロNULLが存在する事自体皆が正しいことを示しているのだ。

規格で定義されているNULLを使うと、作者がポインタであることを理解していることをプログラムを読む人に暗示し、
読む人はこのマクロの定義されているところ、使われているところ、どんな形でもポインターの使われているところが、全て同じ仕様になっていることを意識することができる。
// 結構頑張ったよ。これ。
0180デフォルトの名無しさん2015/02/03(火) 21:01:36.28ID:csz98ZS5
0使うとgcc怒るの?
0181 ◆QZaw55cn4c 2015/02/03(火) 21:42:11.31ID:yGwE0+2u
ごめんなさい、私どうかしてたんです。gcc のような立派なコンパイラにプロトタイプなしで NULL を食わせるなんて。
まさか可変長引数でバグるとは思わなかったんです。
gccが赦してくださることは分かっています。
0182デフォルトの名無しさん2015/02/03(火) 23:08:31.73ID:9S3xfl3n
>>180
オプションによっては怒られないが、こういう風に怒る。GCCが言っているようにキャストすればいいんだけど、それって要するにNULLだよね。
>warning: foobar makes�pointer from integer without a cast
0183デフォルトの名無しさん2015/02/03(火) 23:52:23.99ID:yGwE0+2u
>>182
だめだ、ヌルをいれてみてもわからん
http://ideone.com/bhFUM3
0184デフォルトの名無しさん2015/02/04(水) 00:50:33.09ID:71Bn7Bec
NULLを使ってもコンパイラに注意されないソースは書けても
他のプログラマーから注意されないソースは書けません。
0185デフォルトの名無しさん2015/02/04(水) 07:15:05.52ID:84LVbvsU
>>183
だからオプションによると(ry
0186デフォルトの名無しさん2015/02/04(水) 08:10:31.04ID:PGYlb/p8
>>185
だめだ、-Wall をつけてもわからん
0187デフォルトの名無しさん2015/02/04(水) 09:02:55.76ID:POKxKTaZ
>>185
どんなオプション?
0188デフォルトの名無しさん2015/02/04(水) 20:35:57.21ID:0m6SlMzZ
nullptr使おうず
0189デフォルトの名無しさん2015/02/05(木) 09:26:28.38ID:1fblRZ3x
Cでも nullptr使えるようになる?
0190デフォルトの名無しさん2015/02/05(木) 16:12:01.79ID:DRERuoEj
cahr num[50];
scanf("%s",num);
「&」を付けなくていいのは、どうしてですか?
0191デフォルトの名無しさん2015/02/05(木) 16:23:49.43ID:st/HMd4e
int a;
int b[1];

scanf("%d", &a);
scanf("%d", &(b[0])); ⇒ scanf("%d", b);
0192デフォルトの名無しさん2015/02/05(木) 19:15:39.87ID:rqA9TM+j
>109
numと&num[0]がほぼ等価。
C++だと意味が変わってくる。
01931922015/02/05(木) 19:16:40.29ID:rqA9TM+j
アンカ間違えた。
× >109
○ >190
0194デフォルトの名無しさん2015/02/05(木) 21:09:35.93ID:osIltw0C
>>192
>C++だと意味が変わってくる。
どういう事ですか?
同じじゃないんですか?
0195デフォルトの名無しさん2015/02/06(金) 07:54:18.70ID:WgeZDeZC
>192-194
codepadだと何も言ってこないけど
VC++だと
char num[50];
char *p=num;
とやると型違うからキャストしろーとか言ってくる…と思う。
0196デフォルトの名無しさん2015/02/06(金) 12:22:10.17ID:MAhYjxKA
num[0] は *(num+0)だと何度言ったら
0197デフォルトの名無しさん2015/02/06(金) 12:28:16.30ID:odMqvogb
num[1][2]は?
0198デフォルトの名無しさん2015/02/06(金) 12:43:14.55ID:b3gwE4qm
num がポインタなら *(*(num + 1) + 2)
0199デフォルトの名無しさん2015/02/06(金) 18:42:58.11ID:bCe/b2pZ
>>198
>>198
>>198
>>198
>>198
0200デフォルトの名無しさん2015/02/06(金) 18:50:54.91ID:b3gwE4qm
>>199
地の言葉を使いたまえ、君にあわせよう
0201デフォルトの名無しさん2015/02/06(金) 19:05:05.13ID:JzdRSKiT
足りない情報から何かを導き出す生物の頭脳は
まず何が不足しているのかを把握し応答に幅を持たせることから始まる
0202デフォルトの名無しさん2015/02/09(月) 13:49:52.54ID:3ys1NOC1
float と double の違いって何?
%hd %ld %lu %Lf こういうの、どうやって使い分けるの?
0203デフォルトの名無しさん2015/02/09(月) 18:24:08.98ID:FAf8Hiv4
>202
ttp://www.aso.ecei.tohoku.ac.jp/~yoshi/C/double.html
ttp://www.k-cube.co.jp/wakaba/server/format.html


ググれ!そして試せ!!
それが嫌なら諦めろ!!!
0204デフォルトの名無しさん2015/02/18(水) 00:21:13.19ID:BIe8ociq
あれ?構造体のローカルなポインタって返してよかったっけ?
0205デフォルトの名無しさん2015/02/18(水) 10:49:04.73ID:39nSjaAZ
例えば?
0206デフォルトの名無しさん2015/02/18(水) 11:18:13.90ID:BIe8ociq
struct hoge* f() {
struct hoge hage, *uge=&hage;
return uge;
}
0207デフォルトの名無しさん2015/02/18(水) 11:26:02.99ID:Qnb1PJ0H
構造体に限らずローカルの自動変数は関数終了時に開放されるからダメだろ。
static付けるならともかく。
0208デフォルトの名無しさん2015/02/18(水) 11:34:10.12ID:BIe8ociq
ですよ(*´・ω・)(・ω・`*)ネー
0209デフォルトの名無しさん2015/02/18(水) 12:33:38.76ID:/R9PZMCF
しばらくは使えるが、次に関数を呼んだり変数を作ったりしたあたりで死亡w
0210デフォルトの名無しさん2015/02/18(水) 13:12:23.15ID:bozVaD5n
FILE *fopen();
0211デフォルトの名無しさん2015/02/18(水) 13:18:42.42ID:7wpmedCR
ポインタを返すことが悪なのではない
ローカルにおかれた領域のポインタを返すのが悪

malloc とかヒープで確保した領域のポインタをかえしてるんならセーフ
0212デフォルトの名無しさん2015/02/18(水) 13:21:44.82ID:BIe8ociq
標準ライブラリの関数はでけるように作ってるっぽいね。

/* Return the `struct tm' representation of *T in local time,
using *TP to store the result. */
0213デフォルトの名無しさん2015/02/18(水) 14:22:34.62ID:/R9PZMCF
それを使うスレッドが複数動作していると死ぬような作りですけどねw
0214デフォルトの名無しさん2015/02/18(水) 14:38:32.13ID:Lm/UpLLW
使いたいなら排他制御しとけばいいだけ
まあ普通は *_r( ) みたいな奴が用意されてるだろうけど
0215デフォルトの名無しさん2015/02/18(水) 15:18:20.31ID:EUcxkELY
>>212
それ多分 localtime 関数の戻り値のコメントだと思うけど、ここでの local は変換後のローカル時間のことであって
変数のスコープの local とは関係ないと思うけど…
標準ライブラリの関数でも C言語の仕様を超えた機能を作ることは無理だと思う。
0216デフォルトの名無しさん2015/02/18(水) 18:33:51.02ID:EODtkX7j
212は glbc/localtime_r のコメントか
/* Return the `struct tm' representation of *T in local time,
using *TP to store the result. */
struct tm *
__localtime_r (t, tp)
const time_t *t;
struct tm *tp; <--------- (コレ)
{
return __tz_convert (t, 1, tp);
}
ローカルなポインタうんぬんっていうのは
たぶん(コレ)の意味を勘違いしてる
0217デフォルトの名無しさん2015/02/18(水) 19:47:53.86ID:/R9PZMCF
結果を書き込むポインタを引数で受け取る関数が結果のポインタを返す意図がわからない。
0218デフォルトの名無しさん2015/02/18(水) 20:01:30.97ID:P85Z9ZNT
変換失敗したときにはNULLを返す仕様だから。
0219デフォルトの名無しさん2015/02/18(水) 20:08:33.87ID:Lm/UpLLW
>>217
エラーチェックのために変数に入れるから、それをそのまま使えるようにじゃね?

X x;
X* p = f(&x);
if(p == NULL){
error(...);
}
p->xxx = ...
0220デフォルトの名無しさん2015/02/18(水) 22:53:01.91ID:39nSjaAZ
DOS時代に良く見た

返り値
0か正数:正常終了
負数:エラー

で統一していてくれたら…。
0221デフォルトの名無しさん2015/02/19(木) 18:54:26.90ID:x3p0g+OH
>>219
それ別にポインタで返さなくてもいいよね
エラーかどうかは整数でいいし、使うときはx使えばいいし
0222デフォルトの名無しさん2015/02/19(木) 23:17:25.22ID:X0ttxJwq
識別子の記述回数をナルベク減らすのが高級言語の命題だからな
キチガイ Java 辺りから逆行してるけど
0223デフォルトの名無しさん2015/02/20(金) 00:22:00.34ID:ac1ZYgYF
x = (r = v);
この場合、vの値がxに入る事は保障されていますか?
(rが読出しが常に0となるようなレジスタとかだったら処理系依存?)
0224デフォルトの名無しさん2015/02/20(金) 01:05:16.78ID:0cYtUSh9
>>223
#include <stdio.h>
int main(void) {
int r;
double x, v;
v = 5.5;
x = (r = v);
printf( "x:%f r:%d v:%f\n", x, r, v );
return 0;
}
結果
x:5.000000 r:5 v:5.500000
0225デフォルトの名無しさん2015/02/20(金) 06:40:03.25ID:mqB10MT3
rの値が入ることが保証されてるんじゃね?w
0226デフォルトの名無しさん2015/02/20(金) 08:11:47.05ID:LZUT8iK+
>>224 見ていながら r と x の型が異なるケースを思い付かない >>225 が可哀想
0227デフォルトの名無しさん2015/02/20(金) 08:24:24.16ID:KI6wAlAd
代入式の値は右辺の値だからvの値が入る。
rが何であろうと関係ない。
0228デフォルトの名無しさん2015/02/20(金) 09:00:20.83ID:M6RwPuPw
C言語の変数は、あくまでデータを抽象的に表現した高級言語としての概念。
アセンブラレベルでwrite専用レジスタを直接叩いているのとは違う。
例え、レジスタのread値が0や不定であっても、書き込んだデータの内容の扱いは変わらない。
代入文によってwrite動作を行なった後でread動作によって値を上書きすることはない。
逆にレジスタをreadする場合は、代入文の一番右側の右辺値としないとレジスタの値は保証されない。
0229デフォルトの名無しさん2015/02/20(金) 10:19:54.09ID:mqB10MT3
まあ>>226は y = x += 1 に何が入るかとか知ってなさそうだけどw
0230デフォルトの名無しさん2015/02/20(金) 10:30:07.14ID:AgNGosBz
単純代入文の話をしているのに、いきなり複合代入文を持ってくるなよ。
何にでも噛み付くのはみっともないぞ。
0231デフォルトの名無しさん2015/02/20(金) 10:47:52.94ID:Tybi27hY
>>226も煽るような発言してるし、どっちもどっち。
そもそも元の>>223の書き込みがレジスタの存在を示唆しているのに、
最初にデータ型の変換の話に持っていった時点で議論の方向性が迷子になってた。
>>227-228が正解。
0232デフォルトの名無しさん2015/02/20(金) 11:26:03.51ID:LZUT8iK+
>>229
恥の上塗り乙
0233デフォルトの名無しさん2015/02/20(金) 11:56:08.90ID:mqB10MT3
まあ>>232は if(x = 1) のようなバグを入れたときにifが何を条件にするかとか
a = b = c = d = 1 のaが何を代入されるかとか知ってなさそうだけどw
0234デフォルトの名無しさん2015/02/20(金) 14:46:02.31ID:F0YknxCr
v 5.5
mov r, v
mov x, v
0235デフォルトの名無しさん2015/02/20(金) 18:25:20.35ID:mqB10MT3
思い出した。
x = (r = v()); だったときにv()が何度も呼ばれないだろってことで
r = の右辺の値がレジスタに乗ったままx =へも使われる感じ。
0236デフォルトの名無しさん2015/02/20(金) 18:57:00.43ID:Sp8uh5A0
代入文で左辺値に代入されるのは、右辺値の式の評価結果だ。
そして、代入文そのものがその結果で評価される。
右辺値が 定数であろうが、関数の戻り値であろうが関係ない。
また、代入文は右から左の順で評価される。
結果として一番右側にある式の評価結果が順に左の項へと代入される。
0237デフォルトの名無しさん2015/02/20(金) 20:18:43.16ID:Z8tL2aqo
>>236
細かいことだが、その文脈だと代入文ではなくて代入式が正しいな。
代入文とすると、複数の代入演算子を含む式全体を示すことになる。
02382232015/02/21(土) 00:12:24.83ID:qwGLb9dD
回答ありがとうごさいました。

>>224の結果と>>227-228の話からすると、
(r = v)の評価結果は、型がrで値がvという事ですかね
0239デフォルトの名無しさん2015/02/21(土) 00:22:14.89ID:4U2Jdz4k
型がrで値もrだよ
0240デフォルトの名無しさん2015/02/21(土) 02:31:13.39ID:SLdiXOoX
言語仕様読んで処理系の実装仕様読んで実際に吐かれたマシン語読めばいいのに
2chで質問して回答をそのまま信用、みたいなことばかりしてたらいつまでたっても底辺PGのままだぞ
0241デフォルトの名無しさん2015/02/21(土) 05:11:15.89ID:MGlH6d10
ISO/IEC9899:TC3
6.5.16 Assignment operators
Semantics
3 An assignment operator stores a value in the object designated by the left operand. An
assignment expression has the value of the left operand after the assignment, but is not an
lvalue. The type of an assignment expression is the type of the left operand unless the
left operand has qualified type, in which case it is the unqualified version of the type of
the left operand. The side effect of updating the stored value of the left operand shall
occur between the previous and the next sequence point.

JISX3010 同パラグラフ
代入演算子は、左オペランドで指し示されるオブジェクトに値を格納する。代入式は、代入後の
左オペランドの値をもつが、左辺値ではない。(以下略)

"An assignment expression has the value of the left operand after the assignment, but is not an lvalue."
・代入式は、"代入後の"左オペランドの値をもつ。代入後 (after the assignment) であって、代入前ではない
0242デフォルトの名無しさん2015/02/21(土) 06:41:42.07ID:sewBQTux
寝ている間に ID:LZUT8iK+ が一番のクソでしたという流れになっていてワロタw

C言語はvが代入されたrの値を返すという意味をコンパイラに入力するが、
コンパイラはrとまったく等しい同じ型のvがeaxに載ってるのだから
そのeaxをそのままxにも代入してしまえばいいだろwwという
アセンブリリアントパークを出力してくるということだよなw
0243デフォルトの名無しさん2015/02/21(土) 07:12:26.16ID:s8VfnH0M
>>242
意味不明。
eaxは汎用レジスタのひとつに過ぎない。
別レジスタ経由の可能性もあるし、アドレスをスタック経由で扱う可能性もある。
double型などでeaxのレジスタ長に収まらない場合はどうするんだ?
他人を叩くつもりで無理に発言すると、自分の無知を晒すだけだぞ。
0244デフォルトの名無しさん2015/02/21(土) 07:53:08.14ID:sewBQTux
>>243
どうも何もeaxを使うこともdoubleだったら変換してmmxのレジスタを使っちゃったりするのも
コンパイラの中の人が対象CPUに合わせて勝手にやることであって、C言語の仕様は
>>241の通りにrを右辺値として返すだけだろう。

他人を叩くつもりで無理に発言すると、自分の無知を晒すだけだぞ。
0245デフォルトの名無しさん2015/02/21(土) 08:36:18.41ID:jMEJtOTB
>アセンブリリアントパークを出力してくるということだよなw

>コンパイラの中の人が対象CPUに合わせて勝手にやることであって、

自分でコンパイラの実装の話を振っておきながら、最後はコンパイラの中の人が勝手にやることにして
広げた風呂敷を畳んだな。
何がやりたかったんだw
0246デフォルトの名無しさん2015/02/21(土) 09:05:24.01ID:sewBQTux
風呂敷を広げたら人叩きしかできない>>243みたいなのだけが来たから
そりゃ風呂敷をたたむしか無いわなw
0247デフォルトの名無しさん2015/02/21(土) 09:14:12.30ID:jMEJtOTB
いや、お前さんが>>242の最初に人を叩くような発言したからだろ。
昨日のスレの流れで、あんな感想持っていたのは殆どいないと思うがな。
0248デフォルトの名無しさん2015/02/21(土) 09:28:43.14ID:9ifGG6wD
ID:sewBQTux = ID:mqB10MT3
無知を晒しながらも、思い込みが激しく他人を叩く発言を続ける面倒な性格
スルー推奨
0249デフォルトの名無しさん2015/02/21(土) 09:36:16.42ID:sewBQTux
少なくとも ID:LZUT8iK+ = ID:9ifGG6wD あたりが
無知どころか他人を叩くことしかできない
面倒なスルー推奨な奴か。
0250デフォルトの名無しさん2015/02/21(土) 11:12:47.39ID:0DxoAiRe
ド初心者しか残ってないのか。酷いスレだな。
> rが読出しが常に0となるようなレジスタとか
と言ってるんだから、質問の意図は明白
volatileに言及していない奴が皆無なので全員素人

>>223
> この場合、vの値がxに入る事は保障されていますか?
保証されていない。VCに-O2つけてコンパイルした結果
> mov eax, DWORD PTR _v$[esp-4]
> mov DWORD PTR _r, eax
> mov DWORD PTR _x, eax

保証したいなら、rをvolatileにすべし。同じ最適化オプションでコンパイル。
> mov eax, DWORD PTR _v$[esp-4]
> mov DWORD PTR _r, eax
> mov eax, DWORD PTR _r
> mov DWORD PTR _x, eax
rからきちんと読みだしている。

ド素人レベルを採点してやる
>>224 文法は理解しているが、質問の意味を理解できずに混乱の元を作った戦犯
>>225 文法は理解しているが、質問の意味が分かっていない
>>226 質問の意味を理解できずに煽ったバカ
>>227-228,231 論外、文法を理解していない
>>229 イミフ
>>239 文法は理解している。この中で一番レベルが高い素人。
>>244 規格書示されたのに読めないバカ。論外の論外。
0251デフォルトの名無しさん2015/02/21(土) 11:20:27.11ID:0DxoAiRe
誤 volatileに言及していない奴が皆無なので全員素人
正 volatileに言及してる奴が皆無なので全員素人
0252デフォルトの名無しさん2015/02/21(土) 12:02:22.94ID:faAJ+kgU
質問者の意図としては組み込み用途のC言語だと思ったのだが違うのか?
組み込みでのレジスタの意味は、普通のCPUの汎用レジスタのことではない。
周辺ペリフェラルの特殊レジスタのことを意味する。
x = (r = v);
と記述されていれば、制御変数vを特殊レジスタrに代入し、ワーク変数xに状態を保存する、と考える。
rの読み出しが常に0というのは、write専用レジスタか、read/writeで別動作を行うレジスタだからだ。
入力ポートの制御レジスタなどでよく見られる。
write動作はポートのデジタル/アナログ入力の切替えや内蔵プルアップ抵抗の接続などを制御し
read動作はポートの状態を返す。
write値とread値は一致しない。
一旦writeしてしまうと後からその値を知る手段はない。
そのために、制御変数vとワーク変数xを別に管理する必要があるのだ。
volatileなど何の意味もない。
回答の中だと状況を理解していたのは>>228だけだな。
0253デフォルトの名無しさん2015/02/21(土) 12:08:05.06ID:0DxoAiRe
ああ、オレが読み違えてたわ。首吊ってくる

>>223への回答としては、保証されていないし、保証する事は出来ない。
0254デフォルトの名無しさん2015/02/21(土) 12:16:29.01ID:sewBQTux
rへvolatile以外のvolatileみたいなものを付けて宣言するとか
そういう機能がコンパイラに足されていて、それを使っていない場合
r = x = v; としないと警告が出たり失敗したりしそうな気もするが、
値は書けるが読むと0という情報だけでは謎。
0255デフォルトの名無しさん2015/02/21(土) 13:10:19.55ID:0DxoAiRe
>>254
「論外の論外」と言うキミの評価には変わりはないから、引っ込んでて良いよ。
0256デフォルトの名無しさん2015/02/21(土) 20:13:12.79ID:TZOTJCBR
>>228だけど、まだこの話題続いていたのか。
厳密に解釈すれば>>253さんの言う通りなんだろうけど、普通は (r = v) の評価結果は v(=rのwrite値) になると思うよ。
そして x への代入時に 改めて評価結果を r の read値で上書きすることはまず行なわれない。
今まで組み込みプログラム開発を行なってきたけれど、
x = (r = v);
の記述で問題になったことは一度もない。
むしろ>>250のように r を volatile宣言した場合、再読み込みが行なわれる可能性があることに驚いている。
メモリ上に展開される変数はともかく、特殊レジスタそのものをvolatile宣言するという発想はなかったけれど
今後は注意が必要だな。
まあ特殊レジスタの設定周りは特に念入りに実機デバッグを
行なう部分だから問題ないとは思うが。
0257 ◆QZaw55cn4c 2015/02/21(土) 20:27:55.07ID:qCqW+14K
>>256
気にするな、そもそも標準 C/C++ の範囲で、特定のアドレスやレジスタと、ポインタでない変数を紐付けする方法はない
>>253 は遅かれ早かれ気が狂うタイプ
0258デフォルトの名無しさん2015/02/21(土) 22:56:46.44ID:0DxoAiRe
>>256
ふつー
http://ds.arm.com/ja/developer-resources/tutorials/using-c-variables-to-access-memory-mapped-peripherals/
0259デフォルトの名無しさん2015/02/21(土) 23:13:11.81ID:7T53oReE
>>258
相変わらず全く本質を理解していないな。
レジスタに関連付けた制御変数のメモリマッピングの話と、レジスタそのものの挙動の区別くらいしろ、アホ。
0260デフォルトの名無しさん2015/02/21(土) 23:15:37.59ID:s76k4WVR
もうC言語やらなくなって随分経つんだが
x=(r=v) を x=v; r=v; って書かないのはなんか利点があったっけ?
デバッガ見るのも後者のが楽じゃない?
0261デフォルトの名無しさん2015/02/21(土) 23:25:06.51ID:0DxoAiRe
>>259
お前はついてこれないのだから、無理するな。
0262デフォルトの名無しさん2015/02/21(土) 23:33:47.65ID:7T53oReE
>>260
今までの議論のような曖昧さをなくす意味では後者の方が適切な場合もある。
ただし代入文を2つに分けた場合、途中で外部割り込み処理が発生した時に、
不適切な処理を行うと v が書き換えられて挙動が変わるリスクもある。
どちらにも長短はある。
0263デフォルトの名無しさん2015/02/21(土) 23:39:24.23ID:0DxoAiRe
>>262
お前はついてこれないのだから、無理するな。

> ただし代入文を2つに分けた場合、途中で外部割り込み処理が発生した時に、
> 不適切な処理を行うと v が書き換えられて挙動が変わるリスクもある。
コーヒー噴いた
0264デフォルトの名無しさん2015/02/21(土) 23:41:35.03ID:qCqW+14K
割り込みが発生して挙動が変わるようでは‥
0265デフォルトの名無しさん2015/02/21(土) 23:46:42.47ID:7T53oReE
全ての実行環境が割り込みハンドラを用意してくれるOSの上で動作しているとは限らないのだよ。
0266デフォルトの名無しさん2015/02/21(土) 23:50:59.25ID:4PqmzAg9
>>260
vのunused variableの警告は潰せるね
キャストに置ける問題は同じだし気にすること無いんじゃないかな
どうせテスト通らないんだしさ
0267デフォルトの名無しさん2015/02/21(土) 23:51:20.70ID:SLdiXOoX
>>262
全く的外れなこと言ってるよキミ
取り敢えずマイコンのことなんも知らなそうだけど皆が話してるレジスタってSFRのことだからね
0268デフォルトの名無しさん2015/02/21(土) 23:51:35.13ID:0DxoAiRe
>>265
お前はついてこれないのだから、無理するな。
痛々しすぎる。
0269デフォルトの名無しさん2015/02/21(土) 23:55:34.89ID:7T53oReE
>>267
分かってるよ、その上で発言してる。
何かおかしいか?
0270デフォルトの名無しさん2015/02/22(日) 00:00:30.06ID:3QMfkeP2
>>269
もしかして新人さんなのかな
取り敢えずいろいろ勘違いしてるようだから基礎からしっかり勉強した方がいいと思うよ
0271デフォルトの名無しさん2015/02/22(日) 00:02:48.37ID:TRUNFqhM
それはそうだとしても‥

揮発領域を扱うのならいったん不揮発領域へコピーする(ことによって取得タイミングを明確にする)とか、
その揮発領域を扱う前後にクリティカルセクション等のガードを置くとか‥あ、これは至れり尽くせり OS 上での話だけれども

なんだかどうでもいいくらいに難しい話だ‥
0272デフォルトの名無しさん2015/02/22(日) 00:02:54.13ID:xxw4z/3i
>>260
> x=(r=v) を x=v; r=v; って書かないのはなんか利点があったっけ?
前者と後者は等価ではない
x=(r=v)はr=v; x=r;
0273デフォルトの名無しさん2015/02/22(日) 00:06:14.64ID:DVQv7PP4
そもそも「readとwriteで値が変わるレジスタを変数に割り当てた環境での挙動」なんて規格で定められてるんか?
コンパイラ依存としか言い様がない気が
0274デフォルトの名無しさん2015/02/22(日) 00:06:57.24ID:3QMfkeP2
>>271
クリティカルセクションのガードとか意味ないよ
レジスタの値を変えるのはCPUじゃないんだから
その為のvolatileでしょ
0275デフォルトの名無しさん2015/02/22(日) 00:08:42.00ID:TO8vYIN7
いや、割り込み云々とかは実際の経験からの話だがな。
外部入力割り込みとかは、ノイズフィルタを通過してくるような想定外の外部ノイズに対しては
意図しないレベルの多重割り込みを発生させて深刻な問題を引き起こす可能性がある。
ハード設計の不具合まで想定できなかった。
その時の例を挙げただけだ。
0276デフォルトの名無しさん2015/02/22(日) 00:10:14.80ID:3QMfkeP2
>>275
え?
多重割り込みで問題とかそれソフトが糞なだけでしょ
ハードのせいにしないでよね
0277デフォルトの名無しさん2015/02/22(日) 00:10:51.97ID:xxw4z/3i
> ただし代入文を2つに分けた場合、途中で外部割り込み処理が発生した時に、
> 不適切な処理を行うと v が書き換えられて挙動が変わるリスクもある。
0278デフォルトの名無しさん2015/02/22(日) 00:13:34.30ID:xxw4z/3i
x = r = v;
と書くと、ハード設計の不具合まで考慮してくれるのか、そりゃすげー。
0279デフォルトの名無しさん2015/02/22(日) 00:15:45.43ID:3QMfkeP2
あはは
割り込み禁止にすることすら知らないのね
例えC言語の仕様を完璧に理解していてもマイコンのこと知らなかったら組み込みでは使い物にならないというよい例だね
0280デフォルトの名無しさん2015/02/22(日) 00:16:05.01ID:TRUNFqhM
>>274
ん、身近なマルチスレッドしかみえてなかったね。

ポインタ先ではなく、ふつうの変数そのものを、特定のメモリに置いたり(メモリマップドな)レジスタに割り付けたり‥か‥
そんなにほいほい不揮発な領域を触りまくるのもどうかと思うけれども‥
a = b = c = 0; で(十分な世界で)満足しよう‥
0281デフォルトの名無しさん2015/02/22(日) 00:17:16.01ID:TO8vYIN7
>>276
まあ配慮が足りなかったといえばそれまでだが、あらかじめ設計目標としていた処理時間は、ハード、ソフト設計部門で共有していたんだがな。
0282デフォルトの名無しさん2015/02/22(日) 00:18:09.66ID:xxw4z/3i
x = r = v;
と書くと割り込み禁止にしてくれる、至れり尽くせりのコンパイラがあるのか。
そりゃーすげー。
で、どこ製のコンパイラ?
0283デフォルトの名無しさん2015/02/22(日) 00:20:07.79ID:xxw4z/3i
>>279は新人君じゃなかった。すまんね。
0284デフォルトの名無しさん2015/02/22(日) 00:22:37.60ID:xxw4z/3i
>>280
不揮発はnon volatileな
0285デフォルトの名無しさん2015/02/22(日) 00:24:28.58ID:TO8vYIN7
>>282
特別な事情があって割り込み禁止には出来なかった。
参照箇所を限定することでCPU内のレジスタで完結させることが出来れば、割り込み時にはvの値をスタックに退避できる。
0286デフォルトの名無しさん2015/02/22(日) 01:14:10.26ID:xxw4z/3i
辻褄が合わなくなって来ました。(爆笑)

> 取り敢えずマイコンのことなんも知らなそうだけど皆が話してるレジスタってSFRのことだからね
0287デフォルトの名無しさん2015/02/22(日) 01:22:30.21ID:f0SsoUfz
割り込み禁止/許可の関数ぐらいあるだろ。
0288デフォルトの名無しさん2015/02/22(日) 01:50:20.08ID:TO8vYIN7
別スマホからだけど>>285

>>286
vの取扱いについては内部レジスタの話、rはSFRの話な。

>>287
使用していたマイコン、というかボード設計の制約で、外部入力割り込みを禁止するとタイマ割り込みまで禁止されてしまって
処理が回らなくなるのでどうにもならなかったんだよ。

とりあえずもう寝る。おやすみ。
0289デフォルトの名無しさん2015/02/22(日) 01:52:23.25ID:TO8vYIN7
あれ、ID変わってない?
まあいいや、それでは失礼
0290デフォルトの名無しさん2015/02/22(日) 08:04:10.86ID:CyC+ZTer
昨日のID:0DxoAiReが単なる鬼畜でワロタw
0291デフォルトの名無しさん2015/02/22(日) 11:34:55.70ID:XKkbsrmM
で、結局結論はどうなのよ?
volatile とか割り込みの前に規格に言及する奴がいないのが(俺も含めて)ここのスレの限界を表してるな...
0292デフォルトの名無しさん2015/02/22(日) 12:30:50.41ID:OSQlo3xO
保証は出来ない、しかし実用上は問題ない、でいいだろ。
規格だの仕様だのばかり覚えて、頭でっかちになっても実務では何の役にも立たん。
学校の英語のテストやTOEICで点数ばかりいくら高くても、海外でコミュニケーションすら
まともにとれない役立たずと同じだ。
0293デフォルトの名無しさん2015/02/22(日) 12:34:27.00ID:TRUNFqhM
というか、volatile な領域をべたべた触りまくるな、でいいと思うけれども‥
0294デフォルトの名無しさん2015/02/22(日) 12:56:00.60ID:CaryxoIP
>>293
え?
なにズレたこと言ってるの?
レジスタ叩いてハードを制御してなんぼの組み込みの話してるのにvolatileな領域さわるなって…
0295デフォルトの名無しさん2015/02/22(日) 12:58:47.58ID:TRUNFqhM
>>294
そんなメモリマップドな領域に対して x = y = z; みたいな書き方をするなってことだよ
0296デフォルトの名無しさん2015/02/22(日) 13:02:47.11ID:CaryxoIP
>>295
それなら同意する
0297デフォルトの名無しさん2015/02/22(日) 13:24:58.87ID:xxw4z/3i
ますます辻褄が合わなくなってきました。(大爆笑)

>>288
> vの取扱いについては内部レジスタの話、rはSFRの話な。
するとrにvolatileは必須となり、↓と矛盾。
> ただし代入文を2つに分けた場合、途中で外部割り込み処理が発生した時に、
> 不適切な処理を行うと v が書き換えられて挙動が変わるリスクもある。

論外の論外は正しい評価だったな。
0298デフォルトの名無しさん2015/02/22(日) 13:34:07.01ID:xxw4z/3i
>>291
> "An assignment expression has the value of the left operand after the assignment, but is not an lvalue."
>・代入式は、"代入後の"左オペランドの値をもつ。代入後 (after the assignment) であって、代入前ではない
この意味が分からないから説明してくれと言っているのか?

>>292
> 保証は出来ない、しかし実用上は問題ない、でいいだろ。
アマチュアならそれで良いけど、まさかお前職業PGじゃないよな。

>>295
キミは↓の世界に閉じこもっていなさい。
> a = b = c = 0; で(十分な世界で)満足しよう‥
0299デフォルトの名無しさん2015/02/22(日) 14:56:18.70ID:TRUNFqhM
>>298
近年みられない大漁、まことに慶賀の至りだ
0300デフォルトの名無しさん2015/02/22(日) 15:04:48.38ID:D9wAj7DD
ソース内の関数で共有したいオブジェクトの割り当てってどこでやってるの?
C++クラスならメンバー変数に置くようなやつ。
0301デフォルトの名無しさん2015/02/22(日) 15:18:52.26ID:YCoQmSjP
構造体struct foo
struct fooとかくのがめんどくさい場合
typedef struct foo foo;
struct foo
{
    int number;
    char [BUFFER_SIZE];
};

foo a;
foo *p = &a;

C++のclassは、privateであって、途中でpublicを指定するが、
C++のstructは、なにもしなかったらpublic
0302デフォルトの名無しさん2015/02/22(日) 15:23:59.89ID:D9wAj7DD
いやーすまん。そういうことじゃなくて・・。もうちょっと具体的に書いてくるか(´・ω・`)
0303デフォルトの名無しさん2015/02/22(日) 15:24:10.32ID:Ajpfsgmt
ファイルスコープ変数であれば、普通のグローバル変数に対して static 宣言すればいい。
0304デフォルトの名無しさん2015/02/22(日) 15:24:55.23ID:YCoQmSjP
#define BUFFER_SIZE 80
#include <stdio.h>
#include <string.h>
typedef struct foo foo;
struct foo
{
    int number;
    char c[BUFFER_SIZE];
};

int main(void) {
    foo a, b;
    foo *p = &a;
    foo *q = &b;

    a.number = 2;
    strcpy(a.c, "two");
    b = a;
    printf("%d: %s\n", q->number, q->c);
    return 0;
}
0305デフォルトの名無しさん2015/02/22(日) 15:26:07.23ID:wHKlPZGJ
>>300
static つけて内部リンケージにするくらいかな?

foo.c
static int foo;
void f() {foo = 1;} // OK
void g() {foo = 2;} // OK

bar.c
void h() {foo = 3} // できない
0306デフォルトの名無しさん2015/02/22(日) 15:30:52.09ID:YCoQmSjP
#include <stdio.h>
int main(void)
{
    int a = 2;

    {
        int a = 13;
        printf("a = %d inside the block\n", a);
    }

    printf("a = %d outside the block\n", a);
    return 0;
}
0307デフォルトの名無しさん2015/02/22(日) 16:37:30.55ID:D9wAj7DD
これは

------------------------
日時  エラーコード エラーメッセージ [newline]
15/02/01 10 メッセージ [newline]
------------------------

みたいな形式のファイルを読み出すのを想定しています。
これに指定範囲の日付を取り出すとかあれこれやりたい。

http://codepad.org/stKpIesW
0308デフォルトの名無しさん2015/02/22(日) 16:42:15.29ID:D9wAj7DD
>>303
グローバル結構つかうもの?

・グローバル
・ヒープ
・関数内のローカル変数が消えるまえに再帰呼出し
・main内

これくらいかしら。

void f(int* p){ ... }

みたいなに
int* x; <- 未初期化
f(x);

こういうのも大きくなってくるとやりそうなんだけど(´・ω・`)
0309デフォルトの名無しさん2015/02/22(日) 19:26:59.27ID:E6WmvJSB
起動時にファイル等から読むけど、その後は(複数のソースに渡る) read only なパラメータ値郡
を構造体にしてグローバル変数にしてた
0310デフォルトの名無しさん2015/02/22(日) 19:30:48.38ID:D9wAj7DD
なるほど。構造体にまとめといてうまくグローバルはありか。
あれこれ試行錯誤してみるよ。
0311デフォルトの名無しさん2015/02/23(月) 14:56:27.73ID:Z2ABtNFV
僕の考えた最強のグローバル構造体変数
0312デフォルトの名無しさん2015/02/23(月) 15:14:25.58ID:6IRoEuzn
気を付けろ。
グローバル変数の話をすると、また例の
 extern は要らない子ぉ!
が現れるぞ。
0313デフォルトの名無しさん2015/02/23(月) 21:29:54.76ID:JzyWrWVg
>>312
おう,芸人冥利につけるお言葉 thx

でもこのネタで 3 年はつらい,そろそろ新しいのを見つけないと
「this に null は正義」 http://peace.2ch.net/test/read.cgi/tech/1313183984/793
「ヌルを手繰って無問題」 http://ideone.com/oJGfP8
を考えてるが,イマイチ,そもそもC++だし

一見厨二病っぽく,よくよく考えるといろいろあり,でも結局厨二病だった,みたいなナイスなネタはないものか‥
0314デフォルトの名無しさん2015/02/23(月) 21:38:29.89ID:NUHfcvo6
extern は要らない子でググるとまとめwikiがトップででてくる
何度みても大爆笑だわ
http://ideone.com/Digq4t
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
printf("hello, world!\n %s", argv[0]);
system("ls -l ./prog");
return 0;
}
/* end */
0315デフォルトの名無しさん2015/02/23(月) 22:42:46.72ID:5823dt6R
externはともかくQzがいらない子だということはよく分かった
しかしあのまとめ記事作ったやつも相当いらない子だろうと思った
0316デフォルトの名無しさん2015/02/25(水) 19:53:16.34ID:TR6BrE7U
a.txtの中身を
aaa
aaa
bbb
bbb
としたときに
a.txtに
aaa
aaa
b.txtに
bbb
bbb
となるようにしたいです
いまは新しくc.txtにaaa, aaaを入れてからa.txtにコピーするようにしてます
一時的にファイルをつくらないですむ方法ってありますか?
0317デフォルトの名無しさん2015/02/25(水) 19:59:27.60ID:Yt0Ck2Kc
なんでc.txtがでてくるのかさっぱりわからないんだが
俺の頭が悪いのかな
0318デフォルトの名無しさん2015/02/25(水) 20:21:39.22ID:rorXnPjF
>>316
a.txtはリードライトでオープンする。
a.txtを読んで、bbbの位置を記憶しておく。
b.txtを書き終わったら、a.txtをさっき記憶した位置にtruncate(chsize)する。

>>317
>俺の頭が悪いのかな
そうだね。
0319デフォルトの名無しさん2015/02/25(水) 21:22:01.67ID:2gIIOhx5
1行読む。
読んだテキストの先頭一文字に ".txt" を追加してファイル名とする。
そのファイルを追記で開いて最初に読んだ行をそのまま出力してクローズする。
EOF になるまで最初から繰り返す。

ってんじゃダメなん? このままじゃ効率めちゃくちゃ悪いけど。
0320デフォルトの名無しさん2015/02/25(水) 21:30:05.24ID:Wk2wN7sa
へー、a.txtを読み込み中にa.txtを書き込みでオープンするのか
0321デフォルトの名無しさん2015/02/25(水) 22:01:42.11ID:2gIIOhx5
あーそっか。同じファイルに出力するんなら無駄わな。
0322デフォルトの名無しさん2015/02/25(水) 22:09:09.61ID:TR6BrE7U
>>318
ありがとうございます
思ってたとおりの動作ができました
0323デフォルトの名無しさん2015/03/06(金) 09:51:52.47ID:RF7Pz6sf
x < yであれば-1
x==yであれば0
x>yであれば1
をていうのやりたいけど、「&&」 か「|| 」を使って
どうやればいい?
0324デフォルトの名無しさん2015/03/06(金) 09:58:34.42ID:uUtd6mTH
論理演算の結合 && || で得られるものは
論理演算の結果である 0 か 非0
使うものの選択が間違っている

多分 3項演算子が答え
(x < y) ? -1 : ((x > y) ? 1 : 0))
0325デフォルトの名無しさん2015/03/06(金) 10:10:06.22ID:RF7Pz6sf
ありがとうございますm(__)m
0326デフォルトの名無しさん2015/03/06(金) 14:05:51.32ID:dsDP5DeS
>>324
> 論理演算の結合 && || で得られるものは
> 論理演算の結果である 0 か 非0
ウソ教えんな。&&, ||で得られるものは0か1

>>323
&&,||は使わない
(x > y) * 2 + (x == y) - 1;

ただし、世の中は>>324のような間違った知識でドヤ顔しているのが多く、
このような技法は誤解を招くので推奨されない。
0327デフォルトの名無しさん2015/03/06(金) 14:27:46.20ID:ffY3VuPR
(x>y) - (x<y)
0328デフォルトの名無しさん2015/03/06(金) 15:16:31.43ID:uUtd6mTH
あー すまねー
論理演算結果の値を生で使うなんてことしていなかったら
0329デフォルトの名無しさん2015/03/06(金) 22:03:23.05ID:qwFgbeNs
演算の戻り値の認識間違い是正はいいことだとしても
三項演算子の方法で間違ってない(というか素直な)んだから
推奨されない方法だというなら教えるなよw
0330デフォルトの名無しさん2015/03/06(金) 22:11:08.65ID:CVmG+FMN
>>326より>>327の方がキレイだね。
きもいことには変わりないが。
03315602015/03/06(金) 22:12:22.18ID:rW0fbm/s
>>329
ちんけな知識でどや顔したかったんだろ
0332デフォルトの名無しさん2015/03/06(金) 22:16:40.60ID:qIso92hc
>>329
推奨されない方法には目をつぶる。これが通用するのは幼稚園児まで。
0333デフォルトの名無しさん2015/03/07(土) 07:47:21.38ID:jW+ek3hJ
なんかx=1-xのような臭いがするなw
0334デフォルトの名無しさん2015/03/07(土) 08:12:14.52ID:ywfVPbBH
>>326に理系的センスが無いことは確かだな
0335デフォルトの名無しさん2015/03/07(土) 09:02:07.20ID:QPvGFmZE
BASIC時代にIF文は重いと言われてそんなソース書いたな。
K$=INKEY$:XX=(K$="4")-(K$="6"):YY=(K$="8")-(K$="2")
とか。
0336デフォルトの名無しさん2015/03/07(土) 09:55:41.11ID:HzC+Q997
三項演算子使ってもif〜else if〜else使ってもコンパイルしたら同じバイナリになるんだから
素直にif文で書けばいいと思う
0337デフォルトの名無しさん2015/03/07(土) 10:07:29.74ID:ywfVPbBH
IF文は重い?
そんなの条件式にアホな処理書くからだろ
0338デフォルトの名無しさん2015/03/07(土) 10:14:02.03ID:ouMiK/F/
BASICだからアセンブラの単純な演算→分岐じゃなくて
IFルーチンの処理だからそういう場合もあるんじゃない?

単純にX1と88のBASICは88の方が重いとかあるし。
0339デフォルトの名無しさん2015/03/07(土) 10:18:07.68ID:1nTuk0pV
xをint32として、(x>>31)|(x!=0) ってどう?未検証。
0340デフォルトの名無しさん2015/03/07(土) 10:20:58.39ID:3KyZhNX/
そのBASICはたぶん自動ベクトル化コンパイラだったんだよ
0341デフォルトの名無しさん2015/03/07(土) 11:00:11.19ID:qj41oK6s
コンパイラとインタプリタの区別も出来んアホしかいないのか
0342デフォルトの名無しさん2015/03/07(土) 21:57:40.74ID:+PVcswQ0
コンパイラもインタプリタもどう処理されるかは製作者次第(但し規約と規格書依存)。
0343デフォルトの名無しさん2015/03/08(日) 09:44:07.92ID:fPJc3hpF
BASICコンパイラ使わないのか?
0344デフォルトの名無しさん2015/03/08(日) 10:34:31.89ID:8XDi/JEm
その存在を知ったときにはCもアセンブラも使えてたからなぁ・・・。
0345デフォルトの名無しさん2015/03/08(日) 10:49:08.72ID:fPJc3hpF
dB-BASICコンパイラは昔よく使った
0346デフォルトの名無しさん2015/03/09(月) 07:53:39.18ID:NrwX//vi
クイックBASIC
0347デフォルトの名無しさん2015/05/22(金) 21:15:44.48ID:VsqBX1IM
安定の99BASICとDarkBASIC。(キリッ
0348デフォルトの名無しさん2016/01/06(水) 13:27:14.62ID:ucN+MzTI
誰かいますか?
0349デフォルトの名無しさん2016/01/06(水) 14:03:26.94ID:scdkds6z
 
0350デフォルトの名無しさん2016/01/06(水) 15:21:42.32ID:/2nsH7hB
いませんよ
0351デフォルトの名無しさん2016/01/06(水) 20:42:58.97ID:gw5qUYko
だれかいますか?
あけてくれますか?

               |
      /|       |
     / / |       |
   / / .|       |
   |  /  |       |
   |  |  .|       / ̄
   |  |  .|     /
   |  |  .|   /
   |  |0 | /
   |  |   .|/
   |  |  /
   |  | ./
   |/|/ 
  / 
../ 
0352デフォルトの名無しさん2016/01/06(水) 21:00:13.19ID:D+fLh+9w
、____
`\::::::|
 ‖:::::|
ガ‖:∧_∧
チ ‖( ・ω・ )
ャ |o   つ
\‖しーJ
゙゙゙゙゙゙゙゙゙゙゙゙
0353デフォルトの名無しさん2016/02/28(日) 22:45:14.42ID:dibshBZk
質問です。
catコマンドの変形で、\t \nの場合だけ、それを表示するような
プログラムです。
http://lifeloveregret.googlecode.com/svn/trunk/c/answer/LinuxProgramming-samples/cat4.c

argc -= optind;
argv += optind;

上の2つの行と、forループの関係がわかりません。forの中のiは
1からではなく0から始める理由がわかりません。どなたか簡単に
説明してくださりませんか?
0354デフォルトの名無しさん2016/02/29(月) 00:11:38.17ID:m6AX33Gj
0〜argc-1
1〜argc
0355デフォルトの名無しさん2016/02/29(月) 00:13:10.09ID:xccoBVx1
コマンドのオプション解析でオプション引数を取った場合はその値を
取らない場合は特定の値を設定するようにしたいのですが、
どうしたら良いでしょうか?

例えば

(1) hoge -a (-a に対する変数に 1 を設定)
(2) hoge -a 10 (-a に対する変数に指定値、この場合 10 を設定)

のようにしたいのですが、 getopt を使うと "a"(1 のケース) か "a:"(2 のケース)
のどちらかしか設定出来ません。 (1) にも (2) にも同じオプションで対応したいです。
0356デフォルトの名無しさん2016/02/29(月) 00:35:00.19ID:m6AX33Gj
ttp://www.fireproject.jp/feature/c-language/basic-library/getargs.html
/* 値を取る引数に値がなかった場合:を返す. */
0357デフォルトの名無しさん2016/02/29(月) 00:45:31.08ID:/Kpy2WEa
>>355
optstring は受け付けるオプション文字からなる文字列である。
文字のあとにコロン (:) が置かれている場合は、 オプションには引き数が必要であることを示す。
このとき getopt() は、現在注目している argv 要素で、オプション文字に引き続くテキストへのポインターか、
あるいは次の argv 要素のテキストへのポインターを optarg に代入する。
2 個連続してコロンが置かれている場合は、 そのオプションは引き数をとってもとらなくてもよい。
0358デフォルトの名無しさん2016/02/29(月) 01:30:18.41ID:xccoBVx1
355です どうもです
>>356-357
マニュアルの読みが足りませんでした、ありがとうございました。
0359デフォルトの名無しさん2016/02/29(月) 19:28:55.86ID:rGiNUpBI
ファイル操作でランダムアクセスをしまくりたい場合
バッファリングって意味ありますか?
切ったほうが良いですか?
0360デフォルトの名無しさん2016/02/29(月) 20:01:56.43ID:m6AX33Gj
メモリに読み込めるサイズなら オンメモリで
サイズがでかいなら OSさんに任せたほうが
といってみるテスト
0361片山博文MZ ◆T6xkBnTXz7B0 2016/03/01(火) 11:53:41.08ID:mTo6F5rg
アンパンマン、新しい顔ができたよ
https://github.com/katahiromz/TypicalCLibrary
0362デフォルトの名無しさん2016/03/01(火) 12:26:05.28ID:MZ600p44
>>359
先読みとバッファリングはイコールじゃない
普通はバッファリング止める必要ないけど、実際に計って性能が落ちるようなら
やめれないい
0363デフォルトの名無しさん2016/03/01(火) 22:14:15.19ID:GJq7m7DN
質問ですが、xをint型の変数として、
 printf("%+d\n", x);
と
 printf("% d\n", x);
って何が違うの?
0364デフォルトの名無しさん2016/03/02(水) 00:20:06.14ID:Xr3FdDeB
c言語って関数の戻りに処理結果(0 1とか)を返す関数が必要以上に多く感じるんですけど、こういう作法が常識なんですか?

例えば、文字列を一部変えるみたいな処理があるとして、引数に参照で値を渡すと、内部で値を変えて、変えれたかどうかの結果が戻り値みたいな。

戻り値で文字を返してくれた方がスラスラ読めるのにと思ったので。
0365デフォルトの名無しさん2016/03/02(水) 01:02:47.02ID:qVYlxOWh
>>364
エラー通知が必要な場合は仕方ないんじゃね?
ごく稀に、関数の引数でエラーステータスを返す関数も見かける事はあるけど使いにくい。
多分、関数をそのままifの条件に書けるから、特に理由が無い限り、関数の戻りで判断をさせるようにしてるんじゃないかな?
0366デフォルトの名無しさん2016/03/02(水) 06:27:59.81ID:rGQYeS/e
>>363 実験すればたちまち分かることだけど…。

#include <stdio.h>

int main(void)
{
  int val = 42;
  printf("printf() with %%d: %d\n", val);
  printf("printf() with %%+d: %+d\n", val);

  return 0;
}

+フラグをつけると正の値のときに+符号が表示される。
03673662016/03/02(水) 06:39:59.11ID:rGQYeS/e
おっと >>363 は空白フラグの話だったね。
空白フラグは正の値のときに符号の代わりに' '(空白)を表示する。
負の値と正の値とで、数字部分を同じ表示位置にしたいとき使う。

ちなみに+フラグと空白フラグを同時に指定すると
空白フラグが無視され、+フラグだけが有効になるのがANSI規格。

#include <stdio.h>

int main(void)
{
  int val = 42;
  printf("printf() with %%d: %d\n", val);
  printf("printf() with %%+d: %+d\n", val);
  printf("printf() with %% d: % d\n", val);
  printf("printf() with %% +d: % +d\n", val);
  printf("printf() with %%+ d: %+ d\n", val);

  return 0;
}
0368デフォルトの名無しさん2016/03/02(水) 07:37:26.46ID:TE5CDYRj
>>364
文字で返すってどういうこと?'a'とか'b'とか返ってほしいの?
0かそれ以外なら何でも良いケースが多いからそれでもいいよ
Cは式も値を持つし、比較もその値を使って行うから、
if(strcpy(a,b)) {
みたいな書き方ができる
0369デフォルトの名無しさん2016/03/02(水) 07:53:48.31ID:OtsHWMs4
>364
正常終了 : 戻り値=処理データ
異常終了 : 戻り値=NULL エラー内容はグロバル変数ERROR(もしくはエラー結果取得共通関数)で判断
って仕様もあったけど、正常終了の結果がNULLって場合もあるからエラー検査が二度手間になって面倒だった。
0370デフォルトの名無しさん2016/03/02(水) 08:25:19.39ID:Z+9Irg1R
>>364
> 例えば、文字列を一部変えるみたいな処理
変更後の文字列領域を関数内で確保して返すという流儀もあり得るがCだと大抵余計面倒になるだけ
0371デフォルトの名無しさん2016/03/02(水) 08:28:42.27ID:YPa1u3Lv
>>364
20-30年前の"常識"
その後に作られた新しい言語では読みやすさ等を重視して
オブジェクトに格納して必要なときにgetterで取れるとか
失敗を例外スローで返すようにした

そもそもC言語に高級言語並みの読みやすさを求めるのは間違い
0372デフォルトの名無しさん2016/03/02(水) 08:32:37.47ID:diU0WJ5/
>>369
> 異常終了 : 戻り値=NULL
> 正常終了の結果がNULLって場合もあるから
仕様決めた奴が狂ってるとしか思えん
0373デフォルトの名無しさん2016/03/02(水) 09:01:13.29ID:ZcGPkBdQ
>>369
>正常終了の結果がNULL
の具体例を有名どころでよろ
0374デフォルトの名無しさん2016/03/02(水) 09:29:26.25ID:OtsHWMs4
データ読み込みで「アクセス不能はエラーだが読み込みデータ数0はエラーではない。」という仕様の時。
0375デフォルトの名無しさん2016/03/02(水) 10:04:23.67ID:DkuYT6t3
>>374
> 正常終了の結果がNULLって場合もあるから
アナタが言ってたのは0ではなくNULL
0376デフォルトの名無しさん2016/03/02(水) 10:06:32.96ID:OtsHWMs4
一応言っておくけど、そういう仕様の関数があったってだけで俺が作ったわけでもないし、
そういう仕様を推奨してる訳でもないからな。
0377デフォルトの名無しさん2016/03/02(水) 10:11:14.10ID:OtsHWMs4
読み込みデータ量の値を返してるとは言ってないよ。

何を返すかはその関数次第だから限定しないよ。
その関数が読み込んだデーター分メモリ確保し返す仕様かもしれないし。

なんにせよ、376で言ってるように俺がそういう仕様で作ってるわけでもない、俺に文句言われても知らんわ。
0378デフォルトの名無しさん2016/03/02(水) 10:14:40.38ID:Bi9ZhcNY
正常時NULLになるようなのって
返り値が (内部staticな? グローバルで唯一な?)
文字列のポインタでエラーを返すような感じか?
0379デフォルトの名無しさん2016/03/02(水) 10:41:13.00ID:c7vTSeEd
NULLポインタ云々よりエラー内容をグローバル変数や別関数で取得する仕様の方が気になる。
取得前に割り込み入って内容変わったりしないのかと。
0380デフォルトの名無しさん2016/03/02(水) 12:07:30.72ID:YPa1u3Lv
C言語を考案した天才は
数十年経って全く時代にそぐわなってるのに
いまだに第一線で使われることを墓の下で呆れたり嘆いたりしてるよ
0381デフォルトの名無しさん2016/03/02(水) 12:38:51.46ID:iCefEI9s
「私がひそかに満足していることのひとつは,
オープンソースの多くのものが,私が寄与したコードに基づいていることです」

「その仕事に合った道具を選びなさい(中略)
ある仕事のために新しい特殊なツールを作成する方法について考えるべきときもあります」

Dennis M. Ritchie
偉大なるプログラマからのメッセージ|Cマガジン1999年10月号31,32ページ


http://echo.2ch.net/test/read.cgi/tech/1318481715/23 訃報: C 言語の開発者、デニス・リッチー氏が死去
0382デフォルトの名無しさん2016/03/02(水) 14:19:38.97ID:7x0zrPSY
>>379
スレッドローカルなメモリに実体があるならだいたいおk
VCのマルチスレッドランタイムのerrnoとか、
0383デフォルトの名無しさん2016/03/02(水) 14:35:29.22ID:YPa1u3Lv
>>379
現代のコンパイラは
マルチスレッド用とシングルスレッド用にランタイムが分かれていて
プロジェクト設定あたりで適切なものを選べば問題ない

割込みならハンドラ側が環境壊さないようにすべき
0384デフォルトの名無しさん2016/03/02(水) 14:53:51.02ID:Bi9ZhcNY
リエントラントとスレッドセーフ… 頭がイタイ
0385デフォルトの名無しさん2016/03/02(水) 15:54:05.47ID:UChdnPQl
Cだから使いにくいとか言いたいのなら
使わなきゃいいだけでしょ
0386デフォルトの名無しさん2016/03/02(水) 16:45:40.85ID:YPa1u3Lv
C言語は基本だから初心者は最初におぼえるべき
とかいまだにぬかす老害が早く滅びますように
0387デフォルトの名無しさん2016/03/02(水) 16:54:00.35ID:VauVagFG
Cはコンパクトだからすぐに覚えられるので最初に覚える言語としては有りだと思うがね
別に、Cの達人になれと言っているわけじゃなくて、さわりだけ覚えとけって話でしょ
大体の言語はC風の文法だし、基礎としては良いんじゃね
0388デフォルトの名無しさん2016/03/02(水) 17:54:50.76ID:iKlMBL5g
質問です
あるファイルの
タブ文字を"\t" 改行を"$"
で表現するプログラムを写経しました。

ところが改行は上手く表現できるのですが、タブは上手く表現
できません。どこがおかしいのでしょうか?よろしくお願いします。

http://ideone.com/nhIQKN
コンパイルエラーが上のサイトでは出ていますが、自分の環境では
上手くコンパイルできています。
0389デフォルトの名無しさん2016/03/02(水) 18:05:01.85ID:UChdnPQl
TABコードがないファイルを使ってるとか
0390片山博文MZ ◆T6xkBnTXz7B0 2016/03/02(水) 18:09:54.78ID:v5tMoIR7
>>388
getopt、optindを使うための宣言が足りない
0391片山博文MZ ◆T6xkBnTXz7B0 2016/03/02(水) 18:33:46.36ID:v5tMoIR7
オンラインコンパイラは外部ライブラリを使えないだろう
0392デフォルトの名無しさん2016/03/02(水) 18:39:52.79ID:U8gNKAYq
getoptのどこが外部ライブラリなんだか
FreeBSD10もCentOS7もunistd.hをincludeすれば使える
ideoneがタコなだけだ
http://ideone.com/ocUb58
0393デフォルトの名無しさん2016/03/02(水) 18:44:09.16ID:U8gNKAYq
あと、プログラムは正常に動くよ
>>389の指摘どおりだと思う
03943882016/03/02(水) 21:24:47.01ID:iKlMBL5g
>>393
みなさん、ありがとうごいました。
プログラムは正常なのですね。

TABコードってVimのインサートモードでTABキー押せば
それはTABコードが入力されてることにならないのでしょうか?
0395デフォルトの名無しさん2016/03/02(水) 21:36:53.88ID:U8gNKAYq
>>394
設定しだいじゃね?
od -c で確認してみな
0396デフォルトの名無しさん2016/03/02(水) 21:48:01.36ID:TOqHeSTn
冷静に考えてポインタリストの用途が全く分からないんですが
メリットってあるんでしょうか?
配列ならインデックスからも一発だし
キャッシュ値一回求めるだけでインデックスも求まりますよね
何故一からたどっていかなければいけないポインタリストが重宝されているのでしょうか?
0397デフォルトの名無しさん2016/03/02(水) 21:49:25.03ID:TOqHeSTn
C言語のポインタ自体は参照渡しなので非常に便利ですが
ポインタを利用したリスト構造だけは何のメリットがあるのか
全く分からない…
0398デフォルトの名無しさん2016/03/02(水) 21:57:17.40ID:xQdRf4qH
パディングを一つもコンパイラーによって入れられない構造体の作成はシステムのアライメントの制約によってシステムに依存するので、バイト配列にメンバーをひとつづつコピーして行く方法が安全ですね。
0399デフォルトの名無しさん2016/03/02(水) 22:32:15.95ID:U8gNKAYq
>>396
位置が特定できるなら挿入削除(延長も)が一定コスト
0400デフォルトの名無しさん2016/03/02(水) 22:35:18.56ID:TE5CDYRj
>>396
サイズが自由
0401デフォルトの名無しさん2016/03/02(水) 22:35:43.03ID:TE5CDYRj
自由というかサイズ変更が容易
0402デフォルトの名無しさん2016/03/02(水) 22:36:15.97ID:TOqHeSTn
>>399
いや例えば10万番目にあるデータは1から辿らないとダメなんじゃないですか?
そんな事現実的ですかね?少なくともデータベースではリスト構造なんて使われて
ないでしょう?リスト構造はポインタのトリッキーな使い方の一例だと自分的には
解釈してるんですが間違いでしょうか
0403デフォルトの名無しさん2016/03/02(水) 22:38:56.58ID:D52dJXQ8
>>402
要件次第
10万件必要なら違うデータ構造を使うよそりゃ
0404デフォルトの名無しさん2016/03/02(水) 22:40:55.72ID:VauVagFG
>>396
全くその通りだよ
ポインタを使って頑張って線形リストにしても、バグを混入する危険性が増えるだけでメリット無いよ
しかもランダムアクセスが出来ないから、使用出来るアルゴリズムも限られてくるし、良いことなし

極一部の人が挿入などが定数時間で終わることをメリットにあげることが有るけど
今のCPUはメインメモリに対して25GB/sとかの凄まじい帯域が有るから
配列の要素をずらすのにmemmoveしたり、再確保時のmemcpyしたりは何ら問題ない
0405デフォルトの名無しさん2016/03/02(水) 22:41:29.31ID:xQdRf4qH
C++のvectorなんかはCのreallocと違って領域を拡張できるときは拡張するんじゃなくて、容量が満杯になると常に新しい場所にメモリーを1から作り出して要素を全部コピーするんだよ。
0406デフォルトの名無しさん2016/03/02(水) 22:43:12.78ID:VauVagFG
>403
10万件あるならリスト使わずに他のデータ構造を使う・・・なるほど
でもね、逆に、10万程度なら配列で何の問題ないわけだよね
10万以上ではリストとは別のデータ構造使って
10万未満では配列で十分だとしたら
リストの出番は?
0407デフォルトの名無しさん2016/03/02(水) 22:44:45.29ID:qVYlxOWh
>>402
間違いないよ
リストなんて使わなくていいよ
0408デフォルトの名無しさん2016/03/02(水) 22:52:17.09ID:VauVagFG
計算してみよう
仮に10万個のポインタを突っ込んだ配列を作成すると、サイズは約400KB弱
これのmemmoveに一体どれぐらいの時間がかかるというのだろうね
今のコンピュータは余裕でハイビジョンの動画をリアルタイムで再生できるというのにね

配列を使えばランダムアクセスが出来るからアルゴリズムの幅も広がるし
プログラムもシンプルになるので色々楽だよね

プログラムというのは大体は書き換えよりも読み込みの頻度の方が高いから
挿入時のコストの心配はしなくても大丈夫じゃないんですかね
0409デフォルトの名無しさん2016/03/02(水) 23:02:02.75ID:TOqHeSTn
>>404
配列の要素ずらすって単にずれ値変数用意すればいいだけでは?
0410デフォルトの名無しさん2016/03/02(水) 23:02:47.68ID:xQdRf4qH
10万個の配列に10万回挿入するときとかには使うだろ
0411デフォルトの名無しさん2016/03/02(水) 23:05:27.60ID:D52dJXQ8
>>406
こんぴーたのリソースが貴重だったときの考え方だから、こんなデータ構造もあるって知っとくだけで良いと思うよ
0412デフォルトの名無しさん2016/03/02(水) 23:13:26.86ID:XkCEJmpk
>>406
どっちかというと件数そのものより、「10万番目」にアクセスするという要件がランダムアクセスを
前提にしているものだから。
これが「内容がXのものを見つける」なら両者の差は少なくなるし、さらに「見つかったらその位置に
新しい要素を挿入するする」ならリストの方が有利になる。
0413デフォルトの名無しさん2016/03/02(水) 23:13:38.43ID:VauVagFG
>>409
配列に要素を挿入するためには、それ以降を後ろにずらさないといけないだろ
だからmemmoveするわけだけど、どうせ一瞬で終わるから気にしなくてよいよねって話

余程の特殊な状況じゃない限り配列を使っとけばよいよ
特殊な状況というのがどういうのかと言われても困るわけだが
典型的な教科書通りの線形リストの出番はほぼ無いと思っていてよいんじゃないかな
0414デフォルトの名無しさん2016/03/02(水) 23:18:27.67ID:TOqHeSTn
>>413
今まで配列ずらすのは時間がかかるとおもって
新しい配列用意してたんですが無駄でしたか
0415デフォルトの名無しさん2016/03/02(水) 23:24:10.68ID:xQdRf4qH
初めの一文字をずらせば10万回のループがある。 これはリストで最後の要素を読むのと同じくらいかかると言うこと。
0416デフォルトの名無しさん2016/03/02(水) 23:29:11.88ID:VauVagFG
ところがCPUはキャッシュが有るので
メモリ上のあちこちに点在したリンクリストをたどっていくより
連続メモリでキャッシュに乗っている配列をmemmoveでずらす方が早いのでした
0417デフォルトの名無しさん2016/03/02(水) 23:31:50.07ID:VauVagFG
ちなみにmemmoveやmemcpyはSSEなどを使って限界までカリカリにチューニングしてある
0418デフォルトの名無しさん2016/03/03(木) 07:22:21.53ID:94sJe93w
もうちっとで
そもそもC言語なんて覚える必要あったのだろうか?
というところにたどり着ける
頑張れ
0419デフォルトの名無しさん2016/03/03(木) 07:53:13.94ID:AmuwmWIj
知識を得ることは無駄じゃないよ。




ニュースで自分に関係ない内容流す、見るのは無駄か?
トリビアの泉で一生使わないネタを見るのは無駄だったのか?
0420デフォルトの名無しさん2016/03/03(木) 07:56:29.34ID:GEvX7rOJ
>>418
そのさらに後に、やはり知ってて良かったと思いにたどり着く
0421デフォルトの名無しさん2016/03/03(木) 08:02:11.86ID:JQNyTLCY
.cファイルに定義されてる関数のプロトタイプ宣言の書かれているヘッダーファイルをを.cファイルにインクルードしていることってあるじゃないですか? その場合、暗黙的にしても明示的にしてもexternによって、その定義の書かれたトランスレーションユニットに対して
外部に定義があると言っているようなもので間違ってますよね。
0422デフォルトの名無しさん2016/03/03(木) 08:17:12.46ID:JufYzE1v
>>421
別に。
0423デフォルトの名無しさん2016/03/03(木) 08:41:33.10ID:6AJzUe4c
>>421 下のようなファイル構成を考えてみる。

file: sub.h
extern int subfunc(int arg);

file: sub.c
#include "sub.h"

void user(int arg)
{
 printf("subfunc() returned %d\n", subfunc(arg));
}

int subfunc(int arg)
{
 return arg;
}


subfunc() の定義部分より前に subfunc() を呼ぶ関数があるから、
user()の前か、user()の内側にプロトタイプ宣言が必要。

extern int subfunc(int arg); と書く代わりに、
その部分を sub.h に書いて #include してると考えれば
別におかしいことはない。

…というか、こう書けないと不便だよね。
ヘッダファイルのプロトタイプ宣言と、関数定義との一致を確実にするために、
関数定義してるソースでも外部宣言のヘッダを#includeするのが普通だろう。
0424デフォルトの名無しさん2016/03/03(木) 08:43:34.44ID:+JeDUCvS
>>421
昔のソースのヘッダーでexternを#ifdefで切り替えてるの見た事あるわ C89以前の流儀

extern int c;
int c;
は矛盾しなくなってる

複数の宣言が出現した場合の解釈は規格書に事細かに書かれてる
0425デフォルトの名無しさん2016/03/03(木) 10:07:40.82ID:AmuwmWIj
extern ってコンパイル時の名前(変数名、関数名、ラベル等)の付け方を指定するって認識であってる?

C++のコンパイル後のバイナリー見たら関数名に任意の番号付いた文字列が並んでたから
「ああ、.cppファイル毎に同じ名前の関数が使えるのはこういうふうに名前いじってるからで、
externつけるといじらない(アンダーバーは付けるけど)から各cppから呼び出せるのか」
って考えたんだけど。
0426デフォルトの名無しさん2016/03/03(木) 10:27:54.16ID:ITJHme3g
グローバル変数を使い回しですか?
0427デフォルトの名無しさん2016/03/03(木) 10:31:40.80ID:JufYzE1v
>>425
あってない
0428デフォルトの名無しさん2016/03/03(木) 10:43:57.77ID:ITJHme3g
C++はグローバル変数のあつかいがゆるめになってたような
それと勘違いしてる?
0429デフォルトの名無しさん2016/03/03(木) 10:57:00.20ID:EkQOBIMu
スコープ制御(何処まで見えるか?)はするけど
バイナリー上でどう表現するか?までは規定してない
0430デフォルトの名無しさん2016/03/03(木) 13:33:56.07ID:lbf025Ye
浮動小数点ってのが良くわからないです。

1.234
も
123.4×10^(-2)も

小数点の位置に関わらず左から8番目?(適当)までの数値は信頼
できますよね?

調べたら凄い説明があったんですけど
そんなに深い分野なんですか?
0431デフォルトの名無しさん2016/03/03(木) 14:14:05.72ID:VGVPmQmt
Cというより2進数の問題です。
1πを10進数の小数で表すとき、何桁まで信用できますか?
0432デフォルトの名無しさん2016/03/03(木) 18:28:56.93ID:fYhl3Eak
QZ怒りの守備範囲拡大
0433デフォルトの名無しさん2016/03/03(木) 19:00:07.27ID:94sJe93w
>>430
深くはないけど何も知らずに使うと信じられないような罠を踏むので
一切使わないくらいの方がいい
0434デフォルトの名無しさん2016/03/03(木) 21:53:28.41ID:1PM7WcBh
とりあえず切り上げ処理しまくれ
0435デフォルトの名無しさん2016/03/04(金) 01:18:26.87ID:65DoB2uJ
丸めはJIS丸めでおk
そんなことよりも極めて似た2数の差による桁落ち
が恐ろしい(符号付の和でも起きる
0436デフォルトの名無しさん2016/03/04(金) 07:59:48.20ID:zWNcVE50
strcpyとかって戻り値にもコピー先のアドレス返してますがどういった用途で使うものなのでしょう

char *strcpy(char *s1, const char *s2);

結果的に戻り値とs1が同じになるので用途がわからないです
0437デフォルトの名無しさん2016/03/04(金) 08:40:21.47ID:/J2AWB0A
たぶん昔はそれが便利だと思う人がいたんだろう
一行にまとめてゴチャゴチャと詰め込む書き方が好きな一部のプログラマ

現代的な作法ではほとんど使われない
0438デフォルトの名無しさん2016/03/04(金) 08:51:41.68ID:pEnisYEU
>>436
他のstr〜関数の引数に使う
0439デフォルトの名無しさん2016/03/04(金) 08:51:50.20ID:BsWMug3P
char s[100], char t[100];

 strcpy(t, strcat(strcpy(s, "friend"), "ship"));
 /* s[] と t[] とに "friendship" が格納される */

ライブラリ設計者が、こんな感じに使えると便利だと考えたのだろう。
もちろん >>437 の通り、この書き方は読みやすくないけど。

似た形式の文字列操作関数が、統一して同じ返り値を返す仕様の方が
全体としてライブラリの使い勝手が良くなる。
「この関数の場合の返り値はどうだっけ?」が減るからね。
となると、返り値としては、第1引数をそのまま返すのが順当。


個人的には「格納された文字列終端の'\0'へのポインタを返す」って
仕様もアリだったかな、と思ったり。
0440デフォルトの名無しさん2016/03/04(金) 09:06:03.94ID:TYlQwhRh
strcopyを代入演算子=に置き換えてみればわかるだろ
04414362016/03/04(金) 10:06:21.85ID:zWNcVE50
ありがとうございます
スッキリしました
0442デフォルトの名無しさん2016/03/04(金) 15:43:12.45ID:BsWMug3P
>>440
ここか。
文脈に乗った状態で見るとちゃんと意味の分かる投稿だったね。
0443デフォルトの名無しさん2016/03/05(土) 00:16:48.17ID:s8oatnuB
strcpy(strcpy(strcpy(strcpy(a, b), c,), d), e), f);

すべてがfになる!

ていうかa=f
0444デフォルトの名無しさん2016/03/05(土) 00:30:10.75ID:dMmkuYpx
aしかfになんねーじゃねーか
0445デフォルトの名無しさん2016/03/05(土) 00:31:13.57ID:Nu5W2p/6
>>443
ちょっと語弊が無いか?

aの内容「のみ」fと同じになるんじゃ…
0446デフォルトの名無しさん2016/03/05(土) 10:05:55.48ID:jMWeenKu
>>443
> strcpy(strcpy(strcpy(strcpy(a, b),

c,),

d), e), f);

コンパイルエラーだろ
0447デフォルトの名無しさん2016/03/05(土) 19:05:38.01ID:we7bVWIM
C言語で1000行くらいあるコードをプリントアウトしたいんですが
いいアイデアありますか?というのも紙の上でコードを解読したいんですが
そのまま印刷したら20枚以上になって管理が大変だなと…
おかしな質問だと思いますが紙の上でコードを見たい場合の何かいい方法というか
ありますか?PCで見たらいいジャン以外の解答お願いsます。
0448デフォルトの名無しさん2016/03/05(土) 19:06:27.21ID:we7bVWIM
効果的な印刷方法みたいなのがあれば…
0449デフォルトの名無しさん2016/03/05(土) 19:06:59.55ID:AFManh/H
関数ごとに分けてプリントするのが定番じゃない?
0450デフォルトの名無しさん2016/03/05(土) 19:09:14.46ID:e8RWR+IR
https://www.ricoh.co.jp/pps/products/continuous/
こう言うプリンタを買う
0451デフォルトの名無しさん2016/03/05(土) 19:38:02.28ID:TtOs9IsN
求めているのは印刷スピードじゃないだろう
0452デフォルトの名無しさん2016/03/05(土) 19:49:09.91ID:AycCigCB
PCが嫌ならタブレット端末で見る。いや、ネタでなく。

紙に印刷した状態でソースファイルを見たい(画面ではダメ)、
ということの理由が分からないと的確なアドバイスをしにくいのよ。

せいぜい「袋とじ印刷」とかで枚数を半分にできるよ、程度。
0453デフォルトの名無しさん2016/03/05(土) 19:59:16.68ID:W0S52lG4
タグジャンプも無い環境で1000行もあるコードを読む気にならん
0454デフォルトの名無しさん2016/03/05(土) 20:04:24.57ID:e8RWR+IR
>>451
よく見たまえ。
それらのプリンターは連続用紙に出力出来るのだ。
バラけない。つながっている。これ超重要。
0455デフォルトの名無しさん2016/03/06(日) 10:48:15.27ID:jhZLS0bI
>>452
寝転がって赤鉛筆で線をひきたい
むかしのひとはそうしてた
0456デフォルトの名無しさん2016/03/06(日) 10:53:29.38ID:KcqVY3vA
下記のような、配列が戻り値な関数に対して、直接[x]で配列要素指定する書き方って
可能ですか?

・プログラム
char* hoge(void)
{
c[3] = {‘a’, ‘b’, ‘c’};
return c;
}

int main()
{
printf(“c=%c%c%c¥n”, hoge()[0], hoge()[1], hoge[2]);
}

・期待する出力
c=abc
0457デフォルトの名無しさん2016/03/06(日) 10:54:01.50ID:KcqVY3vA
まちがいました

char* hoge(void)
{
c[3] = {‘a’, ‘b’, ‘c’};
return c;
}

int main()
{
printf(“c=%c%c%c¥n”, hoge()[0], hoge()[1], hoge()[2]);
}

・期待する出力
c=abc
0458デフォルトの名無しさん2016/03/06(日) 11:02:34.19ID:XOL8ZJCs
引数に配列の添字付ければ良いのでは
0459デフォルトの名無しさん2016/03/06(日) 11:16:30.07ID:8wRYX6K4
そのまま可能
スコープ気をつけてな
0460デフォルトの名無しさん2016/03/06(日) 11:27:07.14ID:E+dKwvyv
ローカル変数のアドレス渡してるけどいいの?
0461デフォルトの名無しさん2016/03/06(日) 11:28:01.59ID:E+dKwvyv
まあ、スタックが壊されないから動くとは思うけど
0462デフォルトの名無しさん2016/03/06(日) 11:52:07.79ID:Cas8cP9a
>>458が一番素直な方法だと思う

他にはstatic char c[3]で残しておくとか
構造体で包んでコピーしてもらうとか
0463デフォルトの名無しさん2016/03/06(日) 12:03:37.09ID:covgZswb
「スコープ気をつけて」の一言で理解できるならこんなこと聞かない
>>456
構文レベルでは可能
ただし、使い方によっては見えない罠を踏むので
なるべく避けるのをオススメ
他人が書いたソースでこういうことしてたら「大丈夫か?」と疑うくらいでいい

関数に対する値の受け渡しを隅々まで理解してからまた考えるべき
0464デフォルトの名無しさん2016/03/06(日) 12:38:09.56ID:ChxbUFgQ
>>456,457ともにcが未定義なんだが
0465デフォルトの名無しさん2016/03/06(日) 12:46:29.22ID:srxyPbvO
可能かどうかだけ答えるの?
いやハッキリ良くない方法だって伝えようよ
0466デフォルトの名無しさん2016/03/06(日) 13:31:38.96ID:FS9V5eXL
みんな 464の指摘を読んであげて
0467デフォルトの名無しさん2016/03/06(日) 13:43:37.89ID:XOL8ZJCs
定義なんて省略してるだけだろうに
0468デフォルトの名無しさん2016/03/06(日) 13:48:25.44ID:E+dKwvyv
ちょっと関連する話だけど、
const char* string = "test"; は文字列リテラルで、静的記憶域期間になるじゃん。
char string[] = "test"; ってやるとstring配列に文字が入るだけで、stringは書き換えられる。
このときの"test"の部分で、stringとは別に文字列リテラルの領域って確保されるの?
string[]の領域が確保されるだけ?
規格の文字列リテラルのところ見てもはっきり書いてなくて良く分からないんだよね。
0469デフォルトの名無しさん2016/03/06(日) 13:48:31.46ID:KcqVY3vA
みなさん、ご回答ありがとうございます。
hoge()内のcはご推察のとおり char c[3]=…が正しいです。

一応構文的にはありですか。
実はそういう書き方がされているソースを某所でちらっと見かけて、
できるんだっけと思ったのが発端です。

普通に考えれば、>>458さんだと思うのですが(自分もたぶんそうします)
hoge()[x]で要素指定するような書き方を見たことなかったもので。。

ありがとうございました。
0470デフォルトの名無しさん2016/03/06(日) 13:48:40.34ID:c4OrExdm
>>456-457
コンパイル通るようにちょっと書き換えて実行してみた。
ちゃんと動作したよ。

#include <stdio.h>
char* hoge(void)
{
char c[3] = {'a','b','c'};
return c;
}

int main()
{
printf("c=%c%c%c\n",hoge()[0],hoge()[1],hoge()[2]);
}

>>465
難読化できるいい技術だと思うよ。
こういう書き方する人あまりいないから、解読されにくい利点が。
0471デフォルトの名無しさん2016/03/06(日) 13:50:22.55ID:c4OrExdm
>>469
まず、自分でコンパイルしてから書き込もうよ。
他人にコンパイルさせるほど君は偉いのかよ。
0472デフォルトの名無しさん2016/03/06(日) 13:56:25.70ID:KcqVY3vA
>>471
すみません、出先からスマホなもので…

>>470
コンパイルしての検証ありがとうございます。
やはりその書き方でも動作はするのですね!
わざわざどうもありがとうございます。
0473デフォルトの名無しさん2016/03/06(日) 13:57:01.32ID:9mzH85Ox
>>468
文字列定数は、文字列の先頭のアドレスを持つポインタ。
ポインタ値を保存しておけば使い回せる。
0474デフォルトの名無しさん2016/03/06(日) 14:00:31.63ID:ChxbUFgQ
いや、だめに決まってんだろ

ローカル変数cはスコープが外れた(この場合は関数が終了)したときに寿命が尽きる
hogeからリターンした後にcを使ってはいけない
0475デフォルトの名無しさん2016/03/06(日) 14:04:08.14ID:ChxbUFgQ
>>468
規格上は決まっていない
コンパイラは一文字づつ整数リテラルで代入して行くコードを生成しても良い
0476デフォルトの名無しさん2016/03/06(日) 14:04:33.30ID:8wRYX6K4
>>468
処理系によるんじゃないかなあ
アセンブルで出して見てみるといいかも
gccで試したら確保されてなかったね
0477デフォルトの名無しさん2016/03/06(日) 14:05:39.10ID:E+dKwvyv
>>476
だよね。
何も書いてないから未定義なんかなぁ
0478デフォルトの名無しさん2016/03/06(日) 14:07:25.98ID:FS9V5eXL
配列宣言とその初期化を同時にやっているだけだから、
その変数がどの場所に確保されるかとは別の話じゃないの?
0479デフォルトの名無しさん2016/03/06(日) 14:12:00.03ID:6nX+hqbc
>>474
それが気になるなら、static charで宣言すればいいだけだろ。
0480デフォルトの名無しさん2016/03/06(日) 14:16:36.69ID:OtPRM7G0
457の元ネタはどこなんだろ
素朴な疑問
0481デフォルトの名無しさん2016/03/06(日) 14:16:49.46ID:FS9V5eXL
こういう事例でstatic宣言使うのは一寸気持ち悪いです。
まだグローバル変数を使う方がマシだと思う。
望ましいのはその値を使うであろう呼び出し側で用意するやり方。
0482デフォルトの名無しさん2016/03/06(日) 14:20:54.01ID:ChxbUFgQ
>>479
「気になる」じゃなくて、気にしなきゃいけないんだよ

こう言うコード納品してきた外注には次の発注は無いぞ
教育がまるっきり出来てない証拠だからな
0483デフォルトの名無しさん2016/03/06(日) 14:22:43.62ID:ChxbUFgQ
>>481
strerrorとか知らないのか?
0484デフォルトの名無しさん2016/03/06(日) 14:23:39.28ID:XOL8ZJCs
質問の本質と違うことに何こだわってんだ
0485デフォルトの名無しさん2016/03/06(日) 14:24:54.52ID:FS9V5eXL
複数関数で呼び出して、それぞれの関数内で書き換えをしたらどうなりますか?
0486デフォルトの名無しさん2016/03/06(日) 14:41:02.46ID:tTnKJmeM
>>479
>>481
>>482
http://www.c-lang.org/static.html

staticはこの場合不正解っぽいけど、そういう意味では>>481さんが正しい?
0487デフォルトの名無しさん2016/03/06(日) 14:46:16.29ID:E+dKwvyv
不正解の意味が良く分からないけど、
static変数をローカルにするかグローバルにするかという話なら、
圧倒的にローカル変数だよ。
無駄にスコープ広げるのバグの温床。
まず、ローカルにして不都合があるならグローバルにする。
0488デフォルトの名無しさん2016/03/06(日) 15:00:57.34ID:tTnKJmeM
そのリンクに関数内でstatic宣言しても他の関数からは利用できないとあったので
どうなのかなとおもって
0489デフォルトの名無しさん2016/03/06(日) 15:05:33.60ID:uNrtakxt
そりゃ関数外から参照出来ない(コンパイルエラーになる)って話だな
0490デフォルトの名無しさん2016/03/06(日) 15:07:08.29ID:tTnKJmeM
あ、そういうことかw
戻り値としてアドレスをもらってれば別に使えるってわけね
難しく考えすぎてた
0491デフォルトの名無しさん2016/03/06(日) 15:07:37.95ID:ChxbUFgQ
>>488
Cのオブジェクト(変数)は寿命が決められてて、その寿命が尽きた後はアクセスしてはいけない
関数内でstatic無しに定義されたオブジェクトは関数から抜けたときに寿命が尽きる
従って、static無しに定義した変数のアドレスを返す事は、大抵の場合バグ
0492デフォルトの名無しさん2016/03/06(日) 15:08:32.37ID:r0r1JwnR
char *unique_array3(void)
{
static char ary[] = {'a', 'b', 'c'};

 return ary;
}

・この関数unique_array3()を使わない限り決してアクセスできず
・プログラム全体で必ず一意
という特性が得られるから、関数内static宣言は悪くないと思うよ。

でも俺は気が弱いので、
読み出し用に const char * を返す関数
変更用にインデクスと変更値を渡す関数
の2本立てにすることが多い。
結局、関数外ファイルスコープのstaticで配列を作ることになる。
0493デフォルトの名無しさん2016/03/06(日) 15:52:04.24ID:PLwZCCub
struct foo {
 char c[3];
};

struct foo hoge()
{
 struct foo ret = { { 'a', 'b', 'c' } };

}
0494デフォルトの名無しさん2016/03/06(日) 15:52:56.42ID:PLwZCCub
あばばば 途中送信しちまった
struct で包んで structごと値戻し
0495デフォルトの名無しさん2016/03/06(日) 16:04:19.36ID:E+dKwvyv
C99から複合リテラルでかける。
#include <stdio.h>

typedef struct SBase {
char data[3];
} SBase;

SBase Get(void) {
return (SBase){ 'a', 'b', 'c' };
}

int main(void) {
SBase base = Get();
printf("%c %c %c\n", base.data[0], base.data[1], base.data[2]);
}
0496デフォルトの名無しさん2016/03/06(日) 16:09:47.86ID:VjAgo9Ed
>>483
過去の遺物
0497デフォルトの名無しさん2016/03/06(日) 16:11:31.08ID:ChxbUFgQ
>>495
ダメだよ。お前のところ発注停止。
0498デフォルトの名無しさん2016/03/06(日) 16:12:51.33ID:E+dKwvyv
>>497
なんで?
0499デフォルトの名無しさん2016/03/06(日) 16:12:52.41ID:tTnKJmeM
>>497
ダメだというのなら、その理由も書いた方がいいと思う
0500デフォルトの名無しさん2016/03/06(日) 16:15:05.27ID:FS9V5eXL
構造体の実体はどこにあるの?
0501デフォルトの名無しさん2016/03/06(日) 16:17:29.06ID:E+dKwvyv
return (SBase){ 'a', 'b', 'c' }; が実態だよ。
まあ{}もうひとつつけて
return (SBase){ {'a', 'b', 'c'} } としたほうが理解しやすいかもだけど。
C99から導入された複合リテラルで構造体と配列のリテラルをかける。
だからreturnで構造体のリテラルがコピーで渡される。
0502デフォルトの名無しさん2016/03/06(日) 16:17:48.46ID:r0r1JwnR
>>496
>>483 に対して「過去の遺物」というのは、
現在では strerror() を使わないってことかしら。

もしそうなら errno の値を文字列表現に直すのに、今風にはどうやるの?
0503デフォルトの名無しさん2016/03/06(日) 16:30:36.62ID:ChxbUFgQ
>>498-499
サプオブジェクトの{}が省略出来るのは知らなかったわ
なんとエラーにならない どう言うルールで初期化されていくんだろう
規格書見てみるか
0504デフォルトの名無しさん2016/03/06(日) 16:31:40.91ID:PLwZCCub
malloc されたポインタ返し
使わなくなったら free してねと紳士協定
0505デフォルトの名無しさん2016/03/06(日) 16:33:02.92ID:OtPRM7G0
関係ないかもしれないけど
errnoはスレッドセーフ化してるのもありまっせ
0506デフォルトの名無しさん2016/03/06(日) 16:41:28.41ID:VjAgo9Ed
>>502
strerror_r( )
0507デフォルトの名無しさん2016/03/06(日) 16:44:26.18ID:VjAgo9Ed
>>505
マルチスレッドをサポートしてて errno がスレッド毎に独立してない環境なんてあるのか?
05085022016/03/06(日) 17:03:55.23ID:r0r1JwnR
>>506
strerror_r() は「自前で文字列バッファを用意しとけ」関数だね。
説明を読むと strerror() の返り値が指す内容は変化してもいいのだから、
文字列コピーの形で入手する方が安全確実か。

この手の関数は適切なバッファサイズを決めるのに迷うので敬遠しがち。
規格で STRERROR_MAX みたいな値が定義されてると使いやすいんだけど。
0509デフォルトの名無しさん2016/03/06(日) 19:03:40.73ID:OtPRM7G0
>>507
errno(参照)ってスレッドとかない時代のもんですよ
0510デフォルトの名無しさん2016/03/06(日) 19:28:46.19ID:VjAgo9Ed
スレッドがない時代に作られたもんだけど、スレッドサポートするからと言ってこう言う基礎的なところの変更なんて容易くはできないんだが...
0511デフォルトの名無しさん2016/03/06(日) 21:02:20.66ID:XbdPepQX
Unix系はerrno使えんかったから困るから、普通にスレッド毎に用意されてるだろ?
そうじゃないプラットフォームもあるのかな?
0512デフォルトの名無しさん2016/03/06(日) 21:18:41.24ID:OtPRM7G0
スレッドセーフとか騒いでたのはいつごろだった?
0513デフォルトの名無しさん2016/03/06(日) 21:33:36.49ID:Plc89Ewo
バイナリなら全部印刷したくなることはあるが
ソースコードというのはないなあ…
0514デフォルトの名無しさん2016/03/06(日) 21:36:28.51ID:Plc89Ewo
>>509 >>510
>>383
0515デフォルトの名無しさん2016/03/07(月) 16:05:11.80ID:4mLJRURf
関数の戻り値なしで途中で抜ける場合ってどうするんですか。

他の言語なら return で抜けると思うんですが。

void foo(void) {
if (1) {
}
0516デフォルトの名無しさん2016/03/07(月) 16:09:57.55ID:bsch7N8T
void宣言しているなら、その場所で return; でいいんじゃない?
0517デフォルトの名無しさん2016/03/07(月) 16:10:11.06ID:UrYl+g+P
return; でいいよ
もしかして returnに () が必須だと思ってる?
0518デフォルトの名無しさん2016/03/07(月) 17:02:06.21ID:4mLJRURf
あれ?、return したらエラーになったと思ってた。そのまま return できるんですね。
ありがとうございます。
0519デフォルトの名無しさん2016/03/07(月) 19:17:45.95ID:LVGGCees
俺の経験だと「returnを書いたらエラー出たよ」は retrun とタイポ。
キーワードに色をつけてくれるエディタを使ってるのに間違える。
0520デフォルトの名無しさん2016/03/07(月) 21:33:28.72ID:ITU3NQEE
エラーメッセージ読めよ
0521デフォルトの名無しさん2016/03/07(月) 22:28:41.79ID:/GlzC9GE
全くだ
文盲かよ
0522デフォルトの名無しさん2016/03/08(火) 08:53:03.00ID:s5rIDaCh
さすがに文盲の人が文字情報主体の掲示板に投稿するとは思えないが、
なんらかの深い寓意があるのだろう。

エラーメッセージを読んで意味を考えてみるのは基本だわな。
まるっきり見当違いの指摘がされてることもあるけど、それはそれとして。
0523デフォルトの名無しさん2016/03/08(火) 09:31:14.35ID:O7LDACGr
タイポで長時間悩む人は昔からいますよ
まわりも流石にそれで悩んでると思っていないし
0524デフォルトの名無しさん2016/03/08(火) 09:40:25.35ID:XWLmUzV3
単語のtypoならすぐ分かるけど、カッコなんかだと探すのめんどうなんだよな
0525デフォルトの名無しさん2016/03/08(火) 13:49:24.25ID:SiXffVUR
まさかそんなわけないっしょーHAHAHA

というのに噛みつかれた時は生命すら危うい
0526デフォルトの名無しさん2016/03/08(火) 13:57:48.82ID:OcbuJ3vj
エラー発生した行を途中改行して見えてくることも稀にある

けど統合環境のエディタの支援で大体解決しちゃってるしなぁ…
0527デフォルトの名無しさん2016/03/09(水) 01:00:49.23ID:K3h75xfw
すまんねw 直感的に数か所書き直したんだと思う。return;したかったとこはelseにして
その後で、確認せずに「 ところでさっきのって return; で返せるんだっけ?」と気軽に書き込んでしまった。
プログラマではないしC言語さわって数日ですしIDEとか高級なもん使ってないし
確認しなかったことは私の落ち度ですお許し下さい。

ところで、外部ライブラリは
./cofigure
make
make install
すればいいんですか?
0528デフォルトの名無しさん2016/03/09(水) 06:41:25.94ID:duKMqVsE
>>515
void は returnを省略出来るだけで、本来は、return で関数から抜ける。

途中で戻るのが嫌なら、gotoで、末尾まで飛べば良い。
0529デフォルトの名無しさん2016/03/09(水) 07:01:08.83ID:MwWsmmvs
>>527
その方式はLinuxとかのUNIX風の環境だね。
「ものによる」としか言いようがない。
configure スクリプトのあるディレクトリに INSTALL や INSTALL.configure て
名前のテキストファイルにインストール方法が書かれてるのが普通だけど…。
0530デフォルトの名無しさん2016/03/09(水) 07:17:17.49ID:9Q4Jrqff
大学のC言語の課題で設けられる期間がいつも2週間前後なんだけど
これって長いと思います?この2週間にどういう意味があるかわからない
勿論得意な人なら1日で終わると思うんですが甘いと思いますか?
0531デフォルトの名無しさん2016/03/09(水) 07:35:39.42ID:ErbGwW1B
>>530
長いかどうかは内容によるんじゃね
まあ大学のプログラム実習なんてそんなもんじゃないのかな
0532デフォルトの名無しさん2016/03/09(水) 07:39:01.35ID:9Q4Jrqff
>>531
それが会社となるととてもじゃないけど遅いレベルですか?
0533デフォルトの名無しさん2016/03/09(水) 07:49:49.34ID:CDqFudEs
学校の設備で作る学生を基準に期間設定してるんだろ。
0534デフォルトの名無しさん2016/03/09(水) 08:04:49.13ID:K3h75xfw
>>528
わかりました。ありがとうございます。
>>529
パッケージ管理するやつとかあるのかと思いまして。
インストール方法を読んでやってみます。
ありがとうございました。
0535デフォルトの名無しさん2016/03/09(水) 09:22:43.41ID:d3Fu6zEX
>>534
OSとライブラリによるとしか言えん
0536デフォルトの名無しさん2016/03/09(水) 09:35:09.49ID:JD1GGcwK
肉体労働と思わせたくないから、期間が長いとか
0537デフォルトの名無しさん2016/03/09(水) 10:48:44.03ID:9Q4Jrqff
>>533
なるほどパソコン持ってない人もいますもんね
>>536
それは思わなかったですwやはり教授陣もプライドがあるんでしょうね


すいません話変わるんですが
作ったCファイルが他のフォルダにも勝手にできていて怖いんですが
原因分かりますか?
C\つまりCドライブ直下にCファイル(.cppファイル)を作成するようにしてるんですが
program files以下にも同じファイルが複製されています。
単に保存しただけなのにこういうことが起きるのは何故でしょう?
0538デフォルトの名無しさん2016/03/09(水) 11:51:58.40ID:SwyqFb3j
>>537
どうせVirtual Storeが有効なんだろ
0539デフォルトの名無しさん2016/03/09(水) 12:42:31.91ID:3jrP1VBb
>C\つまりCドライブ直下にCファイル(.cppファイル)を作成するようにしてる

それが一番怖いわ
デスクトップ直置きなら馬鹿だね〜で済ませるけど
0540デフォルトの名無しさん2016/03/09(水) 12:46:38.55ID:9Q4Jrqff
>>539
Administratorでもprogram files以下だとアクセスできないんで
Cドライブ直下においてます。
0541デフォルトの名無しさん2016/03/09(水) 14:14:09.68ID:PrCMlypj
せめて C:\workとか作ってそっちでやっては
0542デフォルトの名無しさん2016/03/10(木) 08:20:40.22ID:qI8v2Ic2
pow(2,3)とかをcodepadで出力させるとエラーがでるんですが
pow(2.0,3)じゃないとダメなんですか?
何故int型だとエラーがでるのか分かりません
0543デフォルトの名無しさん2016/03/10(木) 08:23:36.98ID:H4qLTvmH
 double pow(double x, double y);
って宣言されてるから、
最初の引数にintが来るpowって識別子がなんなのかコンパイラに判断がつけられない
0544デフォルトの名無しさん2016/03/10(木) 08:34:52.13ID:/KMYK0BP
その辺の細かい部分は人間がフォローするという前提で作られているから
0545デフォルトの名無しさん2016/03/10(木) 09:06:45.38ID:1sAKxE/U
今試したらエラー出ないみたいだけど
ttp://codepad.org/YnCisfbG
俺の使ったcodepadと >>542 のcodepadが違うのかな。
(codepadが複数あるか知らないが)
0546デフォルトの名無しさん2016/03/10(木) 21:25:51.21ID:o/Qe45D5
どーでもいいけど#include <math.h>はデフォルトインクルードされるのかね
0547デフォルトの名無しさん2016/03/11(金) 00:52:33.94ID:ZLj/v9UA
C言語だとオーバーロードはないのに、なんでコンパイラが判断できないのかな?
intはdoubleに暗黙変換できるから、
暗黙変換が悪いかどうかはおいといて、問題ないと思っていたが
0548デフォルトの名無しさん2016/03/11(金) 01:19:34.50ID:d6vlWuqB
powの引数がdoubleだと知っていればintから返還もできるだろうけど、
コンパイラがこの関数に出くわしたときにはそのような情報を貰えてない。
分からないときはintと仮定してコンパイルする。
0549デフォルトの名無しさん2016/03/11(金) 01:20:06.83ID:H0VzbVqv
>>547
どうやって引数や戻り値の型を判断するか知ってる?
判断できれば勝手に変換してくれるし、判断できなければ変換しない
0550デフォルトの名無しさん2016/03/11(金) 06:23:10.43ID:3C5JniC+
QZうさばらしに初心者叩ききたこれ
オナニー範囲拡大かよ
0551デフォルトの名無しさん2016/03/11(金) 08:37:30.81ID:RA7SR1be
なんでヘッダファイルをロードしてるのにコンパイラが関数の引数や戻り値の型が
わからないとか言ってるのか謎すぎて困る
0552デフォルトの名無しさん2016/03/11(金) 08:42:06.86ID:ZLj/v9UA
>> 551
そう
0553デフォルトの名無しさん2016/03/11(金) 08:56:36.77ID:KJTBe9Dx
コンパイラは分かってる。なぜ分かってないことにしたいのか分からない
0554デフォルトの名無しさん2016/03/11(金) 22:53:51.25ID:ZLj/v9UA
C90の規格書が高い
しかも、FAXじゃないと買えないみたいだし
0555デフォルトの名無しさん2016/03/11(金) 23:24:16.19ID:ZQxUajjd
>>553
>>545
0556デフォルトの名無しさん2016/03/12(土) 01:01:50.31ID:0uUalLEO
>>555
>>553
0557デフォルトの名無しさん2016/03/12(土) 01:17:10.58ID:Zbyfy48z
>>556
>>548
0558デフォルトの名無しさん2016/03/12(土) 03:34:15.30ID:dB8yT5di
ヘッダファイルをロードしてないからコンパイラは分からないって言ってるんでしょ
前提が食い違ってたらそりゃ話も合わない
そりゃちゃんと宣言されたヘッダを読んでれば分かるわな
0559デフォルトの名無しさん2016/03/12(土) 07:27:02.14ID:Zbyfy48z
>>558
>>546
0560デフォルトの名無しさん2016/03/12(土) 08:00:53.61ID:FZHgycnj
>>558
codepadの仕様の話をしているんだよ
>>545とそのリンク先読んでこい
0561デフォルトの名無しさん2016/03/12(土) 11:29:26.27ID:dB8yT5di
これはひどい
0562デフォルトの名無しさん2016/03/12(土) 11:40:40.35ID:DuWmaw85
だったら最初からcodepadでは、こうだって書けばいいじゃない
そんな書き方じゃ伝わらないよ
0563デフォルトの名無しさん2016/03/12(土) 11:52:14.30ID:tqFDIrhN
流れを読まずに何キレてんだ
0564デフォルトの名無しさん2016/03/12(土) 12:15:41.20ID:DuWmaw85
いやいや、
自分ではこうだといっても、相手に伝わらなければ、今回みたいな勘違いが生まれるよって話だよ。
0565デフォルトの名無しさん2016/03/12(土) 12:30:19.55ID:Zbyfy48z
>>562
>>546
0566デフォルトの名無しさん2016/03/12(土) 12:35:00.11ID:DuWmaw85
>> 565
そういう答え方だから、プロトタイプ宣言があるという勘違いが生まれた。

一行だけ書かれたレスへのリンクだけ張って答えて、
伝わった気になっているからこうなったんだよ。
0567デフォルトの名無しさん2016/03/12(土) 12:45:37.69ID:Zbyfy48z
>>566
プロトタイプ宣言があるという勘違い?
どういう意味??
0568デフォルトの名無しさん2016/03/12(土) 12:49:05.77ID:DuWmaw85
例えば558のレスは、そういう勘違いからきてるかもね。
0569デフォルトの名無しさん2016/03/12(土) 13:18:55.61ID:dB8yT5di
>>567 >>551
0570デフォルトの名無しさん2016/03/12(土) 17:04:44.12ID:L5RNWAGr
>>452 を個人的に追及するわけじゃないが…。
codepadでエラーが出る状態を具体的に示してくれれば
皆が同じ出発点から検討できるのだけど。
0571デフォルトの名無しさん2016/03/12(土) 18:01:37.68ID:34i0brk6
codepadって何ですか
0572片山博文MZ ◆T6xkBnTXz7B0 2016/03/12(土) 18:41:01.05ID:PAxzfn3Q
>>571
オンラインコンパイラでや!
http://codepad.org
0573デフォルトの名無しさん2016/03/12(土) 19:16:33.36ID:NuHx+xBn
単純に
542はcodepadの言語選択でCではなくC++を選んでたってだけの話じゃね
0574デフォルトの名無しさん2016/03/12(土) 22:51:44.12ID:L5RNWAGr
>>573
確かにC++だと引数型のエラーが出るね。
ttp://codepad.org/07vW6oUl
0575デフォルトの名無しさん2016/03/12(土) 23:16:03.42ID:Zbyfy48z
お疲れ様でした
0576デフォルトの名無しさん2016/03/12(土) 23:48:44.33ID:dB8yT5di
>>575
ワロタ
0577デフォルトの名無しさん2016/03/13(日) 06:39:28.83ID:9gULIumj
C++だとヘッダを読ませてもエラーになるわ。
ttp://codepad.org/XEL2aNXg
0578デフォルトの名無しさん2016/03/13(日) 18:52:20.94ID:N6Vxxlvc
>>575
>>578
pow(float, float)
pow(double, double)
pow(long double, long double)
pow(float, int)
pow(double int)
pow(long double int)
のどれをあてはめていいかわからない,といってきている
http://cpprefjp.github.io/reference/cmath/pow.html
0579デフォルトの名無しさん2016/03/13(日) 19:29:57.99ID:+iVrDraI
cc1が動いてるなら c++表記はエラーになりそうですが
0580デフォルトの名無しさん2016/03/13(日) 23:46:05.60ID:sZxuUfy7
入力された文字列を分解して認識させることはできますか?
例えば、「10」と入力したら、「1」と「0」に分解して、1、0の順番で認識させたいのですが、
どのようなプログラムになるでしょうか?
0581デフォルトの名無しさん2016/03/14(月) 00:42:13.40ID:lJPXpy3H
どこまで出来てるの?
0582デフォルトの名無しさん2016/03/14(月) 00:55:54.41ID:Ip84V2ob
できてません・・・

#include <stdio.h>

int main(void)
{
int a;
scanf("%d",&a);
printf("%d\n",a);
return 0;
}
0583デフォルトの名無しさん2016/03/14(月) 01:00:09.04ID:lJPXpy3H
文字列なのに
int a;
になってるけど いいの?
0584デフォルトの名無しさん2016/03/14(月) 10:35:59.55ID:whR0RhU5
scanf, get, fgetとかあるでしょ
バファに格納するだとか、scanfは危険だとか
こういうのについて、詳しく書いた本知りませんか?
0585デフォルトの名無しさん2016/03/14(月) 10:45:22.09ID:V+E2qg+k
書籍になってるのかは知らんけど C FAQ
http://www.kouno.jp/home/c_faq/
0586デフォルトの名無しさん2016/03/14(月) 13:18:23.88ID:lJPXpy3H
なんで危険なのか
調べないの?
0587デフォルトの名無しさん2016/03/14(月) 18:33:14.83ID:Ip84V2ob
>>584,585
ありがとうございます
0588デフォルトの名無しさん2016/03/14(月) 19:55:40.01ID:fPs5qZap
scanfはバカには使いこなせないだけで、危険という訳ではない。
0589デフォルトの名無しさん2016/03/14(月) 20:38:05.49ID:iw5fwB6n
>>588
バカとか初心者には危険と言うことだろ
文脈も読めないのかよ
0590デフォルトの名無しさん2016/03/14(月) 20:51:28.91ID:ibt6L1Mm
つまり、C言語にはバカでも初心者でもなくとも
たとえ玄人でも危険な関数が有るということだ
0591デフォルトの名無しさん2016/03/15(火) 02:15:52.21ID:MTWz+w/w
>>589
文脈という言葉を使いたかっただけのバカのサンプル
0592デフォルトの名無しさん2016/03/15(火) 05:02:24.59ID:M+16HuVk
↑文脈を読めなかったバカ w
0593デフォルトの名無しさん2016/03/15(火) 06:02:48.06ID:C3AXaLpb
>>588
大量に文字打ち込まれても、例外で落ちる位だろうしな。
0594デフォルトの名無しさん2016/03/15(火) 07:28:08.47ID:7uNUDPY5
>>593
バッファオーバーラン起きる可能性はないの?
0595デフォルトの名無しさん2016/03/15(火) 07:30:21.05ID:MTWz+w/w
>>594
ID:M+16HuVkのようなバカじゃなければ、その可能性はゼロ
0596デフォルトの名無しさん2016/03/15(火) 07:59:45.41ID:CzhQTntB
↑文脈読めなかったことをバカにされて発狂中 w
0597デフォルトの名無しさん2016/03/15(火) 08:22:23.07ID:MTWz+w/w
>>596
文脈と言いたかっただけのバカの見本
0598デフォルトの名無しさん2016/03/15(火) 08:28:19.79ID:MWaL28J4
文脈ガー
0599デフォルトの名無しさん2016/03/15(火) 08:31:14.53ID:CzhQTntB
バカは同じ話を繰り返す傾向にある ⇒ >>591, >>597
もちろん文脈は読めない w
0600デフォルトの名無しさん2016/03/15(火) 08:42:08.25ID:MTWz+w/w
>>599
文脈と言いたかっただけのバカの見本
文脈を読んだからこそ、scanfに言及した事を、ここに至っても読めてない

惨め過ぎるぞ、バカ
0601デフォルトの名無しさん2016/03/15(火) 12:52:37.18ID:CzhQTntB
最初から書いてある scanf に言及して、文脈読んだどー

バカすぎ w
0602デフォルトの名無しさん2016/03/15(火) 13:26:48.97ID:tOaQpit1
scanf でフォーマット外文字着た時 (ex "%d" 指定で 入力がアルファベットだった等)
戻り値で変換できなかったことはわかっても、
バッファー戻して別のフォーマット指示を試すとかのリカバーはできんよね

sscanf なら 第1引数そのままで、第2引数かえたりしてトライするのだけだけども
0603デフォルトの名無しさん2016/03/15(火) 17:12:41.77ID:XKvP/JZd
バッファオーバーランの話じゃないの?
0604デフォルトの名無しさん2016/03/15(火) 17:28:40.69ID:YyhWMWyf
バッファオーバーフロウといえばさ、scanfじゃないの(というかC++なの)だけど、
「オーバーフロウでするスタック書き込みによる任意コードの実行」の実験してたら、
Windowsだとビタでリターンアドレス書き換えないと、
例外ぶん投げられて殺される上にリターンアドレス書き換えても例外で中断するんだよね。

任意コードの実行って例外ハンドラの乗っ取り(という方法を聞いただけ)でやってるのかな。
0605デフォルトの名無しさん2016/03/15(火) 17:32:14.70ID:XKvP/JZd
コンパイラオプションのセキュリティーチェックが有効になっているのでは?
0606デフォルトの名無しさん2016/03/15(火) 18:32:34.36ID:MTWz+w/w
>>601
文脈読めないバカ w
0607デフォルトの名無しさん2016/03/15(火) 19:08:23.63ID:RIoPtDsj
>>605
バッファオーバーフロー?何それ
普通バッファオーバーランっていうんじゃないの?
0608デフォルトの名無しさん2016/03/15(火) 19:18:22.57ID:ivyX2ptV
スタックはあふれてオーバーフロー
バッファは突破してオーバーラン
0609デフォルトの名無しさん2016/03/15(火) 20:54:01.64ID:2CrqxnpD
>>606
>>599

文脈読んだと豪語したら、最初から書いてありましたとさ w
普通なら恥ずかしくて出てこれないレベル
0610デフォルトの名無しさん2016/03/17(木) 18:54:38.16ID:qwQg5KrU
>>609
覚えたての「文脈」なので使いこなせないバカ
0611デフォルトの名無しさん2016/03/17(木) 22:29:48.12ID:yET/+Bsj
>>610
何を書いても最初から書いてあったのを

文脈読んだどー

って言ってた事実は変えられないんだが w
0612デフォルトの名無しさん2016/03/18(金) 08:06:39.80ID:hJggaWxo
/*
0613デフォルトの名無しさん2016/03/18(金) 14:20:58.85ID:+V9oIlwr
/* // /* */
0614デフォルトの名無しさん2016/03/18(金) 14:49:10.07ID:ZhAqSKHQ
>>613
警告でないようにして
0615デフォルトの名無しさん2016/03/18(金) 15:16:35.99ID:FJXuf9ta
#if 0
コメント〜〜〜〜〜
#endif
0616デフォルトの名無しさん2016/03/19(土) 15:35:03.37ID:TH+k+4Mf
>>614
は?なめてんの??
0617デフォルトの名無しさん2016/03/19(土) 18:46:43.23ID:+7UxHD3p
そんなことないよー ペロペロ
0618デフォルトの名無しさん2016/03/20(日) 13:55:55.35ID:X7hHDbSE
*(NULL); でセグフォると思って実験してみたんですが、手持ちのgccだとアセンブリから該当の処理を除いてるみたいなんです。
GDBでステップ実行してみても*(NULL)は無視されるんですが、これはコンパイラが気を利かせて無視しているんでしょうか?
0619デフォルトの名無しさん2016/03/20(日) 14:03:11.86ID:b1lneXII
本当にそれだけ書いてるのなら値が使われてないからコンパイラが最適化で消してる
printf("%d",*(NULL));
にしたら無視されなくなるよ
0620デフォルトの名無しさん2016/03/20(日) 14:08:11.01ID:X7hHDbSE
レスありがとうございます。
ということは演算を行うとセグフォるんですよね。
*(NULL); で値を参照しているからセグフォると今まで勘違いしていました。。
ポインタ変数の切り替えだけなら不正じゃないんですね。
0621デフォルトの名無しさん2016/03/20(日) 14:17:28.53ID:b1lneXII
演算でセグフォるわけではなく、通常は演算に使わないと参照もされないからセグフォらないってこと
セグフォるタイミングは参照で合ってる

セグフォる最小コードにしたいとかであれば
volatileつきの変数に代入とかでもなると思うよ
volatileつければ最適化されずに確実に参照されるはず。
volatile int a;
a = *(NULL);
0622デフォルトの名無しさん2016/03/20(日) 14:20:49.54ID:X7hHDbSE
演算に使われないからコンパイラの最適化で消されて結果的にセグフォらないってことですか
なんか騙し合いしてるみたいですね
volatile使うアイデアは無かったので試して見ます。ありがとうございます
0623デフォルトの名無しさん2016/03/20(日) 14:22:52.90ID:X7hHDbSE
無事にセグフォりました
0624デフォルトの名無しさん2016/03/20(日) 14:34:00.13ID:2ByM0Cdf
気持ち悪いからセグフォるとか言うな
0625デフォルトの名無しさん2016/03/20(日) 14:39:03.85ID:X7hHDbSE
無事にセグメンテーション・フォルトが発生しました
0626デフォルトの名無しさん2016/03/20(日) 14:41:57.33ID:IxHxEO0w
>>624
やっと言ってくれた、、、いやオレも言おうとは思ったんだけどねw
0627デフォルトの名無しさん2016/03/20(日) 15:26:45.79ID:YlJ66Eyf
でもバグるは許す
0628デフォルトの名無しさん2016/03/20(日) 15:27:10.86ID:Ad5KCdBQ
楽しそうだな
0629デフォルトの名無しさん2016/03/20(日) 16:07:38.53ID:YNMOH2/p
今後セグフォるも使わせてもらうことにする
0630デフォルトの名無しさん2016/03/20(日) 16:12:38.31ID:2ByM0Cdf
>>627
あ、セグるならいい気がしてきた
0631デフォルトの名無しさん2016/03/20(日) 16:18:11.10ID:YNMOH2/p
ならセフォるのほうが何の略か若干わかりやすくてよくね?
0632デフォルトの名無しさん2016/03/20(日) 16:58:40.84ID:B3NGK1ug
行儀よくセグフォとお呼びなさい
0633デフォルトの名無しさん2016/03/20(日) 17:06:27.86ID:F85l2ARQ
ここは「アベする」で。
0634デフォルトの名無しさん2016/03/20(日) 17:31:05.13ID:Jw6fHHdv
アサヒっちゃったかー
0635デフォルトの名無しさん2016/03/20(日) 19:51:53.77ID:l6d3jrye
モルピグ?
0636デフォルトの名無しさん2016/03/23(水) 00:45:24.61ID:b66U0McC
【ワカヤマン】C言語プログラミング能力認定試験 [無断転載禁止](c)2ch.net
http://hanabi.2ch.net/test/read.cgi/lic/1454165737/
0637デフォルトの名無しさん2016/03/23(水) 04:29:51.53ID:I1sA7JH5
IRCで外国人とCの話ししてたら malloc(3) の話しになったのね
俺は char* p = (char*) malloc(sizeof(char)*len+1); のようにmalloc(3)の戻り値をキャストしてるんだけど
外国の複数人が「malloc(3)はキャストするな!」って言うの。
その中の一人が根拠に上げたのが http://c-faq.com/malloc/mallocnocast.html で
たぶん「コンパイラからの警告が得られない」といった内容だと思うんだけど
ここの人達はキャストしない派?キャストしない方がCとしては良いコードなの?
0638デフォルトの名無しさん2016/03/23(水) 06:46:48.49ID:FBcE/3NP
>>637
紹介されたリンク先を読むと、
「キャストすると<stdlib.h>のインクルード忘れを見逃しやすくなる」と
書かれてるみたいだけど、キャストしない根拠としては弱いんじゃないかな。
最後の部分にもあるが、現在はプロトタイプ宣言のない外部関数を使うだけで
コンパイラから警告やエラーを出してもらえるから。

CのソースをC++コンパイラでコンパイルする時、C++ではキャストがないと
エラーになる(C++ではvoid*からの暗黙の変換はできない)ので
先手を取ってキャストしておくのが良い、という主張も見たことがある。
これも反対に、C++でコンパイルするソースにmalloc()が紛れ込んでいるのは
好ましくないから、コンパイル時に一度エラーを出させる方が安全、
という考え方もある。


個人的にはキャストはしない。
でもキャストしてるソースを見ても特に違和感もない。
どちらの流儀にもそれなりに理があるからね。
0639デフォルトの名無しさん2016/03/23(水) 06:52:15.72ID:3O2Q3Ipb
Cならキャストしないほうがいいかもね
Cでキャストすることによるメリットが特に見当たらないように思われるし
でもC++では void * からの代入はキャストしないとエラーになるので
C++に慣れてる人が書くとキャストするだろうなあとも思う
0640デフォルトの名無しさん2016/03/23(水) 07:16:10.65ID:I1sA7JH5
>>638,639
なるほど。流儀の問題なのかな
すごい勢いで「you don't cast malloc」と言ってくるの
C++でコンパイル・エラーになると言ったら「C++は違う言語だ」だって
その通りだけどさ
0641デフォルトの名無しさん2016/03/23(水) 07:39:07.48ID:2AMgDl2y
>>640
なんかワロタ
0642デフォルトの名無しさん2016/03/23(水) 08:54:43.43ID:LTRcZjfN
キャストしないとCでも怒られることあるよ
怒られてキャストする派かな
0643デフォルトの名無しさん2016/03/23(水) 09:34:13.92ID:XCA2ps0L
怒られるケースって const がらみかな?とも思ったが、そうでもないっぽい
単純に環境の違い?
0644デフォルトの名無しさん2016/03/23(水) 09:45:57.15ID:ck1lVuwK
キャストっていうのはコンパイラへの指示であると同時に
コード読者への注意喚起だと思うんだよね
だから特にここ注意して読んでくれって時以外は
キャストしないほうがいいと思う
0645デフォルトの名無しさん2016/03/23(水) 12:54:02.21ID:DRjXWvcc
>>642
どういう場合?
0646デフォルトの名無しさん2016/03/23(水) 13:27:30.08ID:LTRcZjfN
ワーニングを消すためだけのおまじないみたいなキャストはしない
で わかりますか?
0647デフォルトの名無しさん2016/03/23(水) 13:32:13.78ID:XCA2ps0L
>>646
それキャスト一般の話?
malloc の戻りを 無キャストで怒られるケースって何だろう って流れだと思ってたが
0648デフォルトの名無しさん2016/03/23(水) 13:49:07.92ID:LTRcZjfN
そんなのいっパイあるでしょ
0649デフォルトの名無しさん2016/03/23(水) 13:57:32.01ID:LTRcZjfN
(void*)hoge=malloc(10000);
とでも しとけば
コンパイル時に怒られるかどうかまでわからんけど
0650デフォルトの名無しさん2016/03/23(水) 14:03:46.26ID:XCA2ps0L
void* から 任意型のポインタへは 無キャストだと警告が出る環境 か
任意型のポインタから void* へ も警告が出る? (qsort の第一引数とかだけど)
0651デフォルトの名無しさん2016/03/23(水) 14:16:54.47ID:DRjXWvcc
>>648
だから例を挙げてよ
0652デフォルトの名無しさん2016/03/23(水) 14:56:48.45ID:LTRcZjfN
ポインタ型がいっぱい
これでもわからんの?
0653デフォルトの名無しさん2016/03/23(水) 14:58:41.33ID:LTRcZjfN
なんだ 二人いるのか?
せいぜい悩んでくださいな
0654デフォルトの名無しさん2016/03/23(水) 15:03:27.90ID:XCA2ps0L
俺は俺なりに想像して解(>>650)を出したつもりだ
一切事例を出さず、悩めとか投げっぱなしっていい身分だよね
0655デフォルトの名無しさん2016/03/23(水) 16:23:48.40ID:LTRcZjfN
低能が答えてるだけだから、スルーすりゃいいじゃん
0656デフォルトの名無しさん2016/03/23(水) 17:41:53.23ID:ICosA8//
いっぱいあるのに挙げられない
つまり無い
0657デフォルトの名無しさん2016/03/23(水) 18:25:42.21ID:cttIRKe8
どうせ拡張子cppでやってんだろw
0658デフォルトの名無しさん2016/03/23(水) 18:33:13.71ID:YmFoTPQm
C++じゃなくCで char *p = malloc(1); でキャストに関する警告出る環境ある?
0659デフォルトの名無しさん2016/03/23(水) 21:25:59.61ID:8YZPE/AR
>>659
bcc51 あたりは文句つけそうだがもう手元にない
0660デフォルトの名無しさん2016/03/26(土) 22:35:37.39ID:wDQ5s2av
 定かではない記憶で書くけど。
 むかーし、俺はGCCで入門したんだけど、その際に無変換で(char*)として受け取ろうとしたらエラーだったような。
 以降、(char*)をmallocの頭に書いて受け取るのが習慣になってた。
 今は書かない派が登場するまでに拮抗した状態だったのか。
 悔い改める気もないけれど、勉強になりました。
0661デフォルトの名無しさん2016/03/26(土) 23:04:06.80ID:SvzrOZwZ
拡張子cppだったんだろうな
0662デフォルトの名無しさん2016/03/26(土) 23:38:37.79ID:3Z6Od1jT
C言語なんていうオワコン言語にしがみついてるから
そういう本質的でない部分にエネルギーと時間を取られてしまう
0663デフォルトの名無しさん2016/03/26(土) 23:40:12.90ID:0JOMD2Tc
オワコンくんが呼ばれてないのに・・・・ランプから
06646602016/03/26(土) 23:52:26.45ID:wDQ5s2av
 そうなのかな?
 相変わらず怪しい記憶を探れば、まだC++もObjectiv-CもFORTRANも付いていない、コレクションになる前のGCCだったけど。
0665デフォルトの名無しさん2016/03/27(日) 01:47:54.10ID:MaOZ0xr6
在日なんだろうなぁ。
0666デフォルトの名無しさん2016/03/27(日) 06:54:25.68ID:KEbnfQgi
C89以前とか ちょっと な…
0667デフォルトの名無しさん2016/03/27(日) 15:05:38.30ID:fvqc9/NX
K&Rまだ引きずってる人がいたか
0668デフォルトの名無しさん2016/03/27(日) 17:33:29.30ID:OYer+Plz
stdlib.hをincludeしてなかったとかでは
0669デフォルトの名無しさん2016/04/03(日) 10:43:53.85ID:5Wc4cYeo
ねえだれかファイルの先頭LBAを知る方法教えてよ!
環境はFreeBSD9.3 IA32で!
0670デフォルトの名無しさん2016/04/03(日) 10:57:41.19ID:azZmmaKg
そんなんファイルシステムのソースを追うしかなかろ
0671デフォルトの名無しさん2016/04/03(日) 15:22:41.35ID:hk27pqaZ
質問お願いします。


while(x < 10)
{

kansuu_a();

kansuu_b();

kansuu_c();

}

上記のループがあったとして、もし、割り込みなどでxが10以上になったらループを抜けるのですが
kansuu_b();の途中で、x = 10 と、条件が合った場合に、kansuu_b();も含めkannsuu_c();も最後まで実行されるのでしょうか?
よろしくお願い致します。
0672デフォルトの名無しさん2016/04/03(日) 15:36:27.24ID:tmgxHwUn
>>671
判定はループ内処理が一通り終わってから
途中でループから出たいなら、
if (x >= 10) break; を適時追加する
0673デフォルトの名無しさん2016/04/03(日) 15:44:18.60ID:hk27pqaZ
>>672

やはりループ内処理が終わってからなんですね
ありがとうございました。
0674デフォルトの名無しさん2016/04/03(日) 17:32:21.11ID:AtnrFOjr
割り込み内でxが書き換えれないなら
いきなり、組み込み? このレベルで
0675デフォルトの名無しさん2016/04/03(日) 17:56:25.34ID:tmgxHwUn
どういう理由で書き換えられるのか、
その手法が正当なのかは、質問の範囲ではない
0676デフォルトの名無しさん2016/04/03(日) 20:00:16.64ID:AtnrFOjr
ほ?
0677デフォルトの名無しさん2016/04/03(日) 20:08:45.49ID:1hzZ1h9p
自分には674の文章が読み解けないんだけど
誰か分かりやすい日本語に翻訳頼む
0678デフォルトの名無しさん2016/04/03(日) 20:12:30.47ID:H5B9gN5k
どういう理由で書き換わろうが 比較する箇所は変わらんから
非常脱出のようなことにはならない

変な抜け方するのは
setjmp longjmp や (OS依存? の)例外ハンドラ とか
atexit と exit() の組ぐらい
0679デフォルトの名無しさん2016/04/03(日) 20:13:06.85ID:sB0jXNdb
宇宙語を翻訳しろと言われても、無理な話だな
06806602016/04/03(日) 20:45:53.09ID:WYXG0bG7
 割り込みであれ何であれ、xが変化しても判定されるのは冒頭のwhile(x < 10) だけ。
0681デフォルトの名無しさん2016/04/03(日) 20:46:34.14ID:WYXG0bG7
関係ない番号が入ってしまった。スマ
0682デフォルトの名無しさん2016/04/03(日) 21:01:51.61ID:AtnrFOjr
へ?
0683デフォルトの名無しさん2016/04/03(日) 21:17:02.34ID:AtnrFOjr
xがグローバル変数で 書き換えられるの前提か

割り込みに異常に反応してしまったようだ すまんかった
0684デフォルトの名無しさん2016/04/09(土) 12:30:12.22ID:DMfdkpDa
C言語なんていうオワコン言語にしがみついてるから
そういう本質的でない部分にエネルギーと時間を取られてしまう
0685デフォルトの名無しさん2016/04/09(土) 12:39:05.69ID:rws6B3un
Cはコンテンツじゃないって何度言えば分かるんだろう
0686デフォルトの名無しさん2016/04/09(土) 12:46:36.56ID:/4/Vu5/J
オワコンって言っている奴が自爆しているのだろう
0687デフォルトの名無しさん2016/04/10(日) 13:39:56.19ID:DwnRNPVT
使う変数すべてグローバル変数にすればよくないですか?そうすれば
その変数を使う場合関数の引数が必要なくなりますし、
プログラムも長くなりませんよね?
もちろんiやjみたいな走査するために使う変数はローカルで使用しますが…
0688デフォルトの名無しさん2016/04/10(日) 13:43:48.31ID:lctucWPJ
うん、それでいいと思うよ。
0689デフォルトの名無しさん2016/04/10(日) 13:49:58.85ID:2Sp/+uDX
>>687
iやjをローカル変数にする理由はなんですか?
その理由は他の変数には当てはまりませんか?
0690デフォルトの名無しさん2016/04/10(日) 14:04:18.17ID:1wJYBBrT
殆どの変数が関数内でstatic宣言されている2万行くらいのソースをメンテしたことがある
変数の値が変わると、それぞれの関数の内部処理が分岐して異なる処理を行っていた

書いた当人は体調を崩して最後までやり遂げなかった
引き継いだ時は死ぬかも知れないと思った
0691デフォルトの名無しさん2016/04/10(日) 14:32:18.54ID:8QBZrgWf
>>690
多分書き直した方が早いよねw
0692デフォルトの名無しさん2016/04/10(日) 17:00:06.12ID:eUggSRfL
Java VMで動くプログラムを作れるC言語コンパイラを教えてください
0693デフォルトの名無しさん2016/04/10(日) 18:30:07.32ID:DwnRNPVT
コメントにこのプログラムはこう読んでくださいみたいな誘導書くだけでも
プログラムって可読性増しませんか?はいソースって渡されて解読に時間費やしてる
んじゃ効率悪すぎだと思うんですが…
0694デフォルトの名無しさん2016/04/10(日) 18:31:04.81ID:DwnRNPVT
すいません>>690さんに対するレスです
0695デフォルトの名無しさん2016/04/10(日) 19:24:37.06ID:1wJYBBrT
>>694
このモジュール(実行単位)についてのドキュメント、
関数仕様書はこんな感じでした。

「初期処理」 初期処理を実行する
「メイン処理」 メイン処理を実行する
「終了処理」 終了処理を実行する
「異常処理」 異常処理を実行する
関数の引数 なし
関数の戻り値 なし

つまり、2万行のソースには全部で4個の関数がありました。
ホスト側の処理なので、クライアントの要求に応じて処理内容が変わります。
もう、いわゆるスパゲッティを遙かに超えてました。

何故こうなったかと言うと、関数一つ一つ、使用する変数一つ一つ
対応する詳細なドキュメントを本来は書かないといけなかった。
それが面倒だったのでしょう。書く時間がなかったというのも事実でしたけど。
記述内容をできるだけ減らすために、関数の数を少なく、
もちろん引数、戻り値なしで作る様になったらしいです。
内部はブラックボックスというか、ダンジョンというか・・
0696デフォルトの名無しさん2016/04/10(日) 19:43:06.68ID:lctucWPJ
>>693
それはそうなんだけど、そもそもグローバル変数を使わないだけで、読みやすくなるんだよね。
やるべきことをやらないでコメントでごまかす感じになるのは良くないと思います。
0697デフォルトの名無しさん2016/04/10(日) 19:54:14.07ID:1wJYBBrT
コメント通りにはプログラムは動かないからね。ヒント程度の意味。
コメントを信じてしまうと、思わぬ落とし穴にはまる危険もある。

ソースを読んでいて、なんでこんな無駄なことをしているのだろうと
読んだ人が疑問に思うだろう箇所に、
「こういう事情・経緯があってこうせざるを得なかった。だから、直す場合は気をつけてね」
と書くのは良いと思う。
0698デフォルトの名無しさん2016/04/10(日) 20:46:38.13ID:9f80ZgaW
// これは魔法。触っちゃダメ。
// もし動作したなら、これはポールによって書かれたコードだ。
// 動作しなかったら誰が書いたかわからない。

/*
* このコードがどう動作するのかわかったつもりでいるだろ。
* でも君にはわかんないよ。信じてくれ。
* 君がこのコードを「最適化」するのに充分な知識があると過信してるせいで
* 君はこれからいくつもの眠れない夜を過ごす事になるんだ。
* さぁファイルを閉じて何か違うことして遊んで来なさい。
*/

// コメントは書かない
// 説明しづらい
// だから読みづらいはず

# ==== このコードいじっちゃだめ。絶対だめ。いじったら蹴り飛ばしちゃうよ ===
0699デフォルトの名無しさん2016/04/10(日) 21:02:30.92ID:B3wjguSX
うちの職場は英語しか使っちゃいけないせいでほとんどコード化かないなあ
0700デフォルトの名無しさん2016/04/10(日) 21:03:00.28ID:B3wjguSX
うちの職場は英語しか使っちゃいけないせいでほとんどコメント書かないなあ
0701デフォルトの名無しさん2016/04/10(日) 21:19:42.51ID:v52RcnsN
// よくわからんけど、この行がないと動かないので削除厳禁!!
0702デフォルトの名無しさん2016/04/10(日) 21:27:42.45ID:9f80ZgaW
// この行を追加すると何故か動く
0703デフォルトの名無しさん2016/04/10(日) 22:13:56.39ID:1wJYBBrT
20年以上前の話だけど
ある有名テキストエディタをバイナリーダンプすると
プログラマーのぼやきの言葉が見つかる
リビジョンアップするたびに内容が変わるので
毎回楽しみにしていた。
0704デフォルトの名無しさん2016/04/12(火) 23:00:53.29ID:HTKb5Qid
いつも思うんですけどinclude文ってなんで中身を列挙できないんでしょうか?冗長じゃないですか?
0705 ◆QZaw55cn4c 2016/04/12(火) 23:04:00.88ID:kAnw283c
>>704
その列挙する中身全部が有用とは限らない
かならずしも使うとは限らない有象無象を一行ですますことができるのが #include のいいところ
0706デフォルトの名無しさん2016/04/12(火) 23:22:33.86ID:l+U7G4Kp
#include <stdio.h,stdlibh.h time.h QZaw55cn4c.h>
0707デフォルトの名無しさん2016/04/12(火) 23:50:12.11ID:HTKb5Qid
うん?言ってる意味がわからない。
すいません…
結局まとめることはできるんですか?
0708デフォルトの名無しさん2016/04/12(火) 23:56:53.62ID:HTKb5Qid
なるほど
よく考えたら何となくわかった気がします。
これって哲学ですね。まとめて書いちゃったらそのまとめたくくりが大きな意味をもっちゃいますもんね
0709デフォルトの名無しさん2016/04/13(水) 01:59:46.65ID:jupLzAcR
>>704
include文をまとめたヘッダを用意してそれをinclude
0710デフォルトの名無しさん2016/04/13(水) 07:56:46.74ID:vNSwsj+R
読み込む順番も重要だからバグの元となる仕様は減らすのが吉。
0711デフォルトの名無しさん2016/04/13(水) 11:58:19.52ID:1LLRw21F
順序依存するようなのは そのヘッダーファイル内で include しないのけ?

ex) b.h 中に a.h がないと都合が悪いケース
b.h
| /* インクルードガード pragma かもしれんし #ifdef かもしれん */
| #include "a.h"
| b.h で記述しようと思った本体
| /* インクルードガード #endif かもしれん */
0712デフォルトの名無しさん2016/04/13(水) 12:05:54.44ID:vNSwsj+R
思い込みがバグの温床。

やるのが普通だからやっている前提で行う→実はやってなかった。
0713デフォルトの名無しさん2016/04/13(水) 12:10:42.40ID:vN1MAMm8
順序に依存性があるなら、自分の中でインクルードしてしまえば良いだろう
0714デフォルトの名無しさん2016/04/13(水) 12:31:30.68ID:1LLRw21F
コンパイルが通らないなら分かるけど、、、 >>710 の意図だと
「順序反転でコンパイルは通るけどバグになる」 って読めるけど
どうやったら、そうなるんだろう… 直面したことないかも
0715デフォルトの名無しさん2016/04/13(水) 13:05:46.83ID:gYwoKOnq
ないことはない。
自分は問題となったことはないけど
こういうリスクはあると思ってる。

---- headerA.h ----
#ifndef PATH_MAX
#define PATH_MAX 1024
#endif

---- headerB.h ----
#ifndef PATH_MAX
#define PATH_MAX 512
#endif
0716デフォルトの名無しさん2016/04/13(水) 13:31:21.17ID:1LLRw21F
>>715 ありがとう
確かに、おこりうるパターンやね

固定長の配列に PATH_MAX で一意に決めてるつもりが
include 順によって実は一意に定まってなかったって、これは問題点の追跡がしんどいな
0717デフォルトの名無しさん2016/04/13(水) 15:21:54.03ID:7YNUgm8C
int *p = 1 //駄目
*p = 1 //ok

ポインタの使い方がよくわからないのですが、
初期化時は、int型変数のアドレスを指定しないと駄目で、初期化後(定義後?)は*で変数のようにアクセスできるので、
定義時と、定義後の*の意味は違うということでいいでしょうか?

また、初期化時は任意のアドレスを指定(&iなど)した方がいいんでしょうか?
必要なければ、定義時のアドレスをそのまま使ってもいいんですか?
0718デフォルトの名無しさん2016/04/13(水) 15:31:28.67ID:fbVZAWIt
>>717
定義時は、 int* の pだよ
ただし int* a, b; ってやってもbはただのintだから注意ね
そしてその例だと *p が確保されてないからいろいろまずい
まあ例として出しただけでいろいろ端折ってるのかもしれないけど
0719デフォルトの名無しさん2016/04/13(水) 15:38:30.89ID:1LLRw21F
同じ記号 * を使ってるけど、
初期化とそれ以外とで意味が異なってるので、ややこしくなってる

int *p = 1;  ← ポインタの初期化 (アドレスの 1 にしようとしてる)
.....
*p = 1; ← 指し先に 1 を代入 (正当な存在する場所かどうかは不明)

---------------------
int a, b;
int *p = &a;
これに続いて

*p = 1; と書くと、結果的には a = 1; が実施されている

このまま

p = &b;
*p = 1;

と記述すると、結果的には b = 1; が実施されている
0720デフォルトの名無しさん2016/04/13(水) 16:12:08.01ID:s5MRiDQ8
初期化と式で「*」の意味合いは変わるんだけど
Cを作った人たちは頭が良かったから
初期化と式内で実際に使うときの、見た目だけ無理やり合わせたんだよ
おかげでプログラマは頭を使わずに済むのだ
ね、C言語って素敵でしょ
0721デフォルトの名無しさん2016/04/13(水) 16:22:02.19ID:7YNUgm8C
>>718
領域を指定しないと、何入ってるか想像できないんですか?
型に応じたサイズを未使用領域へ勝手に割り当てることはないということですか?
0722デフォルトの名無しさん2016/04/13(水) 16:24:21.08ID:fbVZAWIt
>>721
そうだよ、int a; とかやってaの内容をいきなり使わないでしょ、それと同じ。
0723デフォルトの名無しさん2016/04/13(水) 16:35:46.13ID:1LLRw21F
>>721
型に応じたサイズを未使用領域へ勝手に割り当てることはない

int *p; *p = 1;
は、どこ指してるか不明な領域に代入操作していて
たまたま、動いているように見えるかもしれないし、
ソフトがコア吐いて落ちるかもしれないし
鼻から悪魔が出るかもしれない
0724デフォルトの名無しさん2016/04/13(水) 16:35:51.58ID:7YNUgm8C
そういわれるとそうですね。

あと、オブジェクト指向におけるnewはc言語でいうcalloc mallocと考えていいのでしょうか?
0725デフォルトの名無しさん2016/04/13(水) 16:40:12.36ID:fbVZAWIt
確保という点では同じですが、コンストラクタが呼ばれます。
0726デフォルトの名無しさん2016/04/13(水) 17:14:59.52ID:7YNUgm8C
なるほど、c言語ではコンストラクタがないから何か手続きを用意しないといけないと。

ポインタをインクリメントすると、
次のアドレスを指していきますが、
nullを返すと最後ですよね。

ここに動的に確保した領域をセットしてあげれば、動的配列となるのでしょうか?
でも、アドレスを指すためのメモリもただじゃないし違う??
0727デフォルトの名無しさん2016/04/13(水) 17:17:54.71ID:1LLRw21F
動的かつ自動伸張するような高級な機能ないよ
そいうのを全て排除し、覚えることは最小限にして、
何でも書ける(= 全部書かないと動かない) のが C言語ですし

そういうのが欲しければ別の言語の使用を検討したほうが
精神衛生上良いかもしれない
0728デフォルトの名無しさん2016/04/13(水) 17:19:06.51ID:fbVZAWIt
nullを返すなんて決まりはない
伸び縮みさせたいならrealloc使う、後ろに領域なければ別の場所に確保して内容コピーされる
0729デフォルトの名無しさん2016/04/13(水) 18:24:55.46ID:7YNUgm8C
ポインタをインクリメントすると型分のサイズアドレスが移動しますよね。
では、文字列リテラルをchar* strに代入すると、
charの先頭アドレスのみが置かれるんでしょうか。次のアドレスの参照を保持しているわけではない?

インクリメントした後は、指しているアドレスを戻さないといけない?

あと、そうだとすると、巨大な文字列を代入しようとしたとき、メモリ合計上では余っていても、領域が分断されている場合は確保することができないということになるんでしょうか。

すみません、勉強不足なので調べます。
0730デフォルトの名無しさん2016/04/13(水) 18:39:14.11ID:fbVZAWIt
>>729
何がしたいのかよくわからんが、実験コード書いてどんどん動かしてみりゃいい
ちなみにサイズ分移動する、そのサイズはコンパイル時に決定する
アドレスそのものはただの数字なので、使うなら保存すりゃいいし
別の変数にコピーして使うことだってできる
0731デフォルトの名無しさん2016/04/13(水) 19:04:05.57ID:P6uESFcm
10個分の器のある配列があります → int a[10];
添え字変数があります int i = 0;

添え字変数を インクリメントします i++
添え字を使って配列に代入します a[i] = なんとか

インクリメントの過程で
用意した10個分の器を突破して代入したらどうなるの?
→未定義 決して領域を拡張してくれるなんてことはない
0732デフォルトの名無しさん2016/04/13(水) 21:06:57.20ID:Wc5oLkcz
C言語のif文で複数の条件がある場合に
どういう書き方をするのが一般的?でしょうか。
下記はa,b,cのような一文字変数ですが、実際は変数名が長くて
ディスプレイの端に届きます…。


if(a==1 && b==2 && c==3 && d==4){
i++;
}
0733デフォルトの名無しさん2016/04/13(水) 21:21:25.02ID:01Fp5Zkb
普通に改行で
&&は前にあったほうがいいかも
0734デフォルトの名無しさん2016/04/14(木) 00:33:41.05ID:z3BF5zjO
個人的には
if(a==1 &&
  b==2 &&
  c==3 &&
  d==4   ){
   i++;
}

かな。
0735デフォルトの名無しさん2016/04/14(木) 01:07:19.94ID:Hz0vtyFd
>>733
>>734
これは、結構人でバラバラですか?
0736デフォルトの名無しさん2016/04/14(木) 01:48:17.50ID:R2UuQJrM
同じソース内で一貫していれば許す
個人の内面的な信仰心はそっとしとこう
0737デフォルトの名無しさん2016/04/14(木) 03:05:37.79ID:AcxcRoSD
位置を揃えたいんだろうけど比較演算子が後ろにあったら読みにくい事請け合い
0738デフォルトの名無しさん2016/04/14(木) 03:20:02.46ID:R2UuQJrM
比較演算子を前に書くというのは、行追加・行削除時に都合がいいからと言うのが理由だと思ってました。
そうじゃないんですね。

ちなみに私は、後ろに書く派
0739デフォルトの名無しさん2016/04/14(木) 04:28:05.22ID:NR3Tjvfq
前に書いた方が他の行との関連が見えやすくなると思ってるけどその辺は宗教だろうね
0740デフォルトの名無しさん2016/04/14(木) 07:12:49.63ID:MF2aLNAH
>>729
文字列定数は、先頭のアドレス値を持つ、ポインタ定数。
文字列の内容は無くなったりしないが、先頭のアドレスが判らなくなった時点で、事実上使えなくなる。
0741デフォルトの名無しさん2016/04/14(木) 07:15:58.10ID:J7AkptOM
>>738
そもそも比較演算子の話じゃないし...
0742デフォルトの名無しさん2016/04/14(木) 08:22:14.74ID:Y6Qtie59
ありゃ本当だ。途中から論理演算子の位置の話になってるな。

個人的には論理演算子は行の先頭に書く派。
でも、前の行の行末に書く気持ちも理解できる。
「改行の後もまだまだ続くよ」
0743デフォルトの名無しさん2016/04/14(木) 08:26:12.54ID:qdE9CW7g
ifの後と{の前にスペース置かない奴は信用しないことにしている
0744デフォルトの名無しさん2016/04/14(木) 12:30:39.65ID:5f4G3Aw2
宗教押し付ける奴は信用しない
0745デフォルトの名無しさん2016/04/14(木) 12:44:59.76ID:h3KiwqeP
宗教はどうでもいいけど、見やすさ優先で
0746デフォルトの名無しさん2016/04/14(木) 13:44:48.67ID:NR3Tjvfq
ソース内で統一されてればどの宗教でもいいよ
0747デフォルトの名無しさん2016/04/14(木) 16:09:09.04ID:oJ3K84zW
無償のテキストエディター使うからそう
いった宗教戦争になるんじゃね?
読み込むときにきちんと構文解析まで
してくれる奴使えば各種書式スタイルの
切り替えなんてボタン一発で出来るらしい。
50万位するらしいけど
0748デフォルトの名無しさん2016/04/14(木) 16:20:55.42ID:5f4G3Aw2
手軽にクリーンできるならいいんだけどなぁ
0749デフォルトの名無しさん2016/04/14(木) 16:49:19.23ID:3SneyASi
宗教的にバイブルのK&Rは行頭派だな
0750デフォルトの名無しさん2016/04/14(木) 19:12:15.44ID:pVIMEHPP
>>747
無償のテキストエディタでもできるよ
0751デフォルトの名無しさん2016/04/14(木) 19:22:36.22ID:gC/abIq/
>>747
高機能なプリティープリンタ機能を付加するだけでエディタが50万で売れるんだ
よーし、パパ連休中に頑張っちゃおうかな w
0752デフォルトの名無しさん2016/04/14(木) 19:42:11.68ID:f1hhftJp
>>747
各種書式スタイルっていうほどたくさんあるのかね‥
0753デフォルトの名無しさん2016/04/14(木) 19:50:23.23ID:BnC75/K2
>>752
indentコマンドのオプションを見れば・・・
山ほどある
0754デフォルトの名無しさん2016/04/15(金) 22:48:49.82ID:zl6YVf4a
c言語って結局ここのスレの人で少し詳しくて
たいていの質問ならさらっと答えられる人ってもちろん業務でC使ってる
からだろうけど最終目標みたいなのはあるんですか?
何でも知ってるなーって感じの人が目指すところってどこにあるんでしょう?
0755デフォルトの名無しさん2016/04/15(金) 22:56:08.43ID:HTsiRdus
所詮道具だし その道具に詳しくなるよりも
その道具を使って何を作るか、どう作るかのほうに注力したいね
0756デフォルトの名無しさん2016/04/15(金) 23:00:08.91ID:zl6YVf4a
>>755
何を作るか考えるときに車輪の再発明に陥る事ってないですか?
その回避方法とか教えていただければ。
0757デフォルトの名無しさん2016/04/15(金) 23:13:07.68ID:HTsiRdus
俺んとこはチームでやってるし、過去に似た事例ないか聞く
似て非なる場合に車輪の再発明しているかもしれんが、理想より納期
0758デフォルトの名無しさん2016/04/15(金) 23:17:50.93ID:zl6YVf4a
>>757
なるほど
普段気づいた事とかってノートに書いてます?
例えばC言語での新たな発見とか…
0759デフォルトの名無しさん2016/04/15(金) 23:24:03.99ID:HTsiRdus
俺はメモ取らないタチなので、、、
小さいエッセンスだけを抽出したソースコードを、フォルダにまとめておいてるぐらいかなぁ?
(ファイル名でなんとなく概要がわかるようにはしてるけど、 これなんだ? というのもあるw)

状況にもよるし、人それぞれだろうとは思うが 参考になれば
0760デフォルトの名無しさん2016/04/15(金) 23:35:39.81ID:zl6YVf4a
>>759
メモ取らないんですか確かにメモ取って集めてもそれは本に過ぎない気もします。
でもいいすね仕事でC言語触れるなんて…w
チーム開発において手抜きの方法、効率化とかって何かあります?
もちろん既存のツールを最大限使うとかはありますが対人間要素など
広い視野で。
0761デフォルトの名無しさん2016/04/15(金) 23:55:13.35ID:goHZ67UE
Redmine などのチケット制

桃鉄の作者、さくまあきらも言っていたが、
仕事ではたいてい、言った言わないで、証拠が無くて、もめる

だから、必ず証拠の書き込みを、優先する。
書き込みが無かったら、言わなかったという扱い

このルールを採用すると、もめ事が減る
0762デフォルトの名無しさん2016/04/16(土) 09:04:51.98ID:SgsvO2FJ
なるほど言った言わないですか…
下の立場だと濡れ衣着せられることもあってそういう時って仕事辞めたく
なりますよね…
0763デフォルトの名無しさん2016/04/16(土) 09:30:17.19ID:n32HsPrI
マ板でやれ
0764デフォルトの名無しさん2016/04/17(日) 10:08:14.00ID:J9sWRtNN
基本的なことですまん
POSIXの時刻処理の構造体のマクロについてだが
#ifdef __USE_GNU
/* Macros for converting between `struct timeval' and `struct timespec'. */
# define TIMEVAL_TO_TIMESPEC(tv, ts) { \
(ts)->tv_sec = (tv)->tv_sec; \
(ts)->tv_nsec = (tv)->tv_usec * 1000; \
}
# define TIMESPEC_TO_TIMEVAL(tv, ts) { \
(tv)->tv_sec = (ts)->tv_sec; \
(tv)->tv_usec = (ts)->tv_nsec / 1000; \
}
#endif
これどっちかのdefine消さないとループになっちゃうよね?
0765デフォルトの名無しさん2016/04/17(日) 11:08:39.41ID:9RtFA8P0
どこもループしてないように見えるけど何の心配をしてるんだろうか
0766デフォルトの名無しさん2016/04/17(日) 11:19:18.49ID:J9sWRtNN
>>765このまま使うわ
0767デフォルトの名無しさん2016/04/17(日) 11:21:55.44ID:L0n2/yYV
>>766
他に何か言うことないの?
0768デフォルトの名無しさん2016/04/17(日) 11:33:05.19ID:J9sWRtNN
これだと
timeval構造体はtimespec構造体に
timespec構造体はtimeval構造体に変換されるだろ
俺の勘違いか?
0769デフォルトの名無しさん2016/04/17(日) 11:35:36.47ID:MXiE5eIT
うん
0770デフォルトの名無しさん2016/04/17(日) 11:39:27.84ID:J9sWRtNN
#define XOR_SWAP(a, b) \
do {a ^= b; b ^= a; a ^= b;} while (0)
俺はこの程度で勘違いするレベルなんだ
マクロはさっぱり分からなかった
0771デフォルトの名無しさん2016/04/17(日) 11:42:59.84ID:J9sWRtNN
要はこのまま使えるんだね
サンクス
0772デフォルトの名無しさん2016/04/17(日) 18:16:12.66ID:QfnURbDg
static関数のデバッグってどうしたらよい?
0773デフォルトの名無しさん2016/04/17(日) 18:37:41.00ID:qbPhCdn+
どこに悩んでるの?
正式なテスト方法に悩むならともかくデバッグだったらなんとでもなると思うが
0774デフォルトの名無しさん2016/04/17(日) 19:09:46.30ID:QfnURbDg
>>773
デバッガでブレイクポイントに止まらんとです
関数指定では止まったんだけど関数内の指定行では素通りしてしまうのです
0775デフォルトの名無しさん2016/04/17(日) 20:41:45.06ID:aon4BAjF
インライン展開されて複数箇所に散らばってると止まらんかもしれんね
/*static*/
にしたら止まるかも、関数内で
0776デフォルトの名無しさん2016/04/17(日) 21:43:20.32ID:Ri3wwcor
>>774
最適化し過ぎてんじゃないと?ばってん
0777デフォルトの名無しさん2016/04/18(月) 09:18:35.56ID:looFcgiP
Releaseビルドにしてると最適化オンだから無駄な行は存在しないので
飛ばされることがある
07787722016/04/18(月) 10:32:38.66ID:k47wJ5ZZ
最適化オプション付いてないのは確認しました
ちなみにコンパイラはccでsolarisです
>>775さんの言うようにifdefとか使ってstatic外すのが早いですかね
0779デフォルトの名無しさん2016/04/18(月) 10:49:13.39ID:looFcgiP
ん?ヘッダに置いてたりしないよね
0780デフォルトの名無しさん2016/04/18(月) 12:15:33.30ID:k47wJ5ZZ
>>779
宣言も実体も.cファイルにあります
0781デフォルトの名無しさん2016/04/18(月) 12:26:47.52ID:OvHIqTOi
printfでどこ走ってるか
見てみたほうが早そう
0782デフォルトの名無しさん2016/04/18(月) 12:31:26.88ID:looFcgiP
関数のstaticってCだと名前の変形だけよね?
変だなあ、static外して問題が無くなるのかも知りたいな
0783デフォルトの名無しさん2016/04/18(月) 13:19:06.62ID:Jl/B9TZo
実際実行されない行だったりしないかな
ccでコンパイルしてgdb使う、みたいなのはよくないかも
0784デフォルトの名無しさん2016/04/18(月) 15:46:58.55ID:ErdsNVpN
>>774
おみゃ熊本だがや?
地震はどーもにゃーのか?
0785デフォルトの名無しさん2016/04/18(月) 15:50:10.19ID:yb7Uc/LD
ヒロシなんじゃないの?ってこれもももうだいぶ昔か・・・
0786デフォルトの名無しさん2016/04/18(月) 19:42:35.80ID:h2Yzyofc
デバッガは使わんな‥printf()/messagebox でさくさくやってる
0787デフォルトの名無しさん2016/04/18(月) 23:57:10.34ID:EV7F0j6L
使い方知らないだけじゃないの
0788デフォルトの名無しさん2016/04/19(火) 06:11:08.50ID:DxOQ7Q1K
>>783
> ccでコンパイルしてgdb使う、みたいなのはよくないかも
何故?
0789デフォルトの名無しさん2016/04/19(火) 07:46:44.67ID:gMT1daXa
大学の授業でTurboC++使ってた時はデバッガなんて知らなかったから
実行結果やハングした場所でバグの箇所を判断してたわ。
0790デフォルトの名無しさん2016/04/19(火) 08:35:05.62ID:o4vMvrvg
>>789
それでは試験作業ですらないだろう。
0791デフォルトの名無しさん2016/04/19(火) 08:38:05.12ID:SvHoNoSF
まぁ、実際のところ、マルチスレッド固有の不具合でもなけりゃ、printf最強伝説だよね。
0792デフォルトの名無しさん2016/04/19(火) 13:12:07.31ID:q+Olin0w
>>788
いまsolaris使えないので確認できないけど、ccとgccを混在しない方がいいよねってぐらい
0793デフォルトの名無しさん2016/04/19(火) 13:23:08.66ID:ygWYJ2CY
>>792
それ25年くらい前にハマったわ
0794デフォルトの名無しさん2016/04/19(火) 13:30:53.01ID:p1DLuv4U
オレもそのくらいか
ccはgccのコンパイルするためだけに使ってたなw
0795デフォルトの名無しさん2016/04/20(水) 20:22:28.61ID:3/WxgUSn
すごい発見をしたんですがC言語って>>や<<によって2倍や1/2
倍にできますよね?そうなると掛け算を一瞬でできるんじゃないですか?
例えば10万ケタ×1073741824は本来なら100万回の掛け算が必要ですが
30ビット左にずらせばいいだけなので30回の処理ですみます。
あれ?そう考えるとスーパーコンピュータって必要ですか?
0796デフォルトの名無しさん2016/04/20(水) 20:24:28.16ID:3/WxgUSn
どんなに長大な掛け算でもビット演算子を使えば
一瞬で掛け算が終わる。これってすごくないですか?
0797デフォルトの名無しさん2016/04/20(水) 20:28:13.96ID:sZH76cZn
その一回の処理の時間を短くできるスーパーコンピューターは必要
0798デフォルトの名無しさん2016/04/20(水) 20:30:29.69ID:3/WxgUSn
僕の発見って結構すごくないですか?かけざんって絶対ビット演算子
使ってないですよね?使えばいいのに
0799デフォルトの名無しさん2016/04/20(水) 20:41:17.48ID:sZH76cZn
>>798
2^n以外を使う乗算はどうするの?
0800デフォルトの名無しさん2016/04/20(水) 20:45:24.26ID:3/WxgUSn
>>799
それは簡単ですよ

×3はa+2a

×5はa+4a

×7は8a-a
0801デフォルトの名無しさん2016/04/20(水) 20:46:06.26ID:3/WxgUSn
やばい卒論に書こうかな。
「ビット演算子を用いた高速計算方法について」
0802デフォルトの名無しさん2016/04/20(水) 20:46:44.84ID:1rGPQiSA
10進数なら、お尻に0を書き込めば10倍
100進数なら、お尻に0を書き込めば100倍

かけ算するときに、その乗数に合わせて、
扱っている数値の基数を動的に切り替えるような
計算機作ったら良いんじゃない?がんばれw
0803デフォルトの名無しさん2016/04/20(水) 20:48:10.14ID:fsvlQikD
>>800
x2352 とか x 512324 はどうするの?
0804デフォルトの名無しさん2016/04/20(水) 20:50:19.68ID:3/WxgUSn
>>803
分解すればいいんですよ。
0805デフォルトの名無しさん2016/04/20(水) 20:57:39.54ID:r07pzD8i
もう少し面白いネタを頼む
0806片山博文MZ ◆T6xkBnTXz7B0 2016/04/20(水) 21:00:26.90ID:HDtf39ye
C=A×Bを計算する場合。
1.C:=0、D:=Bとおく。
2.Bを二進数にする。
3.Bのビット0が1であればCにDを加算する。
4.Dを二倍する。
5.Bのビット1が1であればCにDを加算する。
6.Dを二倍する。
7.Bのビット2が1であればCにDを加算する。
以下、Bのすべてのビットについて繰り返す。
0807デフォルトの名無しさん2016/04/20(水) 21:02:27.26ID:EM73E2Zf
>>795
乗算器の所要クロックが加算器の所要クロックの掛け算倍になるわけないだろ
0808片山博文MZ ◆T6xkBnTXz7B0 2016/04/20(水) 21:03:22.80ID:HDtf39ye
訂正。
(誤)1.C:=0、D:=Bとおく。
(正)1.C:=0、D:=Aとおく。
0809片山博文MZ ◆T6xkBnTXz7B0 2016/04/20(水) 21:09:50.43ID:HDtf39ye
それは、Cコンパイラにおいて単純な整数の掛け算の最適化でよく使われている技法だよ。
0810片山博文MZ ◆T6xkBnTXz7B0 2016/04/20(水) 21:16:49.48ID:HDtf39ye
ビットパターンが予測できない場合や複雑な場合は、やっぱり普通に
計算するより遅くなると思う。
0811デフォルトの名無しさん2016/04/20(水) 21:24:28.03ID:Jmz22TMT
>>810
今時のは乗算器内蔵だから、32 bit の掛け算も一瞬。
0812デフォルトの名無しさん2016/04/20(水) 21:28:24.98ID:/MyWq4P0
>>782
亀レスですみませんがstatic外したら止まります
0813片山博文MZ ◆T6xkBnTXz7B0 2016/04/20(水) 21:34:13.26ID:HDtf39ye
東京大学の技術力で魅力的な半導体を作れないものかね?
0814デフォルトの名無しさん2016/04/20(水) 21:58:51.62ID:1PUcpHse
Tehu君に「友達になってください」とリプライを送られたアイドル、Twitterアカウントを削除
http://hayabusa8.2ch.net/test/read.cgi/news/1460990224/


※「tefu」とはこの人です。

自称小学生「(安倍総理は)どうして解散するんですか?」、慶応SFCのtehuさんと、菅直人の息子と接点を持つ青木氏が代表を務めるNPO法人「僕らの一歩が日本を変える」が関与を認める。
http://korokial.com/archives/2025

【速報】自称小学4年生が作った安倍政権批判サイトはTehuとNPO法人「僕らの一歩が日本を変える」が仕掛けたステマだった
http://netgeek.biz/archives/25581
0815デフォルトの名無しさん2016/04/20(水) 22:09:26.28ID:3/WxgUSn
そうかBのフラグ1が多いと加算が多くなるから
掛け算より加算回数が多くなるんだなー
0816デフォルトの名無しさん2016/04/20(水) 22:22:57.86ID:3/WxgUSn
>>813
どういう半導体が魅力的なんですか?
半導体は集積度からもう限界達してるっぽいですけど
0817デフォルトの名無しさん2016/04/20(水) 22:28:44.31ID:1rGPQiSA
分子一つ一つを演算素子にできたら良いね!
0818デフォルトの名無しさん2016/04/21(木) 12:58:25.86ID:w5Z3WEgD
微妙にスレチかもしれないですけど、
int ungetchr(int ch)の
chって何が語源でしょうか?

関数はスタックに数字をエンキューするような関数です。
0819デフォルトの名無しさん2016/04/21(木) 13:05:59.15ID:ne9homxy
関数名の getch や ungetchr , 型の char どこまで短縮するかの違いだけで
(なお、母音は落とす傾向) 元は character でしょ
0820デフォルトの名無しさん2016/04/21(木) 19:20:57.41ID:w5Z3WEgD
数なのにcharなのかなぁ。
変数の意味が分からない参考書とか絶滅して欲しい。
0821デフォルトの名無しさん2016/04/21(木) 19:29:07.29ID:NkUsQZeW
チャンネルかもね
0822デフォルトの名無しさん2016/04/21(木) 20:41:02.42ID:lMrhGQ0g
>>818
いや数値じゃなくて文字だよ
0823デフォルトの名無しさん2016/04/21(木) 21:18:12.14ID:BUxy1JL6
C言語なんていうオワコン言語にしがみついてるから
そういうどうでもいいことにエネルギーと時間を浪費させられるんだ
C言語なんか週末勉強会で取り上げられることなんかないし
求人を見てもオワコンメーカーかパチンコの仕事しかねえわ
メーカーの仕事なんか完全に終わってるからな
エクセルパワポのドキュメント作成と下請け管理しかしない
クリエイティブという言葉からは最も遠い所にあると思っていい
Macを使ってる職場なんか皆無やぞ
アメリカではプログラマーの年収が1000万だというのに、
日本では上記雑用しかしないSE(笑)とかいう職種が600万貰ってるせいで
下請けプログラマーは400万しか貰えない
その結果日本のソフトウェア産業の国際競争力は最底辺になってしまって馬鹿にしていた
馬鹿チョンカメラメーカーにすら負けてしまったしソニーはアイホンを生み出せなかった
自動車の自動運転技術もGoogleに先を越されてしまったしこれからソフトウェアの重要性が
増すにつれ日本メーカーの存在感はますます薄くなっていくだろう
全ては技術の蓄積を放棄し既得権益にしがみつき目先の利益を優先したメーカーの人間のせい
そもそも自分の作ったソフトウェアをたくさんの人に使ってもらいたいとか
革新的なソフトウェアで世の中を変えたいとかそういう純粋な気持ちで理系を志したんじゃないのか
進捗表と一日中にらめっこして下請けに圧力を掛ける仕事で満足してしまうような
低俗な人間の集まりが日本のメーカーだ
そしてそういう現場から離れるためにはC言語なんていうオワコン言語をやってはいけない
研究室の教授に薦められるままオワコンメーカーに就職してはいけない
0824デフォルトの名無しさん2016/04/21(木) 21:18:59.17ID:BUxy1JL6
ここがヘンだよ! 日本のIT業界
ttp://itpro.nikkeibp.co.jp/atcl/column/15/051800124/051800001/?ST=ittrend
0825デフォルトの名無しさん2016/04/22(金) 15:07:28.35ID:Fd5Rfi8R
もしかして int だから数と思ったのでは?
0826デフォルトの名無しさん2016/04/22(金) 20:47:17.04ID:TT82zXSl
デキューしたデータをキューに戻す操作をエンキューって言うのは微妙に違和感ある
0827デフォルトの名無しさん2016/04/22(金) 21:54:20.33ID:J9/jo3Xy
javaで見たんですけどC言語でも見たことあるんですけど
パッケージ?のURLを逆に書く意味って何でですか?

current/donw3/down2/donw1/root

こんな感じで。

どういうことですか?
0828デフォルトの名無しさん2016/04/22(金) 21:54:55.63ID:J9/jo3Xy
rootがまぁその名の通り一番上
currentが一番したです。
0829デフォルトの名無しさん2016/04/23(土) 00:29:13.14ID:Nt0JgD2+
org/java/prj
com/company/prj
こんなのなら普通に見るけど
その逆なの? 見たことない
0830デフォルトの名無しさん2016/04/23(土) 01:05:19.73ID:TP7qzO4H
>>827
URLは世界で一意で、重複しないから、
パッケージ名・モジュール名などの名前空間に使っても、他とかぶらないので安全

>>823
米国人の年収を、1,000万円にしたのは自公政権だぞ
1,000万円は、1ドル120円で、83,333ドル

民主党政権では、1ドル80円だったから、667万円しかない

自公のせいで輸入物価が上がって、貧乏人は何も買えないようになった
0831デフォルトの名無しさん2016/04/23(土) 11:07:38.23ID:ZFNcEgTG
c言語ってそんなオワコンなの?
開発環境に手を出すだけでも大変なのに
コンパイラだけでも大変なのに
他のに変えようかな
0832デフォルトの名無しさん2016/04/23(土) 11:10:19.22ID:ZFNcEgTG
>>823
アメリカと日本は違うで全て論破できる
0833デフォルトの名無しさん2016/04/23(土) 11:25:42.77ID:lquf7+7b
在日とはまともな会話はできないんだから無視しとけ。
0834デフォルトの名無しさん2016/04/23(土) 11:38:30.38ID:8AmVCCg3
>>831
今はeclipse入れればいいだけじゃね
0835デフォルトの名無しさん2016/04/23(土) 13:21:46.13ID:pe7A/Xk6
>>830
>民主党政権では、1ドル80円だったから、667万円しかない

俺は自民に批判的だが、こういう間抜けは味方には要らんわ。
矛盾指摘されまくりで、こっちまで同種と思われるのは迷惑。
0836デフォルトの名無しさん2016/04/23(土) 13:24:21.73ID:RLEkkPM/
80円だった頃の方が、大多数の国民は豊かに暮らしてたと思う
0837デフォルトの名無しさん2016/04/23(土) 13:43:38.07ID:0n68wQyZ
>>836
潰れた会社がどれだけあったと思ってんだよ
0838デフォルトの名無しさん2016/04/23(土) 13:54:56.39ID:RLEkkPM/
今消費者が節約に動いているから、
倒産する企業はもっと増えるよ。
0839デフォルトの名無しさん2016/04/23(土) 13:57:50.60ID:RLEkkPM/
大体、輸出でメリットあるなんてされている企業は海外生産にシフトしているから、
円安関係ないんだな

そういう企業は、円高になったからって国内に回帰することはない。
円安で国として持っている力は押してしまっている。何にも良い事がない。
0840デフォルトの名無しさん2016/04/23(土) 14:36:28.52ID:5fv/8zz4
残念,うちの会社は国内生産堅持だ
ただ,基本,消耗品ビジネスで消耗品は現地生産だったりする.円安?増収増益で会社はウハウハだったようだ,俺のところにはまわってこなかったが
0841デフォルトの名無しさん2016/04/23(土) 15:15:21.45ID:wuTnXjCz
>>837
会社つぶれたら、生保で、パチンコ生活。
0842デフォルトの名無しさん2016/04/23(土) 15:17:31.88ID:ZFNcEgTG
eclipseやったけど
buildしてrunしてもlaunch faild binary file...(略
になるから
素直にアンインストールしてパソコン買い換えるわ
0843デフォルトの名無しさん2016/04/23(土) 15:24:49.90ID:ZFNcEgTG
なんでjdkってあんなにファイル大きいんだよ
悪夢だわ
0844デフォルトの名無しさん2016/04/23(土) 20:07:57.81ID:PVRMM1xg
javaのランタイムうざい。
世界から消えて欲しい
0845デフォルトの名無しさん2016/04/23(土) 21:13:40.76ID:SK3ygulk
>>841
生保って書くと生命保険と思っちゃう。
0846デフォルトの名無しさん2016/04/25(月) 21:51:33.93ID:0xpbBk2N
>>843
jdkがでかいって何と比べて?
C++ の boost は1桁上だよ
0847デフォルトの名無しさん2016/04/25(月) 23:12:48.52ID:bn/mODeU
>>846
スレタイ読めたらCだって分かるけどな
0848デフォルトの名無しさん2016/04/26(火) 09:22:20.85ID:+6Vecjai
富士通を退職して思うこと
ttp://anond.hatelabo.jp/20160424135253
0849デフォルトの名無しさん2016/04/28(木) 19:27:01.77ID:a/gmwLrd
【ワカヤマン】C言語プログラミング能力認定試験 [無断転載禁止](c)2ch.net
http://hanabi.2ch.net/test/read.cgi/lic/1454165737/
0850マルマイケル ◆SpT0vOJDD4oz 2016/04/29(金) 19:25:09.20ID:q40Wzln/
ちょっと気になったこと質問していいですか?
医療機器のプログラムなんかはミスで死人が出ると思うんだけど
プログラムを書いてる途中のテスト段階のコードが紛れ込んで、
その場合、特定の条件で誤作動起こしたりすることも考えられますよね。
実際そんなコードが紛れ込んでないことを確認する工程はあるんでしょうか?
特にC言語の場合低級言語だからコード数が半端なく長いですよね。
性善説に立って一定の条件を満たせばあとは大丈夫だろみたいな感じですか?
0851デフォルトの名無しさん2016/04/29(金) 20:08:41.73ID:KKrgBx8+
テスト段階のコードって、デバッグコードのこと?
そういうのはリリース段階でコンパイル対象には
ならない。ちゃんとそれがコンパイルされていない
ことをチェックするテスト?
厳密にはそれはできないだろ。コンパイラのテスト
になってしまう。
そういうことまでにいちゃもん付けてくるクライアント
にはソース納品で自分でビルドしてくれって話になる
だろ
0852デフォルトの名無しさん2016/04/29(金) 20:19:24.30ID:yivpch89
医療とか、航空管制とか、軍事とか、
そういう所でそんな不具合あったら、
大変なことになるな
0853デフォルトの名無しさん2016/04/29(金) 20:30:15.75ID:KKrgBx8+
ライセンス条項をもう一度嫁
そういう用途に使用されることは想定されていないと
書いてある筈
0854マルマイケル ◆SpT0vOJDD4oz 2016/04/29(金) 20:40:05.98ID:q40Wzln/
>>851
ということはコンパイルで通ってしまった不本意なコードはもう
どうしようもないって事ですか?よく医療機器でミス起こってないですね…
誰かがやけになってとんでもないコード書いてしまったりとか想像するだけで
怖い。
0855デフォルトの名無しさん2016/04/29(金) 20:46:09.31ID:Wtls6hah
普通ソース管理されとるわ
その上でテストするもんだ
0856マルマイケル ◆SpT0vOJDD4oz 2016/04/29(金) 20:51:27.70ID:q40Wzln/
コンパイルは通ったけど危険がないかあ目を通すんですか?
無茶では?
0857デフォルトの名無しさん2016/04/29(金) 20:52:01.16ID:KKrgBx8+
ちょっとした電磁ノイズが入っただけで
メモリエラーでブルースクリーンなひ弱な
PCと、X線撮影機とかCTやらMRIとか
強い電磁波を出す医療機器に囲まれた
環境で使われるコンピュータは(ソフト・ハード)
の強靭さという点でレベルが全然違うから心配
しなくても良いとは思ってはいるんだが...

結構医療現場でもPC最近見るなw
0858マルマイケル ◆SpT0vOJDD4oz 2016/04/29(金) 20:57:05.97ID:q40Wzln/
いやだから開発者側に悪の人間がいた場合危険じゃないですか?
そんなこといったら整備士とかいろんな仕事に言える事ですがね。
でもプログラムの場合ちょちょっと変えただけで機械をクラッシュさせる
事ができるんだからそういうケースは侮れなくないですか?
0859デフォルトの名無しさん2016/04/29(金) 21:03:41.12ID:D58W+5CL
大事なプラントとかはPLCとかラダー言語で動いているんで、
C言語とかマイコンで動いていないから心配しなくていい。
0860デフォルトの名無しさん2016/04/29(金) 21:05:02.32ID:oe77Lu/z
まぁ ラダーでも書く奴次第でバグる
0861デフォルトの名無しさん2016/04/29(金) 21:07:28.69ID:QczfiLRq
PLCは割とノイズに強く出来ているね。

PLCでもC言語つかえますよw
0862デフォルトの名無しさん2016/04/29(金) 21:08:28.26ID:KKrgBx8+
>>858
そういうハードウェアを選ばなければいい
0863デフォルトの名無しさん2016/04/29(金) 21:19:21.27ID:n6riXDRu
なんか逆に現場の弱点を聞き出そうとしてるようにも読めるな。w
0864デフォルトの名無しさん2016/04/29(金) 21:21:37.96ID:Wtls6hah
ただの学生かニートだろ
0865デフォルトの名無しさん2016/04/29(金) 21:22:31.40ID:KKrgBx8+
高水準言語で書くと権力が集中して危ないから
低水準言語で書けという話かな?
昔からあるねその種の話は。
0866マルマイケル ◆SpT0vOJDD4oz 2016/04/29(金) 21:24:11.57ID:q40Wzln/
自爆コードとか埋め込まれていたら怖いですね。
コードでは検出できなくても読み込んだ画像のビットマップ
がそういうウイルスコードだった場合ランタイムの時は遅いですからね。
0867デフォルトの名無しさん2016/04/29(金) 22:00:25.33ID:KKrgBx8+
要するにそういうことが出来るのは今やCプログラマだけだから
Cプログラマは信用するな
って話?
ちょっと訓練すればだれでも使えるだろ>C言語
0868デフォルトの名無しさん2016/04/29(金) 22:43:37.71ID:U0VcHFID
たぶんひとみの分解事故がパラメーター云々できたお子ちゃまじゃね?
0869デフォルトの名無しさん2016/04/29(金) 22:53:44.39ID:NuB51tNS
おまえらフェールセーフという言葉を知らんのか?
ソフト起因に限らず、意図せぬ動作に備えて、ハード的に水際防止策を入れとくもんなんだけど。
0870デフォルトの名無しさん2016/04/29(金) 23:18:22.16ID:QczfiLRq
PLCの世界ではインターロックと言われていますな。

インターロック回路
0871デフォルトの名無しさん2016/04/30(土) 00:56:26.91ID:+IKIlF8v
>>850
いや、やっているよ、特定条件でデバッグ動作にならない確認は。
どこの誰でも必ずやっているかは知らないが。というか言語特有の問題じゃない。
0872デフォルトの名無しさん2016/04/30(土) 01:54:31.78ID:xjJ1xOm/
https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%86%E3%82%B9%E3%83%88#.E3.83.9B.E3.83.AF.E3.82.A4.E3.83.88.E3.83.9C.E3.83.83.E3.82.AF.E3.82.B9.E3.83.86.E3.82.B9.E3.83.88.E3.81.A8.E3.83.96.E3.83.A9.E3.83.83.E3.82.AF.E3.83.9C.E3.83.83.E3.82.AF.E3.82.B9.E3.83.86.E3.82.B9.E3.83.88
0873デフォルトの名無しさん2016/04/30(土) 06:50:41.19ID:/MW2Imho
出力アセンブリコードのチェックのほうが効率よくね?
0874デフォルトの名無しさん2016/04/30(土) 13:27:13.62ID:421BlVaM
もともと数万行〜数百万行に至るソースコードからできたアセンブリコードをチェックしようという発想はすばらしい
0875デフォルトの名無しさん2016/05/01(日) 07:35:48.94ID:QiyN6juH
ifの条件を無理やりデバッガで真になるように
ねつ造してまで、{}内コードに到達するかとか
チェックするテストは無意味
今時のコンパイラは条件が常に偽とか判定したら
すぐに報告してくるので、コンパイラ出力を見る
ほうが合理的
てか複雑な論理式を作るのはヘタクソか偏屈
出力アセンブリ通読はやったほうがいいだろ
ど〜せIntelプロセッサなんだろから
行数がCコードの100倍以上にになるのは比較
的珍しいだろうし
0876デフォルトの名無しさん2016/05/01(日) 08:17:25.07ID:1nJ9seSe
http://www.itmedia.co.jp/im/articles/1111/07/news192.html
0877デフォルトの名無しさん2016/05/01(日) 09:00:35.94ID:lKKwm3l+
>>875
括弧内のテストなんじゃないの
0878デフォルトの名無しさん2016/05/01(日) 10:21:48.72ID:QiyN6juH
/* と */の間に書かれたコードが翻訳されていない
ことを確認するほうが大事じゃないかと...
0879デフォルトの名無しさん2016/05/01(日) 10:47:33.71ID:tKi6j9CT
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
:
0880デフォルトの名無しさん2016/05/01(日) 11:05:28.14ID:gPof6zqn
#include<stdio.h>

int main(){
float f;

printf("浮動小数点数を入力してください :");
scanf("%f" , &f);

printf("%f",f);

return 0;
}

↑のソースをbcc32でコンパイルして実行し
123.567を入力すると
123.567001と帰ってきます

どういう理屈で最後に1が加わるのですか?
0881デフォルトの名無しさん2016/05/01(日) 11:14:02.22ID:D365QZlp
>>880 浮動小数表現で生じる誤差
0882デフォルトの名無しさん2016/05/01(日) 11:37:43.26ID:AqctS693
浮動小数点型の値は内部でこっそり変換される
分数を小数で表現して打ち切りを入れるのと同じ

有名な罠で、単純な加減乗除でも信じられないような結果が頻出する
08838802016/05/01(日) 11:47:16.67ID:gPof6zqn
ありがとうございます。

浮動小数 誤差 でググって調べました。
勉強になりました。
0884デフォルトの名無しさん2016/05/01(日) 12:19:58.61ID:NIgoXmA1
ということはC言語で書かれた給料計算プログラムとか
年金計算プログラムとか、端数が出てくるときは誤魔化されて
というわけか。
0885デフォルトの名無しさん2016/05/01(日) 12:23:35.45ID:iq4naj/T
もともと消費税とか四捨五入してるだろ。
0886デフォルトの名無しさん2016/05/01(日) 12:26:07.29ID:eBy0niIg
お金が絡む計算処理で浮動小数点は使わないでしょ
0887デフォルトの名無しさん2016/05/01(日) 12:33:20.65ID:lKKwm3l+
>>884
端数計算は普通明記されとるよ
0888デフォルトの名無しさん2016/05/01(日) 12:34:31.70ID:PDZmFLD6
消費税って切り捨てルールじゃね?
0889デフォルトの名無しさん2016/05/01(日) 12:38:00.63ID:vPINUUTJ
金の計算で実数を使う場合、端数は五捨五入すると相場は決まってる
0890デフォルトの名無しさん2016/05/01(日) 12:39:59.75ID:lKKwm3l+
コンビニでうまい棒買って11円になるか否か
0891デフォルトの名無しさん2016/05/01(日) 12:40:34.57ID:eBy0niIg
消費税はそれぞれの企業に任せている
切り上げ、切り捨て、四捨五入、どれでも構わない
一貫してさえいれば
0892デフォルトの名無しさん2016/05/01(日) 13:32:46.80ID:xJ13VA8P
個々で捨てられるハズの利息で生じる端数を1箇所に集めて、うはうはしてた横領事件であったはず
0893デフォルトの名無しさん2016/05/01(日) 13:41:40.40ID:eBy0niIg
そんなことしなくても、
消費税の場合は簡易課税制度というのがあって
結構どんぶりですから
0894デフォルトの名無しさん2016/05/01(日) 13:51:40.52ID:eBy0niIg
課税売上高が1,000万円以下の事業者は納税義務が免除されることになっています。

このようなお店で商品を買うと、購入者が支払った消費税は、業者の懐にまるまる入ります。

売上額の8%相当ですから、馬鹿にできない金額ですね。

ちょっとした国内旅行ならこれで賄えますね。
0895デフォルトの名無しさん2016/05/01(日) 15:56:16.27ID:Rr3HGAwm
端数が出ても現実世界と同じように2進数じゃなくて10進数でやるということでないの?
0896デフォルトの名無しさん2016/05/01(日) 17:25:02.32ID:QiyN6juH
というかコンパイルする前にコメントはすべて削除
0897デフォルトの名無しさん2016/05/01(日) 21:55:38.37ID:csgBMw5f
文字列で数字を表現すればいいんじゃね
char num[10000]で1万桁の数値が表現できる
あとは加減乗除を専用の関数で実装すれば完成や
0898デフォルトの名無しさん2016/05/01(日) 23:52:37.05ID:CScrXKEZ
>>894
ひょっとして、その商品は仕入れ値0円で入手したと仮定しているの?
確かにすべて0円で仕入れ、経費も0円しかかかっていなければ消費税はまるまる業者の懐に入るが
そんな業者はないでしょ。
0899デフォルトの名無しさん2016/05/02(月) 00:04:05.40ID:HcV+3/NE
>>898
何かを伝えたいことはわからんでもないが
どう仮定を置こうが1000万円以上か以下かで消費税分まるまる差がでるんだから
見当違いではないかい
0900デフォルトの名無しさん2016/05/02(月) 00:09:10.01ID:IfsZ2QOP
>>898
そういう細かい説明は省略ですけど
この業者が本来支払うべき消費税額がそのまま懐に入ると言うことです
1000万の売上げで仕入率が8割なら16万の税額ですが、
この16万で旅行にいけますねと言う話です。
0901デフォルトの名無しさん2016/05/02(月) 00:16:16.12ID:c3r8sV7s
pythonの計算方法は人間の筆算と同じだったな
>>897みたいな方法を使いながら
0902デフォルトの名無しさん2016/05/02(月) 10:34:42.28ID:xDgTrmYe
文系出身新入プログラマーの女(22)です。C言語の研修中で、周りに全くついていけず、行き帰りの電車で泣いてしまう★6
http://daily.2ch.net/test/read.cgi/ newsplus/1462141973/

新入社員プログラマーですが周りについていけません
文系出身新入社員プログラマーの22歳の女です。
今月入社致しました。プログラミング経験はないです。

今は研修期間で、C言語を学んでいるのですが、周りに全くついていけていない状態です。
同期も文系卒のプログラミング初心者が何人かいますが、その同期は自分でプログラムを組めるのに私だけが組めません。
何をすればいいのか、どういう風に書けばいいのか考えればいいのかわからないのです。

研修中に質問したりもしますが、何度聞いても何を言っているのか、どうしてそのコードを書くのか理解できません。

もちろん帰宅後や休日も参考書などを使って遅くまで勉強はしていますが、それでもどうすればいいのかわからないのです。
勉強の仕方が間違っているのかもしれません。参考書を読んで載っているコードを書いて、
あとは章末の問題を解いて…(わからないときはページを読み直したり)を繰り返しているのですが、それでもできません。
まず専門用語なども中々理解できなくて辛いです。

C言語を学び始めてから食事も中々喉を通りませんし、精神的にとても苦しく、
情けないのですが行き帰りの電車の中で泣いてしまっています。1ヶ月しか経っておらず、
まだ仕事の内容もわかっていないのにこの状況です。向いていないのではと思い、転職も考えましたが、
転職するにもこの早さで辞めても流石に先があるとは思えないので出来ればしたくないです。頑張りたいです。

同じような悩みをお持ちだった方や業界の方、いらっしゃいましたら勉強方法、仕事の仕方のアドバイスなど宜しくお願いいたします。
0903デフォルトの名無しさん2016/05/02(月) 10:37:29.48ID:60l+wW3o
>>902
死ぬ気でがんがってくだちい
いじょ
0904デフォルトの名無しさん2016/05/02(月) 12:15:25.21ID:ImRjejIk
技術的な問題なのか、必要性を(根本的なところで)理解できないのか、どっちなんだろうね。
0905デフォルトの名無しさん2016/05/02(月) 13:09:14.23ID:GAQZImzk
本人がココで聞いてる訳じゃないし放置だろ
0906デフォルトの名無しさん2016/05/02(月) 13:17:33.15ID:YMDS87Sk
ここで聞かれても困る せめてマ板に
0907デフォルトの名無しさん2016/05/02(月) 15:44:19.90ID:IfsZ2QOP
本人が書いているのはzakzak掲示板なんだから、
そこに書いてやれよ。
そこしか見てないだろう
0908マルマイケル ◆SpT0vOJDD4oz 2016/05/02(月) 22:22:49.02ID:mtf1Pv4w
float型って用途あるのかなって思ったんですけど小数計算において
double使わずfloat使うってメリットあるんですか?
0909デフォルトの名無しさん2016/05/02(月) 22:37:51.59ID:IfsZ2QOP
中々良い質問だ
この議論でスレが埋まるのではないか
0910デフォルトの名無しさん2016/05/02(月) 23:53:47.59ID:vR4NgSd7
消費税は免税業者の場合は課税仕入れの控除ができなくなるから
まるまる儲けってのも本当はおかしいけどね

売り上げ一千万円未満ならたいしたことない
まあ、仕入れがほとんどない業態なら儲けにはなるか

基本的に(課税売上ー課税仕入れ)×消費税率やから
0911デフォルトの名無しさん2016/05/03(火) 00:08:27.41ID:5/T8XYwh
おかしいというなら、輸出業者への戻し税
製造工程にかかわった全企業に還元してないだろう
0912デフォルトの名無しさん2016/05/03(火) 00:11:36.12ID:08rY3gPr
>>911
あれは製造時点まで積み上がった課税仕入れの戻し
0913デフォルトの名無しさん2016/05/03(火) 00:21:12.21ID:OkUA5KxL
>>292
VMWAREみたいなソフトを作りたいですが、時間かかりますか?
0914デフォルトの名無しさん2016/05/03(火) 00:36:27.85ID:0Mi+2tJe
バカインタビュアー:「売り上げ1000万以下だと消費税を納めなくてもいいんですが、どう思いますか?」
仕込みと思われる通行人:「あらまぁ。それじゃ私たちが納めた消費税まるまるもらっちゃうの?ひどい話ね。」
というインチキテレビを見ていると、まるまる儲ける という発想が出てくるのではないだろうか?
0915デフォルトの名無しさん2016/05/03(火) 00:48:11.45ID:5/T8XYwh
業種によっては仕入れほぼ0って言うのもあるからね
0916デフォルトの名無しさん2016/05/03(火) 00:55:21.96ID:6NKlaeyL
スレ違いだから余所でやれ
0917デフォルトの名無しさん2016/05/03(火) 00:58:41.64ID:WwILnE98
じゃあCに戻そう


//┏┳┳┳┳┓
//┣╋╋╋╋┫
//┣╋╋╋╋┫
//┣╋╋╋╋┫
//┣╋╋╋╋┫
//┗┻┻┻┻┛
//上記の6X6の通路を左上から右下へ到達する時に
//同じ場所を通らずにたどり着くルートは何通りあるか?

嫌儲のプログラミングスレで盛り上がってるこの問題
Cの解法だれか書いてみて
C++ならあった
https://ideone.com/gA7yt6
0918デフォルトの名無しさん2016/05/03(火) 19:54:55.79ID:1OXiQfcM
お題スレでやって欲しい気もするが
ここで始めるのか?
0919デフォルトの名無しさん2016/05/03(火) 20:34:29.66ID:vTjz5YiN
こんなんプログラミングの問題じゃないだろ
0920デフォルトの名無しさん2016/05/03(火) 20:47:51.22ID:1OXiQfcM
では宿題スレに課題提供してやって
0921デフォルトの名無しさん2016/05/03(火) 21:09:38.39ID:ZU3oWcCD
ぶっちゃけc言語ってさ
難しい概念がポインタぐらいしかないしさ
オブジェクト指向と比べて簡単じゃね?
プログラミング言語の中でも単純なほうだろ
0922デフォルトの名無しさん2016/05/03(火) 21:37:08.24ID:ycNDa31R
でっていう
0923デフォルトの名無しさん2016/05/03(火) 22:13:37.26ID:LGUko+RS
>>908
有る場合もあるし、無い場合もある。
0924デフォルトの名無しさん2016/05/03(火) 22:15:21.41ID:LGUko+RS
>>921
Cはアセンブラを便利にしただけの様な物。
0925デフォルトの名無しさん2016/05/04(水) 01:37:27.93ID:xW6MhDte
>>921
> 簡単じゃね?
何が簡単なの?
0926デフォルトの名無しさん2016/05/04(水) 02:18:38.97ID:VTHyhTWb
言語仕様は単純簡単で覚えやすいけど、何かを作るのは難しい。
難しいって言うか、めんどくさいって言う方が適切かも。
0927デフォルトの名無しさん2016/05/04(水) 07:22:06.14ID:3gr5ld3e
言語仕様簡単か?

あの意味不明なポインタ構文とかいつ直るの。
個人的に変数とかの定義時は型の方に寄せろよ。
ポインタを返すんだから。

未定義処理が多いくせに、地味に糖衣構文あったりして、たまにやるとなんだよこれってなるわ。
0928デフォルトの名無しさん2016/05/04(水) 09:20:32.60ID:wjUC1pj0
それはお前が凡人であるからそう思うだけ
Cを作った人たちは天才だったので
宣言と実際に使うときの見た目だけ合わせるという離れ業をやってのけた
ふつうは絶対こんなことは思いもつかない、天才的
凡人は、
型名 変数名;
という風に書くという、自分たちの作ったルールに引っ張られて
型名の方に細工しようと考える
まさか変数名のほうに「*」を付けようなどということは思いもつかない
すごいね
0929デフォルトの名無しさん2016/05/04(水) 09:29:32.20ID:U08ccE2Z
何が天才だよ
cみたいな、なんの制約も無い言語仕様なら誰でも作るわ
0930デフォルトの名無しさん2016/05/04(水) 09:55:23.53ID:wjUC1pj0
で、君が言語を作ったとして、ポインタの宣言で、変数名の方に「*」を付けようと考える?
ふつうはそうは考えない
0931デフォルトの名無しさん2016/05/04(水) 16:39:34.38ID:0wPtL/Lt
typedef じゃだめなの?
0932デフォルトの名無しさん2016/05/04(水) 17:30:10.82ID:UZMKRODU
そういうくだらない言語仕様に凝りたいんなら c++ でもやりゃいいんだよ。
0933片山博文MZ ◆T6xkBnTXz7B0 2016/05/05(木) 01:19:10.87ID:Oq7RlKiI
plain Cはほとんどocamlに支配されている。
武器を持たずに戦うのは無謀で危険。
0934デフォルトの名無しさん2016/05/05(木) 06:53:41.22ID:tobW131P
ポインタのポインタって、どういう時に使うんですか?
0935デフォルトの名無しさん2016/05/05(木) 07:09:56.36ID:hRlWJ7Nn
戻り値ではなく、引数を書き換えて戻したいとき
int を突込んで戻したい → 引数を int * に
char* を突込んで戻したい → 引数を char ** に

void foo1(int *a) { *a = 1; }
void foo2(char **p) { *p = malloc(1); }
0936デフォルトの名無しさん2016/05/05(木) 08:03:32.64ID:l2iYxkK+
int main(int argc, char *argv[]) の *argv[] は
内部的には char **argv だから「『charへのポインタ』へのポインタ」。

使うときに強く意識する必要はないんだけどね。
0937デフォルトの名無しさん2016/05/05(木) 10:15:39.04ID:lAw+TM4Q
ポインタのポインタのポインタって、どういう時に使うんですか?
0938デフォルトの名無しさん2016/05/05(木) 10:22:43.45ID:qzGbsflZ
ポインタのポインタを引数で返したい時
0939デフォルトの名無しさん2016/05/05(木) 10:26:09.36ID:lAw+TM4Q
今回はなぜコードなしなんですか?
0940デフォルトの名無しさん2016/05/05(木) 11:22:33.76ID:/d0bofMt
そこまでいくと他にも情報が必要で構造体使うから実用的でない。
0941デフォルトの名無しさん2016/05/05(木) 12:18:14.62ID:ZZV12Kuj
実用性があるか否かは、論点が変わってんじゃんw
0942デフォルトの名無しさん2016/05/05(木) 12:48:46.05ID:aJrsnmyH
>>934
#include <stdio.h>
int main(int argc, char **argv)
{
while (*argv) {
while (**argv) {
printf("%c", **argv)
(*argv)++;
}
putchar('\n');
argv++;
}
return 0;
}

ポインタを学習するのに最適なコード
gcc -S test.cでおk
0943デフォルトの名無しさん2016/05/05(木) 12:51:26.44ID:M3xx0KzK
>>942
ポインタの学習で2重ポインタにする意味がわかんねぇんだよ
それとも普段2重ポインタ使うようなクソコード書いてんの?
0944デフォルトの名無しさん2016/05/05(木) 13:04:22.44ID:Sd1mMrNq
誰も意味があるか否かなんて問うてないじゃんw
わいてんのか?
0945デフォルトの名無しさん2016/05/05(木) 13:09:11.05ID:ztPvWGx6
>どういう時に使うんですか?
>今回はなぜコードなしなんですか?
ソースを要求していないから。
要求していないのについてくるのが当たり前だと思っているあたりが朝鮮人ぽいな。
0946デフォルトの名無しさん2016/05/05(木) 13:12:06.10ID:xYG36dS/
>>942
さすがにこういうの貼るときには、
一度ちゃんと動くのを確認してから、それをコピペしろよ
0947デフォルトの名無しさん2016/05/05(木) 13:12:41.92ID:M3xx0KzK
( ID:aJrsnmyH == ID:Sd1mMrNq ) ? shine : shine
0948デフォルトの名無しさん2016/05/05(木) 14:43:32.75ID:46+7SZaB
>>943
連想配列(例えばハッシュテーブル)や自己参照構造体(連結リストや二分木など)を利用したデータ構造をC言語で実装しようとすれば
自然に多重ポインタを使うようになる
例えば>>917の経路探索とかの場面でvector型のコンテナが使えないC言語だと自分でポインタ駆使して探索木を構築する必要がある
コード起こすのは面倒くさいからやらないけど、多分 多重ポインタを使うことになると思う
0949 ◆QZaw55cn4c 2016/05/05(木) 18:30:56.32ID:Nzn3CJv4
>>948
ニ分木や連結リストぐらいなら二重ポインタはいらないよ
0950デフォルトの名無しさん2016/05/05(木) 18:57:05.23ID:46+7SZaB
>>949
うん、単純な場合だと必要ない
ただ>>917の場合、連結リストそのものが多重構造になるような気がしてる
最短経路と違ってすべての経路というのが地味に面倒くさい
後戻りの方向のルート探索の部分二重ポインタ使わなくていけるかな?
C++の解法でもかなり強引な方法使っているしね
まあ実際にコード組んでないから分からんけどね
0951デフォルトの名無しさん2016/05/05(木) 22:31:35.58ID:YJJ4THJY
>>938
0:*send
1:*receive
2:*sleep
のように定義しておくと便利で高速だろ?
テカ、特権リングへの遷移とか知らんわな
0952デフォルトの名無しさん2016/05/07(土) 22:04:42.69ID:tZzPlnjS
教えて

カンマ演算子について参考書には↓のように記述している
(1)左から右に評価される
(2)コンマで区切られた式の並びが返す値は右端にある式の値
(3)for構造で複数の変数を使用するときによく使われる

(3)の例:
for(i=1, j=10 ; i <= j ; i++, j--)
printf("i=%d, j=%d", i, j);

【疑問】
(1), (2)までの説明からすると(3)の例のi=1とかi++とかが破棄されるんじゃないの
って思うんだけど実際に動かすとi=1もi++も実行される

間違ったイメージを持ってるんだと思うけどそれが何かわからん
頼む
0953 ◆QZaw55cn4c 2016/05/07(土) 22:51:04.32ID:5sx0uiPg
>>952
(3) の例では,初期化の i=1, j = 10 の両方は評価実行され,この部分でのコンマ演算子による評価は 10 になる
また,i++, j-- の両方が評価され,コンマ演算子全体の評価値は,デクリメントされる前のj になる
printf() に出てくるコンマは関数の区切りのコンマで,コンマ演算子ではない.
0954デフォルトの名無しさん2016/05/07(土) 23:42:12.72ID:ENlS/GyL
>>952
「i + j」という式はiとjを足した値を返すのと同様に
「i=1, j=10」という式は10を返すってだけ

「i=1」という式は代入演算子の副作用としてiに1を代入するけど
代入した値を返すのが演算子としての本作用
0955デフォルトの名無しさん2016/05/08(日) 00:20:52.65ID:7UXL6x+W
>>952
> (1), (2)までの説明からすると(3)の例のi=1とかi++とかが破棄されるんじゃないの
i = 1 を実行した「結果」が捨てられるだけで実行自体は行われる
ってこと
0956デフォルトの名無しさん2016/05/08(日) 04:19:09.75ID:Hppc22ou
初心者ですprintfとかの引数って理論上最大いくつとれるの?環境依存?仕様上決まってんの?
可変長引数だと簡単にいくらでもとれそうだけどintかなんかの限界までとか?メモリの限界?
ただの興味だけど詳しい人教えて
0957デフォルトの名無しさん2016/05/08(日) 08:42:15.34ID:8MWByAdJ
なんで素人ってそういうどうでもいいことに疑問を持つんだろう
0958デフォルトの名無しさん2016/05/08(日) 11:35:15.36ID:UKRiNMsM
>>952
Cの特徴として、式そのものも値を持つ
カンマで区切ると、一番右の式の値以外の式の値が破棄される
式の値というのは変数の値ではない
0959デフォルトの名無しさん2016/05/08(日) 11:36:03.26ID:UKRiNMsM
>>957
初心者はそれをどうでもいいと判断できないからだろ
0960デフォルトの名無しさん2016/05/08(日) 11:42:04.76ID:Q2Wi/60e
皆で揃いも揃って同じことについて延々といつまでもレスし続けるのは何故?
他のレスの言葉足らずの部分を補足するとかいうレベルじゃないぞ
0961デフォルトの名無しさん2016/05/08(日) 11:45:32.84ID:b7gQy6O3
>>956
実装依存。
少なくとも127個はOK
0962デフォルトの名無しさん2016/05/08(日) 17:11:05.10ID:/CtBZ1/5
>>959
あ?どうでもいいことだから2chなんかで聞いたんだろうが
ほんと最近の2chの専門板ってちょっと難しいことにはとんちんかんなこと言ってくるし
誰でもわかるググればわかるレベルのことにはここぞとばかりに馬鹿が延々レスつける感じ
0963デフォルトの名無しさん2016/05/08(日) 17:42:37.84ID:MJgt2i9H
>>953, >>954, >>955, >>958
カンマ演算子としてのの戻り値と変数に格納される値が
ごっちゃになってたってことかな

返レスthx
専門板なのに流れはえーのな
0964デフォルトの名無しさん2016/05/08(日) 22:11:19.26ID:06Doni3l
割と面白い内容だと思ったけど、どうでもいいことなのか。
0965デフォルトの名無しさん2016/05/08(日) 22:24:58.68ID:s0N92ljE
現実味の無い話になる程、面白いかどうかは感性だけの問題になるから
面白いと思う本人だけが楽しめばいい
他人のオナニーに付き合うアホは滅多にいない
0966デフォルトの名無しさん2016/05/08(日) 23:53:34.23ID:Fav8VFml
>>961
ありがとう これが正解みたいだねしゃーないからC99読んで確認とったC11は知らん
>>964
実用上どうでもいいのは確かでしょ 面白い内容だと思ったなら
たまには仕様読むのもいいかもほかにもいろいろ書いてあって面白かったぞ
0967デフォルトの名無しさん2016/05/09(月) 04:07:41.17ID:uOjemUjO
日本語でも英語でも、言語学習では文章を書いたり会話したり出来るようになることが目的であって文法を学ぶのはそのための手段
プログラム言語でも、問題を解決するためにプログラムを書くことが目的であって仕様を読むのはそのための手段
人によるけど仕様そのものが面白いと思うのはただの言語オタだな、あるいはプログラム言語そのものの開発者か
0968デフォルトの名無しさん2016/05/09(月) 04:18:38.67ID:iJ6TeaPm
説明書を読まずにゲームする人か。
0969デフォルトの名無しさん2016/05/09(月) 05:08:44.24ID:uOjemUjO
説明書を読むことが面白いと感じるのか?
ゲームをプレイすることが面白いんだろ?
0970デフォルトの名無しさん2016/05/09(月) 05:55:11.77ID:rWBxrsBp
チュートリアルのないゲームを、ろくに興味もなく我流でプレイし始める奴が
たくさんいるからクソコードが世の中に量産されるんですね、わかります。
0971デフォルトの名無しさん2016/05/09(月) 06:20:35.06ID:uOjemUjO
説明書もチュートリアルもゲームのプレイ内容を理解するためのただの手段であって目的ではない
言語の仕様の理解も手段であって目的ではない
そこを取り違えると>>917の書き込みに対して>>919のレスを返すような間抜けが現れる
言語仕様については喜々としてレスを返すが問題解決の方針についてのレスは出来ない
スレのレベル低すぎだろ
0972デフォルトの名無しさん2016/05/09(月) 06:45:15.52ID:viJzCX5w
本来言語とアルゴリズムは分けて考えるべきだからなぁ
アルゴリズムをそれぞれの言語でどう記述するかってだけ
そもそも>>917はスレ違い
0973デフォルトの名無しさん2016/05/09(月) 06:51:07.30ID:6g78ma39
辞書とか辞典を読むのが趣味
って言う奴もいる
視点が狭すぎる
0974デフォルトの名無しさん2016/05/09(月) 06:57:51.24ID:uOjemUjO
まあ、それは分からんでもないが・・・
Qzとかがその典型だな
ただし一般的ではない、だから言語オタと言ったのだ
0975デフォルトの名無しさん2016/05/09(月) 10:30:17.04ID:0w9P8+p9
>>972
アルゴリズムはもうC++で解いたものがあるからいいとしてCで書くとどうなるの?
って話なら別にスレ違いでもないでしょう
0976デフォルトの名無しさん2016/05/09(月) 12:08:44.44ID:9+jy/olk
Cからwindowsのsyslog取得方法ってないですか?
コマンドプロンプトからwmic使ってできないことはないんですが
cmd開くのが煩わしいので…
やっぱりos関係の情報を取得するにはcmdコマンド介さずにというわけには
いかないでしょうか?
0977デフォルトの名無しさん2016/05/09(月) 12:27:45.18ID:bbv3Ed96
syslogってイベントログのこと?
APIで出来んこともないけど、アクセス権がめんどい
0978デフォルトの名無しさん2016/05/09(月) 12:40:29.22ID:R05Gh5Rw
The WMI command-line (WMIC) utility provides a command-line interface for WMI.
0979デフォルトの名無しさん2016/05/09(月) 13:01:29.58ID:noyNIse2
C言語ってC#なんかと比べるとどんなメリットがあるんですか?
C#だと楽にUIを作れるから便利ですよね
0980デフォルトの名無しさん2016/05/09(月) 13:07:36.87ID:0PzUsjdr
小さくて速いのいいプログラムだ。Cは、そんなプログラムに適している。
OSもライブラリもCでかかれてきた。Rubyは、Cでかかれているそうだ
CならたいていどのOSでもどのバージョンでも通用する(Java, Perlも同様)
0981デフォルトの名無しさん2016/05/09(月) 14:45:27.49ID:VjDsz29U
>>980
ツッコミいれてほしいの?
0982デフォルトの名無しさん2016/05/09(月) 14:48:54.71ID:K9w0IuWN
>>976
ps使えよ
0983デフォルトの名無しさん2016/05/09(月) 18:26:18.55ID:8NXZzRJZ
strcpyの扱い方がわからんのやけど教えてくれ。
0984 ◆QZaw55cn4c 2016/05/09(月) 19:23:13.12ID:wim3KaMV
>>974
え?
0985デフォルトの名無しさん2016/05/09(月) 21:33:43.57ID:pzKdLl0R
>>983
string使え
0986デフォルトの名無しさん2016/05/09(月) 22:54:04.01ID:tSgtGV7J
>>984
きゅーずぃーたんまだいきてたの?
0987デフォルトの名無しさん2016/05/09(月) 23:33:43.98ID:8NXZzRJZ
>985

どういう時に使うのかがよくわからん。書き方は知ってるんだけど
どういう場面で使うと良いのか教えてくれ。
0988 ◆QZaw55cn4c 2016/05/10(火) 06:12:30.62ID:HakJiq7i
>>976
きだあきらさんのwinapi散歩道/win32api 散歩道に書いてあった気がする
0989デフォルトの名無しさん2016/05/10(火) 07:18:15.80ID:oz2wxhed
きゅーずぃーーーwwww
0990デフォルトの名無しさん2016/05/10(火) 13:16:13.87ID:3fG5/CbC
次スレ
C言語なら俺に聞け! Part 135(c)2ch.net
http://echo.2ch.net/test/read.cgi/tech/1462853629/
0991デフォルトの名無しさん2016/05/10(火) 13:27:52.52ID:7ZZ0aP+d
偉そうなスレタイだけど、結局誰も教えてくれないのは昔から?
0992デフォルトの名無しさん2016/05/10(火) 13:55:30.08ID:zxnDb8j/
>>991
ごめんよ、C言語の質問にしか答えられないんだ。
0993デフォルトの名無しさん2016/05/10(火) 17:12:46.89ID:/c+E/E1d
>>987
書き方知っているのに
使えないのか。
変わった奴だな。
0994デフォルトの名無しさん2016/05/10(火) 17:28:47.76ID:V1ay1Asb
C#やJavaなど他の言語からC言語に移ってきたのなら、文字列を代入演算子で扱うのに慣れてしまって
関数を使わなければいけない状況というのが想像できないのかも知れない
0995デフォルトの名無しさん2016/05/10(火) 17:45:32.94ID:bh4nZJj2
まず、文字列を掘り下げて正体を掴めよ。
0996デフォルトの名無しさん2016/05/10(火) 19:45:09.87ID:/rfeiIz1
>>994 それか!
Cの文字列に馴染みすぎたせいで思いもよらなんだ。
0997デフォルトの名無しさん2016/05/10(火) 22:18:03.37ID:fu/r74O4
>>991
難しいのはダメだよ。
あと、俺の興味のないのもダメ。
0998デフォルトの名無しさん2016/05/11(水) 10:53:14.06ID:7/pimAAr
なんでも聞いてくれ!
0999デフォルトの名無しさん2016/05/11(水) 11:28:14.61ID:GzlL/1jH
だれもおまえなんかきかねーよw
死ね
1000デフォルトの名無しさん2016/05/11(水) 11:28:18.51ID:Xef87XAV
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 627日 14時間 21分 57秒
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。