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

C言語なら俺に聞け(入門編)Part 127©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん 転載ダメ©2ch.net2015/02/18(水) 16:31:28.31ID:s5Vrc8eg
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 126
http://peace.2ch.net/test/read.cgi/tech/1416882087/
★過去スレ
ttp://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 168代目
http://peace.2ch.net/test/read.cgi/tech/1408962564/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
ttp://codepad.org/
ttp://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
【重要】
当たり前の事ですが、2chではコピペ荒らしは禁止されています
0002デフォルトの名無しさん2015/02/18(水) 17:14:52.16ID:MSDWkKAj
おちんぽみるく出ちゃいましゅ!
0003デフォルトの名無しさん2015/02/18(水) 22:37:37.95ID:mKPExw2H
前スレこっち。

C言語なら俺に聞け(入門編)Part 127 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1416882087/
0004デフォルトの名無しさん2015/02/18(水) 22:38:43.59ID:mKPExw2H
ん、URLは合ってるんだ。スレタイ違いか。
0005デフォルトの名無しさん2015/02/18(水) 23:59:23.06ID:s5Vrc8eg
すまぬスレタイ番号間違えてた
このスレは
C言語なら俺に聞け(入門編)Part 127
です

>>3,4
是正ありがと
0006デフォルトの名無しさん2015/02/19(木) 00:00:18.29ID:fdKBoaCS
すまぬ・・・すまぬ・・・
このスレは
C言語なら俺に聞け(入門編)Part 128
です
0007デフォルトの名無しさん2015/02/19(木) 10:03:51.68ID:uIx5aNyO
fgetc() unsigned char型として読み込みint型として返すとあります
型を読み込んだり、返すのは決まってるんですか?
int型を読み込ませたらどうなる?
0008デフォルトの名無しさん2015/02/19(木) 11:29:40.24ID:MJrK0vGE
型情報なんてものはファイルにもメモリにも含まれてない。ファイルやメモリ上のバイト列をアプリケーションが特定の型として扱うだけ
intが4バイトで、unsigned intが1バイトなら、ファイルにint型の4バイト分が含まれていたとしてもfgetcが読み込むのはその先頭の1バイトだけ
fgetcの戻り値がintなのはEOFを返す必要があるから
一般的な実装では、読み込みに成功したら0〜255の値を返して、失敗したら-1を返す
規格でEOFが-1と定められている訳じゃなかった気がするけど大抵は-1
0009デフォルトの名無しさん2015/02/19(木) 19:42:14.49ID:Bd4FuHqw
コンパイラは何を使われていますか?
0010デフォルトの名無しさん2015/02/19(木) 19:48:22.29ID:n4AyGVYz
>>7
端的に言えば、型が決まってるというのが正しい。
つまり、正しい型を渡すのはプログラマであるあなたの義務であり、
異なった型を渡してはいけない
0011デフォルトの名無しさん2015/02/19(木) 20:18:53.22ID:9sD03d4f
>>7
Cの高水準入出力ライブラリはバイトストリートを読み書きするように作られている

fgetcは1バイト読み込んで、それをunsigned charとして解釈する
という意味
0012デフォルトの名無しさん2015/02/20(金) 10:07:51.14ID:Sv8taarF
>>10>>11
ありがとうございました
0013デフォルトの名無しさん2015/02/25(水) 00:29:55.42ID:4JnJ30Tj
今、あるプロジェクトで、
下記のような定義や構造体等が、
いたるところに散らばっているソフトのメンテをしています。
下記の例はEVENTという項目に対してですが、
度々、PUSHTIMEとかPACEとか新しい項目を追加しなければならず、
結構面倒です。
で、これを、最低限の修正だけで追加ができるような構造にリファクタリングしたいのですが、
どのような構造に変更すれば良いでしょうか。
アドバイスをいただけると嬉しいです。

#define TYPE_EVENT 0xABC0
#define SIZE_EVENT 0x0008
#define ASSERT_TIMEOUT_EVENT 0x40000001
#define ASSERT_CALLBACK_EVENT 0x2000000A

#define SETTING_EVENT ← #ifdef用の定義

typedef enum {
・・・,
ENUM_TYPE_EVENT,
・・・
}enum_app;
0014デフォルトの名無しさん2015/02/25(水) 02:48:16.70ID:tA5EZmVr
>>13
新しい項目を追加の意味がよく分からないけど
***_EVENT の記述を ***_PUSHTIME や ***_PACE にまとめて変更したいということ?
0015デフォルトの名無しさん2015/02/25(水) 03:18:14.82ID:dIUOdbVq
>>13
PUSHTIME_EVENT や PACE_EVENT を追加したい、ということかな?
結構面倒ということは、追加だけではなくて再コンパイルの度に追加/削除する項目が発生するのかな?
0016デフォルトの名無しさん2015/02/25(水) 03:41:46.41ID:XgB9J20n
>>13
至るところに散らばっているというのがよくわからない
定義ファイルが、関連するヘッダー以外でスパゲッティになっているのか
他の人も混乱しているし、もう少し情報を整理してくれ
0017デフォルトの名無しさん2015/02/25(水) 06:40:57.00ID:wedcw/2g
>>13
単に共通のヘッダーにまとめて、すべてのcファイルの先頭でインクルードするだけの様な気がするけどな
質問の意図がよくわからん
0018デフォルトの名無しさん2015/02/25(水) 07:17:40.52ID:4JnJ30Tj
>>14
>>15
変更じゃなく追加です。
_EVENTのところを_PACEに変更した同じような定義を多数追加しなければならないのです。
削除は発生しません。

>>16
ASSERT_…はassert.cでしか使わないのでassert.hに定義してあるし、
TYPE_EVENTはmain.hに、
SETTING_EVENTはdefine.hに、
enum_appはfile.cに定義してあるって感じです。

>>17
まとめればいいだけ、なのかなぁ?
まとめたとしても、数が多いので、
できればEVENTと設定値を一括して設定したいんです。
0019デフォルトの名無しさん2015/02/25(水) 09:26:46.02ID:rorXnPjF
>>13
ENUM_TYPE_EVENTが良くわからないけど、こういう事か?
#define DEFINE_HOGE(prefix, name, val) enum { prefix ## _ ## name = val};
#define DEFINE_TYPE(name, val) DEFINE_HOGE(TYPE, name, val)
#define DEFINE_SIZE(name, val) DEFINE_HOGE(SIZE, name, val)
#define DEFINE_ASSERT(type, name, val) DEFINE_HOGE(ASSERT_ ## type, name, val)
#define DEFINE_ATIMEOUT(name, val) DEFINE_ASSERT(TIMEOUT, name, val)
#define DEFINE_ACALLBACK(name, val) DEFINE_ASSERT(CALLBACK, name, val)
#define DEFINE_13(name,type,size,timeo,callback) \
DEFINE_TYPE(name, type) \
DEFINE_SIZE(name, size) \
DEFINE_ATIMEOUT(name, timeo) \
DEFINE_ACALLBACK(name, callback)
DEFINE_13(EVENT, 0xABC0, 0x0008, 0x40000001, 0x2000000A)

あるいは
#define DEFINE_HOGE(prefix, name, val) prefix ## _ ## name = val,
#define DEFINE_TYPE(name, val) DEFINE_HOGE(TYPE, name, val)
#define DEFINE_SIZE(name, val) DEFINE_HOGE(SIZE, name, val)
#define DEFINE_ASSERT(type, name, val) DEFINE_HOGE(ASSERT_ ## type, name, val)
#define DEFINE_ATIMEOUT(name, val) DEFINE_ASSERT(TIMEOUT, name, val)
#define DEFINE_ACALLBACK(name, val) DEFINE_ASSERT(CALLBACK, name, val)
#define DEFINE_13(name,type,size,timeo,callback) \
DEFINE_TYPE(name, type) \
DEFINE_SIZE(name, size) \
DEFINE_ATIMEOUT(name, timeo) \
DEFINE_ACALLBACK(name, callback) \
ENUM_TYPE_ ## name,
enum {
DEFINE_13(EVENT, 0xABC0, 0x0008, 0x40000001, 0x2000000A)
DEFINE_13(PACE, 0xABC1, 0x0009, 0x40000002, 0x2000000B)
};
0020デフォルトの名無しさん2015/02/25(水) 11:18:51.13ID:Tb0WqXDF
>>13
Cソースとそのヘッダファイルをどういう目的で作られているのか知っている上で、
追加はただ単に面倒だから「リファクタング」したいのか、なんでこんなにヘッダファイル
やdefineが散らばっているのかよくわかないし、追加は面倒なので、「リファクタング」
するのか、どっちなんだろう
0021デフォルトの名無しさん2015/02/25(水) 23:14:31.25ID:4JnJ30Tj
13です。
まず、
>>20
一応、Cソースとそのヘッダファイルがどういう目的で作られているのか知っているつもりです。で、追加が面倒なので「リファクタング」したいというところです。
そして
>>19
早速のご回答ありがとうございます。どちらもうまく動きました。
これで、とりあえず、定義の一括追加が出来そうです。
一行目のenum { prefix ## _ ## name = val};
のenumのところが全然気がつかなくて、困ってました。

それで、申し訳ないですが追加の質問です.
たとえば、19さんのだと
printf("type=%#x\n",TYPE_EVENT);
printf("size=%#x\n",SIZE_EVENT);
が可能なのは確認したのですが、さらに次のステップで、
for(i=0;i<n;i++){
printf("type=%#x\n",TYPE_XXX);
printf("size=%#x\n",SIZE_XXX);
}
で、EVENTやNAMEやPACEの出力を可能にしたいのですが
なにか良い方法ってありますでしょうか。(これが13でENUM_TYPE_EVENTを出した理由です。)

また、これと同じかもしれませんが、
int func(enum_app a)
という関数内で、引数がENUM_TYPE_EVENTみたいなEVENTを使っている場合、
printf("type=%#x\n",TYPE_EVENT);
を実行、引数がENUM_TYPE_PACEみたいなPACEを使っている場合、
printf("type=%#x\n",TYPE_PACE);
を実行するっていうのも実現したいのですがどうしたらよいのでしょうか。
switchは使わずに(関数部に追加なし)でです。
よろしくお願いします。
0022デフォルトの名無しさん2015/02/26(木) 11:17:09.45ID:vBjTX7Yd
>>21
出来ない事は無いけど、ここまでやると理解するのが困難かも(すなわち保守性が低下)。
http://ideone.com/RmNiuI

今時、マクロで頑張っていいのは小学生まで。と言われるかもね。
ビルドプロセス中でソースファイルを生成した方が良いと思う。
0023デフォルトの名無しさん2015/02/26(木) 12:53:49.44ID:s/nViNBB
13です。

>>22
素早い対応ありがとうございます。
やりたい事そのものです。凄いですね〜
どうしたらこういうのを書けるようになるのか...
今、示して頂いたソースの理解の途中です。

で、申し訳ないのですが更に質問させてください。
ちょっと試してみたんですけど、eventとかpaceとかの項目は7つまでしか駄目ですか?実際だと、項目が100とか200とかあるので、それに対応できたら嬉しいなと思っているのですが。

> ビルドプロセス中でソースファイルを生成した方が良いと思う。

全く理解できません。どうやるんでしょう...
0024デフォルトの名無しさん2015/02/26(木) 13:27:10.68ID:ZItupQSx
そもそも修正が面倒ってことから始まってるけど
初心者が小細工覚えるぐらいなら、面倒くさがらずやればいいだけ
0025デフォルトの名無しさん2015/02/26(木) 15:16:34.44ID:vBjTX7Yd
>>23
↓これと
> #define PP_APPLY_7(m, a, ...) EXPAND(m a) EXPAND(PP_APPLY_6(m, __VA_ARGS__))
↓これをふやす。
> #define PP_NARGS(...) \
> EXPAND(PP_NARGS_(__VA_ARGS__,7,6,5,4,3,2,1,0))
> #define PP_NARGS_(x1,x2,x3,x4,x5,x6,x7,N,...) N
C99ではマクロ引数は127個以上をサポートする事になってるから
100個まではOKで、その先はコンパイラの実装依存

> 全く理解できません。どうやるんでしょう...
マクロで展開している部分を、簡単なプログラム(スクリプトなど)を作って
実際に展開したソースファイルを生成する。
100個以上あるなら、オレはこっちの方法を選択する。

>>24
欠陥数は修正量に比例するので、修正量を減らそうとする努力は正しい。
100-200あるならマクロで誤魔化すのが正しいとは思わないが。
0026デフォルトの名無しさん2015/02/26(木) 15:38:09.08ID:8OgMgtBc
もともと、定義文がいたるところに散らばっているので修正が面倒とか言ってなかったか
複雑なマクロはいいけど、何処に記述するつもりなんだ
0027デフォルトの名無しさん2015/02/26(木) 23:15:21.09ID:WLYHTxX+
さあ?
質問されてない事を無理にほじくる必要あるのか?
一般的な回答があるような事でも無いし。
0028デフォルトの名無しさん2015/02/26(木) 23:48:58.08ID:opHYgR9M
13です。

>>25
ご回答ありがとうございました。
フォローまでしていただいてすみません。
内容はだいたいわかりました。大変参考になりました。
実装依存だとすると、ちょっと考え直さなきゃいけないかもしれませんが。

> ビルドプロセス中でソースファイルを生成した方が良いと思う。
この件についてですが、
今、eventとかpaceとかの項目の資料にexcelがあるんですが、
この内容から、VBAとか使って、ヘッダファイルを作成するみたいなイメージでOKですか?


>>24
>>26
状況に関しては、結構ぼかした書き方してるので分かりにくかったかもしれません。
まぁ、初心者みたいな実力しかないかもしれないので、
私がやるなら今まで通り面倒くさがらずやればいいのですが…
故あって、変更箇所が少なくなるようにしなきゃならないってことです。
そういうわけですので、ご理解を。
0029デフォルトの名無しさん2015/02/27(金) 08:37:37.19ID:osUYH5VH
>>28
>今、eventとかpaceとかの項目の資料にexcelがあるんですが、
>この内容から、VBAとか使って、ヘッダファイルを作成するみたいなイメージでOKですか?
そのとおり。
0030デフォルトの名無しさん2015/02/27(金) 12:12:38.58ID:UN7PC5Ib
>>29
Excelからコンパイラ呼んでコンパイルは出来そうだけど、デバッグはチャレンジングだね^^
0031デフォルトの名無しさん2015/02/27(金) 12:37:02.97ID:BBkUxvz0
Excelからコンパイルやデバッグする訳ではないと思うけど…
元の資料のフォーマットにもよるけど、ヘッダファイル吐き出すだけなら
VBA どころか Excel の文字列関数だけでも出来る。
適当にdefine文の形に整形してtxt形式で書き出した後、ファイル名をリネームすればいい。
0032デフォルトの名無しさん2015/02/27(金) 20:51:43.14ID:UN7PC5Ib
ちょっと調べたけど、Excelの外部プロセス起動は非同期なんだね。だからデバッグは無理

しかし、Excelからwindows APIを呼んでプロセス管理が出来るようだ。

まさか、EXCELがIDEになる日が来ようとはね。
0033デフォルトの名無しさん2015/02/27(金) 21:18:00.96ID:osUYH5VH
ID:UN7PC5Ibのようなバカが存在するとは吃驚だよ
0034デフォルトの名無しさん2015/02/27(金) 22:34:15.29ID:qQboNu8a
13です。

>>29
わかりました。それならなんとかできそうです。

>>31
文字列関数でもできるんですね。確かに。勉強になります。
0035デフォルトの名無しさん2015/02/28(土) 05:25:29.96ID:lqViBHQ7
>>33
どう見てもネタだろ
0036デフォルトの名無しさん2015/02/28(土) 14:43:14.77ID:WGLq9h36
これで「べき乗」が求められるのですが、いまいち流れがわかりません。

#include <stdio.h>

int main(void)
{
int a, b; // 入力値
int r; // 出力値

int s,t; // 一時変数

// 初期値
a = 3, b = 10, r = 1;

s = a;
t = b;

while ( t ) {
if ( t % 2 == 1 ) {
r = r * s;
}
s = s * s;
t /= 2;
}
printf ( "%d\n", r );

return 0;
}
0037デフォルトの名無しさん2015/02/28(土) 14:50:29.78ID:a8LcTuNJ
どこがわからないの?
それとも結果が違う?
0038デフォルトの名無しさん2015/02/28(土) 16:39:05.15ID:0XiMknGf
a^bでbが偶数のときと奇数の時で以下の考え方で計算してる

b=2x (偶数)のとき
a^b=a^(2x)=(a^2)^x

b=2x+1 (奇数)のとき
a^b=a^(2x+1)=a^(2x)*a=((a^2)^x)*a
0039デフォルトの名無しさん2015/02/28(土) 16:42:16.22ID:0XiMknGf
と思ったらちょっと違った

bの各bitについて1になっているところを探し
n bit目はa^(2^n)に対応するのでそれを掛け算してる

例)a^13=a^(0b1101)=a^8*a^4*a^1
0040デフォルトの名無しさん2015/02/28(土) 17:11:28.99ID:9yhsLsZ+
n bit目は a^n を掛けていると思うが
0041デフォルトの名無しさん2015/02/28(土) 17:24:02.92ID:9yhsLsZ+
いやa^(2^n)で合ってた
0042デフォルトの名無しさん2015/02/28(土) 17:27:28.30ID:WGZr43/X
>>39 が正解か
0043デフォルトの名無しさん2015/02/28(土) 20:38:35.15ID:tEWSuC0B
多次元配列の[0][0]から[2][4]まで順番に表示したいのですが
これで行けると思ったコードが[0][0]しか表示してくれません
どこがおかしいのか教えてください

#include<stdio.h>

int main()
{
int h[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}},
i,x;

for (i = 0, x = 0; i < 3; i++){
printf ( "h[%d][%d] = %d\n" ,x,i,h[x][i]);

if (i = 2){
if (x = 4)break;
i = 0;
x++;
}

}
return 0;

}
0044デフォルトの名無しさん2015/02/28(土) 20:46:56.63ID:j5d61nKt
>>43
四行目の変数間違ってるよ
0045デフォルトの名無しさん2015/02/28(土) 20:50:47.56ID:0XiMknGf
>>43
・if文の条件式が代入になってる ・・・[0][0]しか表示されない原因
・xとiの最大値が逆じゃね
・ループの途中でi=0にしても、ループ先頭に戻るときにi++されて1から始まってしまってる
 →こういう場合は通常for文を2重にする
http://ideone.com/wYaQrl
0046432015/02/28(土) 21:09:00.16ID:tEWSuC0B
返信ありがとうございます
言われてから直していくと色々とおかしい事に気づきました
forの中にfor入れないと1ケタ目なんか必ず1から始まってしまうし
なんで気づかなかったのか
0047デフォルトの名無しさん2015/02/28(土) 22:25:19.99ID:dmRW1rjY
バグの原因じゃなくてバグの原因を調べる方法を知るべき
0048デフォルトの名無しさん2015/02/28(土) 22:57:13.74ID:/ATzd4Ck
>>46
クマのぬいぐるみ相手に声を出してコード読みすると気付くよ
0049デフォルトの名無しさん2015/02/28(土) 23:30:09.34ID:tEWSuC0B
=と==なんて間違えないよと思ってました
それはまだ良いとして他が色々ひどくて
自分でもナンジャコリャと思います
0050デフォルトの名無しさん2015/03/01(日) 09:00:52.38ID:5830VcfR
どうでもいいけど
C#だと、if()の中身の演算結果が真偽値にならないとコンパイルエラーになるな
0051デフォルトの名無しさん2015/03/01(日) 09:16:16.15ID:uDqKnlJ3
戻りが void の関数を if の条件式に置きゃCでもエラーになるよ

void foo(void);
if (foo()) { .... }

値を真偽値に拡張するから通るってだけ。

なお、コンパイラによっては警告を出すこともある
(そこ 代入の = で良いの? と)
0052デフォルトの名無しさん2015/03/01(日) 09:47:37.33ID:NOkwW/0Y
で、また=で何が返るかの話で炎上するんだな?w
0053デフォルトの名無しさん2015/03/01(日) 10:09:57.29ID:5nggEOp/
>>52
何が返るの?
0054デフォルトの名無しさん2015/03/01(日) 11:12:14.21ID:3cvOwqSs
規格書読んだことなくて、該当箇所を示されても読めない上に、己が何を
理解していないか理解していないバカが、知ったかぶって乱入してきただけ。
↓こいつだ。
http://peace.2ch.net/test/read.cgi/tech/1408709181/262
> >>260
> 今までの議論のような曖昧さをなくす意味では後者の方が適切な場合もある。
> ただし代入文を2つに分けた場合、途中で外部割り込み処理が発生した時に、
> 不適切な処理を行うと v が書き換えられて挙動が変わるリスクもある。
> どちらにも長短はある。

>>53
Cだったら
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.
0055デフォルトの名無しさん2015/03/01(日) 11:44:44.95ID:JKT6c3ld
うーん、マルチスレッドだと充分起こり得る状況だと思うけどな。
Cの規格書では複数スレッドの共有変数に対する排他制御については考慮していないし実装依存の部分だろう、これは。
0056デフォルトの名無しさん2015/03/01(日) 16:31:14.50ID:3cvOwqSs
>>55
文脈から、代入文を2つに分けた時にリスクがあり、分けない場合はリスクが無いと主張しているわけだが、
いかなる理由によるものか?
0057デフォルトの名無しさん2015/03/01(日) 18:46:09.02ID:NT2Bvo8K
分けない場合に完全にリスクが無くなる訳ではないのだろうけれど…
クリティカルセクションをなるべく局所化させて管理するのはマルチスレッドプログラムの基本だろう。
まあ完全に保証される訳でもなく処理系の実装依存ではあるけれど、
分けない方がコンパイラの最適化の働きによるリスクの低減は期待できる。
もっとも正しくはミューテックスの使用などを考えるべきではある。
0058デフォルトの名無しさん2015/03/01(日) 19:18:14.72ID:3cvOwqSs
> まあ完全に保証される訳でもなく処理系の実装依存ではあるけれど、
そのマヌケなコンパイラはどこのなんというコンパイラなんだ? 実例なんだよな。
しかも排他制御せずに解決した気になってるらしい。(大爆笑)

http://peace.2ch.net/test/read.cgi/tech/1408709181/275

いや、割り込み云々とかは実際の経験からの話だがな。
外部入力割り込みとかは、ノイズフィルタを通過してくるような想定外の外部ノイズに対しては
意図しないレベルの多重割り込みを発生させて深刻な問題を引き起こす可能性がある。
ハード設計の不具合まで想定できなかった。
その時の例を挙げただけだ。
005955,572015/03/01(日) 19:56:49.11ID:m+/Lv6QW
>>58
何に噛みついているのか知らないがお前が大馬鹿だと言うことは分かった。
これ以上相手にしていられないのでもうこれ以上書き込まないよ。
勝手に自分だけの世界で生きてろ。
0060デフォルトの名無しさん2015/03/01(日) 20:14:58.26ID:0aLofY9O
>>58
もともとこれを言ってるだけじゃないの?
代入2回が2命令になる環境とコードだとして
前者だと間の割り込みでvが変わってもx==rになるが後者はそうならない

http://peace.2ch.net/test/read.cgi/tech/1408709181/272
272 名前:デフォルトの名無しさん[sage] 投稿日:2015/02/22(日) 00:02:54.13 ID:xxw4z/3i
> x=(r=v) を x=v; r=v; って書かないのはなんか利点があったっけ?
前者と後者は等価ではない
x=(r=v)はr=v; x=r;
0061デフォルトの名無しさん2015/03/01(日) 21:26:17.13ID:FCGAgKcp
割禁管理ぐらいしっかりやれ。
0062デフォルトの名無しさん2015/03/01(日) 21:31:14.41ID:0aLofY9O
なんか>>52のとおりになってるのでやめるw
0063デフォルトの名無しさん2015/03/01(日) 21:36:07.28ID:3cvOwqSs
>>59
向こうのスレでも指摘したが、お前は話題についてこれないんだから
無理して首突っ込むな。

>>60
x=(r=v)を2つにわけるとr=v; x=r;
r=v; 【ここでvが変わる】 x=r;
x==rであってるだろ。

笑うポイントが理解できたか? できたら大爆笑しよう。
http://peace.2ch.net/test/read.cgi/tech/1408709181/262
> ただし代入文を2つに分けた場合、途中で外部割り込み処理が発生した時に、
> 不適切な処理を行うと v が書き換えられて挙動が変わるリスクもある。
0064デフォルトの名無しさん2015/03/01(日) 22:28:12.30ID:3GjEpfzR
なんか荒れてるな
Qzでも現れたのか?
0065デフォルトの名無しさん2015/03/02(月) 08:53:45.07ID:Tl5O/RWa
>>52
釣果にワロタw
0066デフォルトの名無しさん2015/03/03(火) 00:03:39.85ID:WujRzXq4
今C言語を学ぼうとミクと学ぶC言語というのを必死に見てるんですが
他にも始めたばかりのやつでも理解できる動画ないですか?
長くはなると思いますが結果的にゲームの解析とかしてみたいです・・
0067デフォルトの名無しさん2015/03/03(火) 07:53:25.19ID:NGem5+wn
解析ならアセンブラ。
0068デフォルトの名無しさん2015/03/03(火) 09:18:25.04ID:E19vPPe8
アセンブリじゃね?
0069デフォルトの名無しさん2015/03/03(火) 09:29:22.48ID:NGem5+wn
アセンブリ言語もアセンブルルーツも総合してアセンブラと称するのが今の主流。
0070デフォルトの名無しさん2015/03/03(火) 10:01:18.09ID:6XIoSTF0
なんだ、アセンブルルーツって。キンタ・クンテか?
0071デフォルトの名無しさん2015/03/03(火) 11:35:03.04ID:XphfqKai
はいはい重箱重箱
0072デフォルトの名無しさん2015/03/03(火) 19:09:37.17ID:WujRzXq4
>>67
ありがとうございます
C言語かっ飛ばしてアセンブリ学習しても分かるものでしょうか?
ミクと学ぶC言語って動画見ながらエディタで何回か練習した程度の知識しかC言語はついてないんですが
0073デフォルトの名無しさん2015/03/03(火) 19:13:48.38ID:FZjEtlV6
>>66
やねうらおとかいう人の書いた本でそういうのあったような。
ただしとっくに絶版。
0074デフォルトの名無しさん2015/03/03(火) 20:59:43.60ID:UEayxB4v
>72
改造のレベルによる。
洋ゲーのMOD類ならプログラム知識は要らない。
セーブデータ改造ならCで簡単なデータ操作とファイル入出力が理解&解析してればなんとかなる。
クラックや無敵化等はアセンブラ必須でCや多言語もそれなりに使えるレベルじゃないと無理。
0075デフォルトの名無しさん2015/03/03(火) 22:02:23.24ID:WujRzXq4
>>74
ありがとうございます
あまり声高々に言えないですがオンゲやps2も解析やってみたいです
とりあえずまず、ミクの動画マスターしてからアセンブリ勉強して考えて見たいと思いますm(__)m
0076デフォルトの名無しさん2015/03/03(火) 23:36:50.84ID:WujRzXq4
すいませんあと、もう一つだけ教えて欲しいのですが
ミクと学ぶC言語(nm6216304)
この動画ってちゃんと解析に必要なC言語情報ってありますか?
何も考えないでとりあえず覚えるって感じでやってるんですが意味なかったら悲しいので・・
0077デフォルトの名無しさん2015/03/03(火) 23:45:36.68ID:1tLFUCdw
書いてないから諦めろ。市販ゲームの解析にそもそもC言語は使えない。
機械語とかアセンブラ言語とかメモリデバッガとか。
完成品のEXEなどからC言語を復元する仕組みは自分はしらん。昔から開発はされてるんだろうが真っ当なソフトがあったら教えて。
0078デフォルトの名無しさん2015/03/04(水) 01:21:36.29ID:cgi9GshT
> ID:WujRzXq4
自作ゲーム作れる程度じゃ無理なレベル。
今から勉強して1年やそこらじゃ無理だと思って。
0079デフォルトの名無しさん2015/03/04(水) 02:25:01.64ID:9Uh+Z2lX
あんまり手を広げすぎずにほどほどにね
少しずつ吸収していけばいいさ
0080デフォルトの名無しさん2015/03/04(水) 04:54:36.87ID:om/Jclr8
勿論長くなるとは思いますがやっていきたいです。
コンシューマーは相当厳しいのですか。やめておきます…
でもオンゲは解析できるようになってみたいです
何か他に参考になる動画教えて頂けないでしょうか・・
0081デフォルトの名無しさん2015/03/04(水) 05:35:44.93ID:Ly6r770b
こういうのはリバースエンジニアリングに入るの?
0082デフォルトの名無しさん2015/03/04(水) 10:27:36.73ID:3sswswX/
>>81
「エンジニアリング」と呼べるレベルになる為には、”技術”、”考え方の基礎”の両方が必要。
0083デフォルトの名無しさん2015/03/04(水) 12:16:59.73ID:C+KuXzoC
printf("もう一度計算しますか?[0・・・いいえ][1・・・はい]");
scanf("%d",&serlect);
}while(select);

do while文で、y/nの条件判定ってどうやればいい?
0と1じゃなくて・・・
0084デフォルトの名無しさん2015/03/04(水) 14:04:11.00ID:A/kbavcu
char ans;

do {
0085デフォルトの名無しさん2015/03/04(水) 14:06:37.49ID:A/kbavcu
エディタのつもりでタイプしたら書き込んでもーた。

char ans;

do {
printf("%s", "recale?(y/n) ");
ans = getchar();
if(ans == 'y') puts("re-cale");
else if (ans == 'n') puts("cancel");
else getchar();
} while(ans != 'y' && ans != 'n');
0086デフォルトの名無しさん2015/03/04(水) 14:42:02.94ID:jZmtGMsP
これはまた「俺ならこう書く」みたいに、テクニック自慢の流れになるんだろうな
0087デフォルトの名無しさん2015/03/04(水) 16:52:13.11ID:C+KuXzoC
printf("continue?");
select = getch();
if(select == 'Y');
0088デフォルトの名無しさん2015/03/05(木) 09:11:16.23ID:jO+yDGms
>>86
で、どう書いてもコンパイラの最適化には敵わないという結論で終わるんだな(´・ω・`;)
0089デフォルトの名無しさん2015/03/05(木) 13:20:19.95ID:qCMqkgtH
>>85
recaleってどういう意味?
0090デフォルトの名無しさん2015/03/05(木) 22:15:21.54ID:LDzWXv4P
>>82
どの程度まで技術を身に付ければ胸を張って「エンジニアリングやってます」と言える?
アセンブラが使えるとか?
0091デフォルトの名無しさん2015/03/05(木) 22:40:30.59ID:4qwAFJaB
>>90
ヌルを素人にも解りやすく説明できるかどうかだと思う。

このスレでも8割は説明できないと思う
0092デフォルトの名無しさん2015/03/05(木) 23:07:25.66ID:LDzWXv4P
>>91
ヌルの概念ってこと?あー、俺は説明できないな・・・。
「ガッ」されるものとは言えるけど。
0093デフォルトの名無しさん2015/03/06(金) 00:34:43.14ID:V05y+AsO
なにも指さないポインタ
0094デフォルトの名無しさん2015/03/06(金) 02:25:39.30ID:i+mRuZBj
>>90
解析の「技術」だけだとたんなるバイナリハック。
解析したコードを構築している「基礎的な考え方」いわゆるアルゴリズムやデータ構造を理解し
再利用できる段階まで到達してようやくリバースエンジニアリングと呼べるようになる。
0095デフォルトの名無しさん2015/03/06(金) 11:42:32.56ID:W/xUH5b8
ぬるぽ
0096デフォルトの名無しさん2015/03/06(金) 12:10:33.51ID:DihBiSVk
ヌルがヌルポインタとは限らないんだよなあ
0097デフォルトの名無しさん2015/03/06(金) 14:49:31.47ID:SLfRet4V
DOS等はアドレス0もアクセス可能エリアだな。
0098デフォルトの名無しさん2015/03/06(金) 15:52:02.55ID:CFcRFBIS
>>95
ガッ
0099デフォルトの名無しさん2015/03/06(金) 16:40:53.99ID:ls82rFuM
>>97
マルチタスクOSだとユーザ空間から見えるメモリアドレスは
プロセス毎に割り当てられた仮想メモリアドレスに過ぎないからな
アドレス0がアクセス可能だとか不可能だとかいうことに意味はないよ
0100デフォルトの名無しさん2015/03/06(金) 17:24:16.43ID:CeiJCUTv
>>99
入門書なんかのポインタの解説の最初のほうでよく変数のアドレスを
表示させるってのがあるじゃないですか。

あれは「プロセス毎に割り当てられた仮想メモリアドレス」の表示ってことですか?
0101デフォルトの名無しさん2015/03/06(金) 17:43:55.11ID:ls82rFuM
その通り
実際のメモリの物理アドレスとは違う
0102デフォルトの名無しさん2015/03/06(金) 17:44:38.86ID:cXSX7YpR
Cのマクロで2の累乗を求めたいんですけどできますか?
0103デフォルトの名無しさん2015/03/06(金) 17:48:57.44ID:Utx2vhNJ
>>102
<<
pow
0104デフォルトの名無しさん2015/03/06(金) 17:53:16.17ID:CFcRFBIS
>>94
むずかしいなぁ
01055602015/03/06(金) 20:17:40.38ID:n9/U+gAr
>>99
> マルチタスクOSだとユーザ空間から見えるメモリアドレスは

マルチタスクと仮想記憶は関係ない
組み込みとかマルチタスクで仮想記憶でないシステムはいくらでもある

>>100
そのシステムによる
例えば DOS なら物理アドレスだし
>>101 は自分の回りしか知らない知ったかだからスルーでいい
0106デフォルトの名無しさん2015/03/06(金) 21:50:07.69ID:cXSX7YpR
if (A) {
if (B) {
C;
} else {
D;
}
}
って、A&&(B?C:D);で大丈夫ですよね?
0107デフォルトの名無しさん2015/03/06(金) 21:51:33.57ID:cXSX7YpR
>>103 math.hのpowは使わずに、#define上で繰り返し処理を行って出力することは可能なのでしょうか?
0108デフォルトの名無しさん2015/03/06(金) 21:53:37.64ID:rB30sAq6
>>106
ダメよ〜、ダメダメ!!

Aもカッコの中に入れて
0109デフォルトの名無しさん2015/03/06(金) 21:55:04.10ID:rB30sAq6
>>107
あたいも、その方がプログラマーとしてカッコいいと思う。


アンタ、輝いているわ!
0110デフォルトの名無しさん2015/03/06(金) 22:05:22.36ID:Utx2vhNJ
(1 << n)==(2のn乗)
0111デフォルトの名無しさん2015/03/06(金) 22:41:31.52ID:cXSX7YpR
>>108-110 ありがとうございます!
0112デフォルトの名無しさん2015/03/06(金) 22:42:11.36ID:ffY3VuPR
>>107
2のべき乗(2^n)限定なら
#define POW_2(n) (1 << n)

任意のべき乗(x^y)なら
#include <boost/preprocessor/repetition/repeat.hpp>
#define _TIMES_X(z,y,x) * (x)
#define POW(x,y) (1 BOOST_PP_REPEAT(y, _TIMES_X, x))

ネットで見つけたコードをちょっといじった
yは256以下の定数に限られる
Cでも通ります
0113デフォルトの名無しさん2015/03/07(土) 00:58:33.23ID:s2v/vNmy
>>112
ありがとうございます!!
0114デフォルトの名無しさん2015/03/07(土) 01:24:16.04ID:2ZuwMdKL
文字列を浮動小数点数に変換する標準関数atof()についてですが
この関数使えないと思います。
なぜならこの関数の仕様にこう書かれています。
最初に数字がきたら後から文字を含んでいても最初の数字を返す、のだそうです。
たとえば、1@badaといった文字列をatof()の引数に渡すは1を返すといったものです。
はっきりいってこんな仕様いらねーんだよ
これは変換失敗として0を返すべきじゃないのかYO
0115デフォルトの名無しさん2015/03/07(土) 01:56:00.46ID:5pmyw5XK
0@badaの時はどうする?
0116デフォルトの名無しさん2015/03/07(土) 02:08:57.61ID:8nTZ5hf2
strtod使えばいい
0117デフォルトの名無しさん2015/03/07(土) 04:20:50.48ID:zjzHBwlq
sscanf() がいいよ!
0118デフォルトの名無しさん2015/03/07(土) 07:29:47.34ID:2swtWLmy
>>114
他の人もダメだと考えたならば、ダメじゃない仕様のライブラリが作られている
お前がダメじゃないと思えるライブラリが無いならば、ダメだと考えたのが世界中でお前だけということ。
今回は前者。
0119デフォルトの名無しさん2015/03/07(土) 07:36:40.87ID:mBPyfmYM
>>114
stoiが欲しいね
oneまたはichiまたは、1又は一を1に変換してくれる様なもの

今はて組でやってる
0120デフォルトの名無しさん2015/03/07(土) 07:37:44.82ID:JEHKSR/j
ちゃんとvalidationすれば問題ない
0121デフォルトの名無しさん2015/03/07(土) 08:07:59.73ID:QPvGFmZE
「日本人は漢数字を使う。漢数字に対応していないatofは使えない!!」
レベルの意見だな。>114
0122デフォルトの名無しさん2015/03/07(土) 08:42:20.22ID:d/WuJ0kl
>>119
こんなの?

http://d.hatena.ne.jp/shakemid/20060517/1147868042

さあ、C バージョンを作ろう! 需要がどれだけあるか知らんけど。
0123デフォルトの名無しさん2015/03/07(土) 09:06:10.07ID:mBPyfmYM
>>122
テキストマイニングの分野で切望されてる。

辞書作るのが面倒過ぎるのと、Cは速いと言う幻想を皆が持ちすぎて、担当者としては辛い
0124デフォルトの名無しさん2015/03/07(土) 09:45:17.41ID:d/WuJ0kl
>>123
切実なニーズがおありなら試しに使ってみてはどうでしょう。

http://perldoc.jp/docs/perl/5.20.1/perlembed.pod
を参考に C のプログラムに埋め込むとか。ハードル高いかも。
あるいはパイプ経由で。速度的に不利ですが。
0125デフォルトの名無しさん2015/03/08(日) 00:23:04.23ID:p9guRPOQ
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

/* signal.hで定義されているラベル付きシグナル
* #define SIGINT 2 割り込み(Ctrl-C))
* #define SIGQUIT 3 終了(Ctrl-\)
* #define SIGUSR1 10 ユーザ定義シグナル1
* #define SIGUSR2 12 ユーザ定義シグナル2
* #define SIGTSTP 20 ターミナルの停止[サスペンド](Ctrl-Z)
*/

/* シグナルハンドラ */
void signal_handler(int signal) {
printf("シグナル%dを受け取りました。\t", signal);
if (signal == SIGTSTP)
printf("SIGTSTP (Ctrl-Z)");
else if (signal == SIGQUIT)
printf("SIGQUIT (Ctrl-\\)");
else if (signal == SIGUSR1)
printf("SIGUSR1");
else if (signal == SIGUSR2)
printf("SIGUSR2");
printf("\n");
}

void sigint_handler(int x) {
printf("別のハンドラにおいてCtrl-C (SIGINT)を受け取りました。\n終了します。\n");
exit(0);
}
0126デフォルトの名無しさん2015/03/08(日) 00:23:31.41ID:p9guRPOQ
int main() {
/* シグナルハンドラの登録 */
signal(SIGQUIT, signal_handler); // signal_handler()をこれらシグナルの
signal(SIGTSTP, signal_handler); // シグナルハンドラとして登録する
signal(SIGUSR1, signal_handler);
signal(SIGUSR2, signal_handler);

signal(SIGINT, sigint_handler); // SIGINTのsigint_handler()を設定

while(1) {} // 無限ループ
}
0127デフォルトの名無しさん2015/03/08(日) 00:26:17.21ID:p9guRPOQ
main()の中で
/* シグナルハンドラの登録 */としてsignal()を4回実行して、
さらに// SIGINTのsigint_handler()を設定
としてsingal()を1回実行していますが、
これらがどういう意味なのかわかりません。
0128デフォルトの名無しさん2015/03/08(日) 02:46:25.78ID:gB0TcJH+
>>127
ttp://www.c-tipsref.com/reference/signal/signal.html
0129デフォルトの名無しさん2015/03/08(日) 02:54:30.06ID:psXgySVj
なんでC言語スレでLinux(unix)のプログラミングについて質問するん?(´・ω・`)
0130デフォルトの名無しさん2015/03/08(日) 10:31:01.66ID:8XDi/JEm
UNIXはC言語が生まれる切欠だったからだろ。
0131デフォルトの名無しさん2015/03/09(月) 22:39:36.45ID:jSySDOK2
#include <stdio.h>

double keisan(void);

char op;
double n;
double kekka;

int main(void){
printf("計算機プログラム");
for(;;){
scanf("%f",&kekka);
do{
scanf("%s",&op);
}while(op == !"+" || op == !"-" || op == !"*" || op == !"/" || op == !"=");
keisan();
printf("%f",kekka);}
return 0;}

double keisan(void){
while(op == !"=") {
scanf("%f",&n);
switch(op) {
case "+": kekka = kekka + n; break;
case "-": kekka = kekka - n; break;
case "*": kekka = kekka * n; break;
case "/": if(n = 0)kekka = 0;
else kekka = kekka / n; break;}
do{
scanf("%s",&op);
}while(op == !"+" || op == !"-" || op == !"*" || op == !"/" || op == !"=");}return 0;} }
このプログラムをコンパイルすると、「36行目」で記述エラーを発見しました。「constant expression」を付け忘れています。とエラーがでる。どうしてかな?行数オーバーで見にくくなったすまん。
0132片山博文MZ ◆T6xkBnTXz7B0 2015/03/09(月) 22:50:51.71ID:Z3OokkBM
>>131
!"+"
これがおかしい。まず、C言語では、文字列と文字を区別しないといけない。
文字は' 'で囲み、文字列は" "で囲む。
!を付けた理由はわからない。
0133デフォルトの名無しさん2015/03/09(月) 22:57:59.57ID:jSySDOK2
>>132
入力された文字が演算子以外なら入力し直させたくて!をつけたんだけどそれなら&&だな

もう一回やり直してみる、ありがとう!
0134デフォルトの名無しさん2015/03/09(月) 23:40:34.94ID:4i/HOWxM
>>133
op の「型」は char、は 1 文字しか入らない

>>132 のとおり、1文字は
'a'
'b'
'+'
'-'
と書き、決して "a", "b", "+", "-" とは書かない

あと、等しくないことを示す不等号は 「!=」 を使う
0135デフォルトの名無しさん2015/03/09(月) 23:57:02.40ID:4Qyhpwcz
練習用に作ってるんだろうから
scanf("%lf", &a); scanf("%lf", &b); scanf("%c", &op);
で値と演算の種類をとって、関数
keisan(a, b, op);
で値を返してやればいいだろ。
だいたい、
double keisan(void){
・・・
return 0;
}
じゃダメだろw
0136デフォルトの名無しさん2015/03/10(火) 07:17:58.09ID:bxhL7Xz5
#include <stdio.h>

int keisan(void); /*暗黙変換されるがとりあえず戻り値変更*/

char op[10]; /*scanfでchar変数使用すると入力最後の’\n’しか代入されないので配列に変更、オーバフロー注意*/
double n;
double kekka;

int main(void){
printf("計算機プログラム\n");
for (;;){
scanf("%lf", &kekka); /*倍精度は%lf*/
do{
scanf("%s", op); /*文字列なので&不要*/
} while (*op != '+' && *op != '-' && *op != '*' && *op != '/' && *op != '='); /*先頭要素で比較*/
keisan();
printf("%f\n", kekka);
}
return 0;
}
0137デフォルトの名無しさん2015/03/10(火) 07:20:23.81ID:bxhL7Xz5
(続き)
int keisan(void){
while (*op != '=') {
scanf("%lf", &n);
switch (*op) {
case '+': kekka = kekka + n; break;
case '-': kekka = kekka - n; break;
case '*': kekka = kekka * n; break;
case '/': if (n == 0) kekka = 0; /*等値比較は==*/
else kekka = kekka / n; break;
}
do{
scanf("%s", op);
} while (*op != '+' && *op != '-' && *op != '*' && *op != '/' && *op != '=');
}
return 0;
}
0138デフォルトの名無しさん2015/03/10(火) 07:35:43.24ID:bxhL7Xz5
追加
この方が望ましい
case '/': if (n == 0.0) kekka = 0.0; /*等値比較は==*/
0139デフォルトの名無しさん2015/03/10(火) 07:44:27.11ID:NaOG4pdg
>>138
望ましいというほどのものではない、n も kekka も double だと宣言しているのだから 0 と書いて浮動小数点の 0 になるのはあたりまえ
0140デフォルトの名無しさん2015/03/10(火) 07:48:23.38ID:NaOG4pdg
そうそう、それ零割りトラップだろ?だったら浮動小数点の零の検出を == 0 でしちゃいけない
fabs(n) < εを使え、εは適当な定数だ
0141デフォルトの名無しさん2015/03/10(火) 08:14:36.54ID:NaOG4pdg
いや、浮動小数点数には NaN (not a number) が定義されているから、そもそも零割を弾く必要もないか‥
0142デフォルトの名無しさん2015/03/10(火) 11:49:33.72ID:QYRsFyHY
>>139-141
お前PGとしてのセンスが欠けてるわ
0143デフォルトの名無しさん2015/03/10(火) 14:55:06.76ID:NLcg81ln
1 2 3 4 5
6 7 8 9 10
5桁目で改行したいんだけどどうすればいい?
for文使って・・・
0144デフォルトの名無しさん2015/03/10(火) 15:03:27.00ID:sUfSha+Z
int i;
for(i=1;i<=10;i+=5){
printf("%d %d %d %d %d\n",i,i+1,i+2,i+3,i+4);
}
0145デフォルトの名無しさん2015/03/10(火) 15:16:05.46ID:vbSd60f7
#include <stdio.h>

#define MIN 1
#define MAX 10

int main(void) {
int n, c;
for (n = MIN, c = 1; n <= MAX; n++, c++) {
printf("%-4d", n);
if (c % 5 == 0) printf("\n");
}
printf("\n");
return 0;
}
0146デフォルトの名無しさん2015/03/10(火) 19:23:44.81ID:NaOG4pdg
>>142
ほう、お前のセンスとはいったいなんだ?
>>139 言語規格上 0.0 とわざわざ書く必要はない
>>140 浮動小数点数にて == を使って比較するのは禁じ手
>>141 NaN を忘れちゃいや
どれにセンスのなさを感じたのか?
0147デフォルトの名無しさん2015/03/10(火) 20:01:05.65ID:1jGry9cx
>>142 の様な解説や参考サイトも出さず、ただ否定するだけのやつはクズ。
知識あろうが技術あろうが、人を見下すのが快楽なクズ。
0148デフォルトの名無しさん2015/03/10(火) 21:45:19.56ID:lFtQHHXQ
>>146
相変わらず知ったかぶりしてるなQz。とっとと死ね。
>>137のif (n == 0) kekka = 0;は完全に正しい。
0149デフォルトの名無しさん2015/03/10(火) 21:48:42.53ID:nYeMd5bn
あんまり言いたくないけど、まぁ最低だね。
scanfでバッファオーバーフローも意識してないだから。
分かってないってのがぞっとするな
0150デフォルトの名無しさん2015/03/10(火) 22:00:14.43ID:NaOG4pdg
>>148
>if (n == 0) kekka = 0;は完全に正しい。
結論だけ書いても仕方がないんだよ、「どういう理由で」正しいのか書いてみてくれないか?

>>149
まあ scanf() + %s は鬼門だね
0151デフォルトの名無しさん2015/03/10(火) 22:53:15.63ID:duJdek/K
>>143
int main ( void )
{
int i;

for ( i = 1; i <= 30; i++ ) {
printf ( "%d\t", i );
if ( !(i%5) ) {
printf ( "\n" );
}
}

return 0;
}
0152デフォルトの名無しさん2015/03/10(火) 23:28:10.52ID:lFtQHHXQ
>>150
てめーで書いてるだろ。死ねバカ。
> 0 と書いて浮動小数点の 0 になるのはあたりまえ
0153デフォルトの名無しさん2015/03/11(水) 05:04:19.46ID:blS4wY8n
>>152
それは俺の理由であって >>148 の理由はわからかったからな
ま、>>139 は内容として妥当ということか
0154デフォルトの名無しさん2015/03/11(水) 05:24:18.74ID:5wCk23b3
>>139
文法的には正しい。作法としては望ましくない。
浮動小数点数の定数はそのことを明示するべき。
保守性が低下する原因となる。

>>140
ループの終了判断や 2変数の一致判断などでは==の使用は禁じ手。
ゼロ割り回避の定数0.0は厳密なゼロ。
微少判定値εは無意味。

>>141
NaNの扱いは処理系依存。
そもそも発生させるべきではない。
0155デフォルトの名無しさん2015/03/11(水) 06:19:38.00ID:blS4wY8n
>>154
>ゼロ割り回避の定数0.0は厳密なゼロ。
>微少判定値εは無意味。

しかし微小判定をしないでそのまま計算するというのは、結果が double なら ±∞とかになるのを許容するわけだよね
すると

>NaNの扱いは処理系依存。
>そもそも発生させるべきではない。

の項目との一貫性がなくなるが?
0156デフォルトの名無しさん2015/03/11(水) 06:59:27.55ID:f9VlD4f7
演算結果が無限大にならないよう計算を回避する話をしているのに、
何故それを許容するということになるのか?
尤もNaNは無限大を意味するものではないが。
0157デフォルトの名無しさん2015/03/11(水) 07:28:51.13ID:blS4wY8n
>>156
>演算結果が無限大にならないよう計算を回避する話をしているのに、
>何故それを許容するということになるのか?

その「無限大にならないように計算を回避する」ために微小判定が必要なのではないか?と主張している

>尤もNaNは無限大を意味するものではないが。

たしかに。
NaN、±∞ を非数値類としてまとめて扱っているとしてくれ
0158デフォルトの名無しさん2015/03/11(水) 07:40:19.66ID:fyi4MFv2
IEEE754準拠の環境なら事後にInf判定でいいと思うがな。
被除数のレンジがわからんことにはεを決められないし、
適当に決めればオーバーキルになる。
0159デフォルトの名無しさん2015/03/11(水) 07:44:50.96ID:YmZds4cJ
>>157
>その「無限大にならないように計算を回避する」ために微小判定が必要なのではないか?と主張している
無限大すなわちゼロ割だ。ゼロ割は厳密なゼロで除算を行った場合にのみ発生する。
そして、0と書けば厳密なゼロになる。
厳密なゼロと等しい場合だけ回避すれば良い。

↓はまぐれ当たりで正しい事を言っていたようだな。死ねバカ。
> 0 と書いて浮動小数点の 0 になるのはあたりまえ
0160デフォルトの名無しさん2015/03/11(水) 08:26:02.66ID:blS4wY8n
>>159
>無限大すなわちゼロ割だ。ゼロ割は厳密なゼロで除算を行った場合にのみ発生する。

乗除算は double の数値について閉じていない
http://codepad.org/jXxiNkwJ

>>158
ま、それはそのとおり、>>141 の趣旨だね

>>159
切れやすい人だね‥
0161デフォルトの名無しさん2015/03/11(水) 08:32:39.43ID:f9VlD4f7
些か目的がずれてきた。訂正する。
無限大を回避すること自体は目的ではなかった。
真の目的は0で除算すると言う不合理そのものを回避することだった。
ゼロ割りという演算が定義出来ない事態への対応をどうするか?
浮動小数点データで演算が定義できないのは仮数部、指数部すべてのビット列が0の場合に除算を行うこと。
厳密な0を対象としている。
微小判定値はそもそも関係しない話。
0162デフォルトの名無しさん2015/03/11(水) 09:38:01.37ID:q1j3tFZ0
const double zero = 0 ;

if (n == zero){
  kekka = zero;
}
0163デフォルトの名無しさん2015/03/11(水) 09:41:27.18ID:aCIUJ7gk
>>161
定義できないってIEEE754では定義されてるでしょ
0164デフォルトの名無しさん2015/03/11(水) 09:48:27.96ID:m5Pz5hnh
演算を定義したのではなくて、結果の表現方法を定義しただけじゃないの
0165デフォルトの名無しさん2015/03/11(水) 09:56:30.98ID:aCIUJ7gk
一緒でしょ?Xを0で割るとYになる、ということが決められてるんだから
0166デフォルトの名無しさん2015/03/11(水) 14:12:48.49ID:fuU+S4pz
形式上は、0.0/0.0 の結果すら定義されてるからな
これを演算と呼んでいいのか疑問ではあるが
0167デフォルトの名無しさん2015/03/11(水) 14:24:31.64ID:wt06PQLx
何をもって厳密な0って言ってるのか分からんが、
0ってのは本来存在しない。必ず0以外の値になる。

0に近い値を0として扱ってるだけだ。
0168デフォルトの名無しさん2015/03/11(水) 16:03:50.64ID:183ZCayl
超初心者です
do{
pritnf("1文字を入力");
ch = getch();
}while((ch !='A')&&(ch !='B')&&(ch !='C')&&(ch !='D')

たとえば、Aって1文字入力されるとAって答え出るけど
でも、&&が入ってるんで 「ABCD」って、入力しないといけないんじゃないの?
0169片山博文MZ ◆T6xkBnTXz7B0 2015/03/11(水) 16:15:15.62ID:cFDo18bs
>>168
whileの条件「(ch !='A')&&(ch !='B')&&(ch !='C')&&(ch !='D') 」は、繰り返す条件を表している。
比較演算子!=は等しくないとき真となる。
つまり、chが'A'でなく、かつchが'B'でなく、かつchが'C'でなく、かつchが'D'でなければ
繰り返す。
「ch !='A'&&ch !='B'&&ch !='C'&&ch !='D'」の否定は「ch =='A'||ch =='B'||ch =='C'||ch =='D'」である。
この辺の変形は、大学で論理学を勉強するとよくわかるだろう。
0170デフォルトの名無しさん2015/03/11(水) 16:17:26.33ID:KXjOEnHv
&&は論理演算子だから、かつとかAND って意味だ
0171 ◆QZaw55cn4c 2015/03/11(水) 20:08:22.28ID:blS4wY8n
>>161
お疲れさま、だ‥
0172デフォルトの名無しさん2015/03/11(水) 20:26:05.48ID:lYcCfnhh
>>168
A を入力すると式 ch != 'A' が false だから、
while 内の式全体が false だとわかりきってる。だから残りは評価せずに while を抜ける。
Cファミリーはこういうショートサーキット評価とかいうのがされるのが多いな。
0173デフォルトの名無しさん2015/03/11(水) 21:05:39.01ID:YmZds4cJ
>>155
>しかし微小判定をしないでそのまま計算するというのは、結果が double なら ±∞とかになるのを許容するわけだよね

1未満で除算すればオーバーフローの可能性があるわけなので、>>137の除算前のチェックを1未満にしなきゃいけないな。
乗算、加算、減算に関しても同様。

アホか。死ね。バカ。
0174デフォルトの名無しさん2015/03/11(水) 21:20:38.14ID:1lChT+Cl
そうか、じゃあ1より大きい値で除算するとアンダーフローの可能性があるから除算は1でしかできないな
乗算も同じで、加減算に関しては0しかできないな
0175デフォルトの名無しさん2015/03/12(木) 00:21:11.03ID:sWZMM9R0
オーバーフロー、アンダーフローは計算結果として、多くの場合起こりうるので計算前のチェックは現実的ではない。
一方、ゼロ割は計算前にチェック出来る。浮動小数点演算でも、
厳密なゼロ以外では発生しないので、==で比較するのが正しい。

まとめるとQzはうんこ。とっとと死ね。
0176デフォルトの名無しさん2015/03/12(木) 01:22:08.10ID:ydOF1vc8
本来数の比較は > < で 等号の=は使わない

0をヌルとして扱うならヌルかヌル以外かで、==0でも良い。
0177デフォルトの名無しさん2015/03/12(木) 01:32:32.38ID:noLiW6MT
変数aに、a+1とbのビット和を代入したいんですが、なるべく短く書くにはどうしたらいいですか?
0178デフォルトの名無しさん2015/03/12(木) 01:38:54.98ID:noLiW6MT
>>177
すみません、aにその結果を代入するではなく、aにその結果を足すでした
0179デフォルトの名無しさん2015/03/12(木) 03:35:23.39ID:9E3YKRs2
a += (a + 1) | b;
0180デフォルトの名無しさん2015/03/12(木) 04:54:29.43ID:T8hzHXTX
>>175
おい負け犬、QZに負けるなんて恥ずかしいぞ
0181デフォルトの名無しさん2015/03/12(木) 08:32:56.01ID:noLiW6MT
>>179
それが限界でしょうか?減らしに減らした結果自分もそれに行きついたのですが...
0182デフォルトの名無しさん2015/03/12(木) 08:43:41.47ID:sWZMM9R0
>>180
チンカスくん。まだ生きてたの? 作りかけで放置してある末尾再帰のまとめ完成してあげようか?
あれは笑えた。
0183デフォルトの名無しさん2015/03/12(木) 10:11:13.10ID:Wl76Ct9a
結局>>142のこの一言が正解だったのか
>お前PGとしてのセンスが欠けてるわ
0184デフォルトの名無しさん2015/03/12(木) 10:59:07.81ID:UwEx4TaE
return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
うるう年を探す関数なんですけど、100ってなんですか?
0185デフォルトの名無しさん2015/03/12(木) 11:11:35.47ID:9E3YKRs2
>>184
wikipedia より
> グレゴリオ暦では、次の規則に従って400年間に(100回ではなく)97回の閏年を設ける。
> 1. 西暦年が4で割り切れる年は閏年
> 2. ただし、西暦年が100で割り切れる年は平年
> 3. ただし、西暦年が400で割り切れる年は閏年
1 が year % 4 == 0
2 が year % 100 != 0
3 が year % 400 == 0
うるう年は 1 と 2 が両方成立するか、または 3 が成立する場合だから >>184 の式になる
01861852015/03/12(木) 11:15:03.60ID:9E3YKRs2
あ、下のほうの 1,2,3 の式は wikipedia の説明と等価ではなくて
うるう年が成立するために必要な条件のことなので
そう読み替えてください
0187デフォルトの名無しさん2015/03/12(木) 12:32:27.50ID:UwEx4TaE
>>185
ありがとうございます
0188デフォルトの名無しさん2015/03/12(木) 14:51:20.25ID:T8hzHXTX
>>175
これが炎上学習法というやつか‥

サービス問題
浮動小数点数の除算にて事前の零割りチェックは要らない。
それは >>141 に述べたとおり、オーバーフローも含めて事後処理すればいい。
一方、整数の除算においては、事前の零割りチェックは必須だ。

その理由は?
0189デフォルトの名無しさん2015/03/12(木) 15:47:31.15ID:GBiRKg+Y
Windows VC++環境で確認
例1
コンパイルエラーにより実行ファイル作成失敗
double d = 1.0 / 0.0;

例2
実行時エラーによる強制終了
double d, e;
scanf("%lf", &e); /* 0を入力 */
d = 1.0 / e;

例3
問題なし
double d, e;
e = 0.0;
d = 1.0 / e; /* NaN */
0190デフォルトの名無しさん2015/03/13(金) 02:37:22.40ID:8v0xZffX
変数にscanfで代入したと同時に、その変数に1を足すのってできます?
0191デフォルトの名無しさん2015/03/13(金) 05:59:36.05ID:z8zfhg7x
int n;
int *p = &n;

scanf("%d", &n) ? (*p)++, 0;
0192デフォルトの名無しさん2015/03/13(金) 07:14:41.84ID:zjfSc/AC
同時?
0193デフォルトの名無しさん2015/03/13(金) 07:37:29.47ID:vURV2fJ1
この類の話題は、規格バカのQzが喜んで喰い付きそうなネタだな
0194デフォルトの名無しさん2015/03/13(金) 08:38:05.49ID:HV8vSxLa
>>190
代入も加算も両方書き込みだから、同時は無理
0195デフォルトの名無しさん2015/03/13(金) 10:29:32.72ID:6q2TkuD1
>>192
例えば、
scanf("%d",&n++);
みたいな感じで出来たらなと思いまして
>>194
そうですか...
他の入力用の関数使っても不可能なのでしょうか?
0196デフォルトの名無しさん2015/03/13(金) 10:30:34.51ID:6q2TkuD1
>>191
そういう方法ですか
ありがとうございます!
ちなみにですが、*pを使わずに処理する方法はありますか?
0197デフォルトの名無しさん2015/03/13(金) 11:25:15.35ID:R2aIDez5
同時には無理
scanf()の結果に条件演算子(a?b:c)を使うのであれば順次演算子(a,b)でも同じ

scanf("%d", &n),n++;
0198デフォルトの名無しさん2015/03/13(金) 11:38:24.30ID:6q2TkuD1
>>197
ありがとうございます
0199デフォルトの名無しさん2015/03/13(金) 12:51:35.77ID:+e2bgrgv
そもそも、なぜ一度にやりたいのか聞きたい
3文字か4文字書くのが面倒だから?
0200デフォルトの名無しさん2015/03/13(金) 13:23:56.72ID:yU2SIesZ
お手数お掛けします。
ラズベリーパイでledを光らせるプログラムを組んでますがエラーの対処法が分かりません。
どなたか解決法分かる方お願いします。
...という文字列はどこから来たのでしょうか。
以下コード
#define GPIO 17 17
#define GPIO 25 25
#include <stdio.h>
#include <wiringPi.h>

int main (){
if (wiringPiSetupGpio() == -1){return 1;}

pinMode(GPIO25, OUTPUT);
pinMode(GPIO17, OUTPUT);

int ltika(int m)
{
digitalWrite(GPIO25, 1);
digitalWrite(GPIO17, 1);
delay(m);
digitalWrite(GPIO25, 0);
digitalWrite(GPIO17, 0);
delay(20-m);
}

int ltika(2);

pinMode(GPIO25, INPUT);
pinMode(GPIO17, INPUT);
}
エラーのメッセージ:expected declaration specifiers or '...'before numeric constatnt'
0201デフォルトの名無しさん2015/03/13(金) 13:31:17.19ID:+e2bgrgv
>>200
int ltika(2)が関数宣言としておかしいといってる
たぶん関数呼び出ししたいのだろうから、intはいらない
0202デフォルトの名無しさん2015/03/13(金) 13:33:37.07ID:yU2SIesZ
>>201
本当にありがとうございます!
もっと長いコードだったのが、どんどん短くしていってそれでもエラーは消えず途方に暮れていたので
本当感謝です
0203デフォルトの名無しさん2015/03/13(金) 13:49:09.51ID:6q2TkuD1
>>199
いえ、なんとなくですw
もしできたら何かと便利かと思いまして
0204デフォルトの名無しさん2015/03/13(金) 13:58:03.18ID:8v0xZffX
v
0205デフォルトの名無しさん2015/03/13(金) 13:58:46.06ID:8v0xZffX
>>204 誤爆失礼

入力された値を4進数に変えて、 偶数の桁全部に1を足して、その数を10進数に戻して出力したいんだけど、ループ回す以外に方法ある?
例えば、
170(10) -> 2222(4) --> 3333(4) -> 255(10)
225(10) -> 3201(4) --> 3311(4) -> 245(10)
みたいな感じで
0206デフォルトの名無しさん2015/03/13(金) 18:53:41.29ID:u5xBN3qA
あるC参考書の例をそのまま書いただけなんですけど、結果が参考書と違うんですが何がだめなんでしょう

http://codepad.org/o3XY0Mb9
参考書では
double型 :50000.000000

となるはずなんですが
double型 :0
と表示されます
0207デフォルトの名無しさん2015/03/13(金) 19:22:22.24ID:yzrdUasZ
>>206
16行目は%.6fの間違いじゃない?
02082052015/03/13(金) 22:18:07.18ID:8v0xZffX
ループ回すしかないのかな...
0209デフォルトの名無しさん2015/03/14(土) 01:34:19.27ID:z9Ktyrzz
>>205
4進数は4桁固定?
上位桁が0の場合の扱いは?
例えば、8(10)の場合はどっち?
8(10) -> 0020(4) -> 1121(4) -> 89(10)
8(10) -> 20(4) -> 21(4) -> 9(10)
0210デフォルトの名無しさん2015/03/14(土) 01:36:11.32ID:f/5VfowW
>>208
お前PGとしてのセンスが欠けてるわ。
0x55と論理和を取るだけ。
中学生でも解けるだろ。転職した方が良い。
0211デフォルトの名無しさん2015/03/14(土) 01:47:37.62ID:z9Ktyrzz
>>210
そのやり方は4進数が4桁固定の場合にしか使えない
0212デフォルトの名無しさん2015/03/14(土) 01:57:07.81ID:f/5VfowW
>>211
こっちは、小学生かよ。
塾の先生に聞いてごらん。ゼロは偶数。
0213デフォルトの名無しさん2015/03/14(土) 02:00:28.49ID:z9Ktyrzz
入力した数値が255以上の場合どうするんだよ
0x555や0x5555、0x1555とか使うのか?
4桁前提でなければマスクビットが決められない
0214デフォルトの名無しさん2015/03/14(土) 02:12:47.19ID:f/5VfowW
>>213
質問者が秘密にしてる制約の事など知ったことか。
自分で適切な桁を設定すれば良い。中学生以上なら可能。小学生には無理らしいけど。
0215デフォルトの名無しさん2015/03/14(土) 02:14:48.23ID:z9Ktyrzz
だから>>209で確認したんだよ
仕様が分からなければ判断できる訳ないだろ
0216デフォルトの名無しさん2015/03/14(土) 02:25:49.60ID:f/5VfowW
>>215
質問者がそれを認識した時に解決するのだから、確認など不要。
小学生には難しいかな。
0217デフォルトの名無しさん2015/03/14(土) 02:26:47.41ID:CKcS8mmw
>>210
どんまい
0218デフォルトの名無しさん2015/03/14(土) 02:31:28.50ID:z9Ktyrzz
>>216
PGとしてのセンス云々よりもっと基本的な何かが欠けてるわ
0219デフォルトの名無しさん2015/03/14(土) 02:41:48.78ID:rqOXrwlQ
対数使って入力値の二進の桁求めてからマスク作って,,,
は綺麗じゃないな

ビット演算だけ組み合わせて詰めて一行で終わる変態的な方法はないのかね
0220デフォルトの名無しさん2015/03/14(土) 07:37:34.49ID:dQxdhP9d
>>209
4桁固定じゃない(1〜8桁の可変)
上位桁が0なら、0でない一番上の桁のまで処理
8(10)なら後者
0221デフォルトの名無しさん2015/03/14(土) 07:41:17.50ID:dQxdhP9d
っていうことは0x5555と論理積?
0222デフォルトの名無しさん2015/03/14(土) 08:11:14.42ID:CKcS8mmw
>>221
0 -> 00 -> 01
1 -> 01 -> 01
2 -> 10 -> 11
3 -> 11 -> 11
2bit毎の0b01論理和でしょ
てか、その程度なら0x100 x 2 バイトサイズなテーブルを用意するのが
単純かつ最速
0223デフォルトの名無しさん2015/03/14(土) 08:17:26.34ID:zKu26jV3
>>220
>上位桁が0なら、0でない一番上の桁のまで処理

という条件があるのなら、ループを回した方がシンプルかもね。
その上で速度的な問題があれば、展開してループを外してみる程度。
0224デフォルトの名無しさん2015/03/14(土) 08:23:25.68ID:dQxdhP9d
>>222,223
サンクス!
0225デフォルトの名無しさん2015/03/14(土) 08:24:55.06ID:dQxdhP9d
あと聞いておきたいんだけど、もし桁数の制限がなかったらどうやって簡潔に書ける?型の上限値までに広げるの?
0226デフォルトの名無しさん2015/03/14(土) 08:35:47.31ID:zKu26jV3
>>225
桁数の制限が無い場合、任意精度演算とか多倍長演算かな。
詳しくは Google 先生に聞いてみよう。
0227デフォルトの名無しさん2015/03/14(土) 10:30:01.70ID:dQxdhP9d
>>226
ありがと!
0228デフォルトの名無しさん2015/03/14(土) 15:24:17.00ID:QMCtKmlh
char a[3]= {"abc"}
ヌル文字ってどうなる?
0229デフォルトの名無しさん2015/03/14(土) 15:26:57.57ID:cLXneCYu
試してみると良いと思います
0230デフォルトの名無しさん2015/03/14(土) 15:29:29.19ID:M1KE6Bug
>>228
何だか雰囲気がQz臭い書き込みだな
0231デフォルトの名無しさん2015/03/14(土) 15:43:39.87ID:8spH3MOz
解ってて聞いてるんだろうな。
0232デフォルトの名無しさん2015/03/14(土) 18:12:14.21ID:cLXneCYu
#include <stdio.h>
int main()
{
 char a[3]= {"abc"};
 char *p;
 for (p = a; p <= a+3; p++)
  printf("[%d]", *p);
 return 0;
}
0233デフォルトの名無しさん2015/03/14(土) 18:15:05.78ID:cLXneCYu
gcc4.7.3
[97][98][99][-68

vc2005
[97][98][99][0]
0234デフォルトの名無しさん2015/03/14(土) 21:47:12.97ID:U+6JHOgw
>>228
{}は何の為に有るのだ?
0235デフォルトの名無しさん2015/03/14(土) 21:58:57.75ID:iq+gVAml
>>233
これって、

gcc: char a[3] = {'a', 'b', 'c'};
vc2005: char a[3] = "abc";

ってこと?
0236デフォルトの名無しさん2015/03/14(土) 22:35:24.81ID:y/4YiFF4
単にメモリ確保の方法が違っていただけでしょ。
VCの場合、偶然か何らかの都合かで配列の直後に空きがあったからヌルが格納されただけ。
(全く別の数値0x00データの可能性もあるけど)
gccの場合は、配列の直後に別変数が割り当てられてヌルが上書きされてる。
(コードからchar型ポインタの一部の可能性が高い)
どちらにせよ配列のオーバフロー時の動作は保証されない。
0237デフォルトの名無しさん2015/03/14(土) 22:36:09.78ID:cLXneCYu
232に書いてある、同じソースだよ
たぶんVCの奴はパディングが入っているのではないかな
0238デフォルトの名無しさん2015/03/14(土) 23:20:14.17ID:f/5VfowW
バカばっか。
aはスタック上に置かれる。
a[3]としてアクセスしたロケーションにあったものが、
それぞれ-68,0だっただけの事。
0239デフォルトの名無しさん2015/03/14(土) 23:22:41.15ID:wcL59cGU
VCはアライメントを指定しないと4バイト境界とか16バイト境界とかで割り付けるよね?(´・ω・`)
昔、VB6アプリ用のDLL作ってハマった覚えがあるよ?(´・ω・`)
0240デフォルトの名無しさん2015/03/14(土) 23:28:50.41ID:U+6JHOgw
>>239
{ }の意味教えてくれよ
0241デフォルトの名無しさん2015/03/14(土) 23:49:00.01ID:9sIwwC7M
>>238
お前は話題についてこれないんだから無理して首突っ込むな。
スタック上に置かれるとか皆わかった上での話だ、アホウ。
0242デフォルトの名無しさん2015/03/14(土) 23:52:50.53ID:U+6JHOgw
誰かカッコの意味教えてくれよん
0243デフォルトの名無しさん2015/03/15(日) 00:13:34.16ID:kJqM+4Ch
配列は、宣言と同時に初期化することが出来ます。
配列の初期化は、次のようにして行います。

型名 配列名[要素数]={0番の数値,1番の数値,2番の数値,・・・};

{}で囲んだ中に順番に,で区切って数値を並べます。
全てを指定する必要はないので、数値の個数は、配列の要素数以下にします。
配列の要素数よりも少ない場合、残りには全て0が代入されます。

char型の配列で文字列を取り扱えます。
しかし、上記の配列を初期化する方法は非常に面倒です。
いちいち1文字ずつ区切って書かなければなりません。

C言語では、もっと直感的に文字列を初期化出来る方法があります。
今まで文字列を表す時には""で囲んできましたが、これを使う方法です。
なお、"" で囲んだ文字列を特に、文字列リテラルと呼ぶことがあります。

文字列リテラルを使うと、簡単に文字列の初期化が出来ます。

つまり、{"abc"}をコンパイラは{'a','b','c'}と解釈しますから、前者の場合の
{}には特に意味がなくなりますが、配列を初期化する記述としては問題
ありません。
0244デフォルトの名無しさん2015/03/15(日) 00:23:09.46ID:J5ZoTwT2
gcc の場合だけど、

subl $32, %esp
movw $25185, 25(%esp)
movb $99, 27(%esp)
leal 25(%esp), %eax
movl %eax, 28(%esp)

となっていて、本題とは関係のないけど "ab" をまとめて word で渡してるのな。

'a':97, 'b':98, 25185 == (98<<8) + 97

"leal .." と "movl ..." から推測して、for loop 内の printf() でポインタ(*p)
そのものの値(アドレス値)を見てみると、

for (p = a; p <= a+3; p++) {
printf("[%d] %hhd\n", *p, (int)p & 0x000000ff);
}

[97] 41
[98] 42
[99] 43
[44] 44

となっていて、>>236 の「コードからchar型ポインタの一部の可能性が高い」
の通りとなっている。vc2005は持っていないから分からん。
0245デフォルトの名無しさん2015/03/15(日) 00:23:51.76ID:6p2wtnBO
>>235
に書いてあるとおり

{ } は、1文字ずつ、'a' のように、
char型で初期化する

>gcc: char a[3] = {'a', 'b', 'c'};
この後に、'\0'(NUL文字)は無い

>vc2005: char a[3] = "abc";
char a[4] = "abc";

この後に、'\0'(NUL文字)があるので、
配列のサイズは、文字列 + 1 にする
0246デフォルトの名無しさん2015/03/15(日) 00:33:13.13ID:ZiZ/0VZw
>>243
何かの文献からの引用なのか、自分の言葉なのかよくわからないけど
{"abc"}は{'a', 'b', 'c', '\0'}と解釈される
0247デフォルトの名無しさん2015/03/15(日) 00:40:59.72ID:oAj/AjeD
>>235
念のために一応。

 char s[] = "abc", t[3] = "abc";

は次の宣言と同じです。

 char s[] = {'a', 'b', 'c', '\0'} , t[3] = {'a', 'b', 'c' };

ttp://msdn.microsoft.com/ja-jp/library/7w7xccx8.aspx
0248デフォルトの名無しさん2015/03/15(日) 00:52:05.98ID:J5ZoTwT2
>>247
なるほど、gcc で

char s[3] = {"abc"};
char s[4] = {"abc"};

の違いを見てたんだけど、そういうことだったのね。
0249デフォルトの名無しさん2015/03/15(日) 01:06:28.26ID:oAj/AjeD
>>242
中括弧の記述を省略できる場合がある。
省略しただけなので意味は同じ。
0250デフォルトの名無しさん2015/03/15(日) 01:11:21.27ID:Jqzc46Ub
代入と違って初期化だと余分な分を勝手に破棄してくれるのか
知らなかった (・∀・)
0251デフォルトの名無しさん2015/03/15(日) 18:38:48.59ID:qPIG10Kp
printfについて考えてみたんだが、
なんで引数の型とか数を自由に決めれるんだ?
ソース見てもどうなってんのかわからなかった
0252デフォルトの名無しさん2015/03/15(日) 19:10:37.68ID:6pbsqEWY
スタックに乗せてるだけだから
0253デフォルトの名無しさん2015/03/15(日) 19:33:05.19ID:D1mOgsSk
>>251
書式文字列みて判断してるだけ
呼び出し側の引数と合ってるかは気にしない
0254デフォルトの名無しさん2015/03/15(日) 19:59:03.13ID:o4SL0mY6
#include <stdio.h>
#include <stdarg.h>

void func(char *, ...);

int main(void)
{
func("% %", 1, 2);
func("% % %", 1, 2, 3);
func("% % % %", 1, 2, 3, 4);

return 0;
}

void func(char *fmt, ...)
{
va_list list;
char *p;

va_start(list, fmt);
for (p = fmt; *p != '\0'; p++) {
if (*p == '%') printf("%d ", va_arg(list, int));
}
printf("\n");
va_end(list);
}
0255デフォルトの名無しさん2015/03/15(日) 23:45:39.44ID:6p2wtnBO
>>248
char s[3] = "abc"
char s[4] = "abc" → 末尾に、'\0'がある

とにかく、NUL文字などのややこしいことは、
コンパイラにさせて、自分で配列のサイズを数えない!
char s[] = "abc"

または、文字列を変更しないのなら、
const pointer が一般的
const char *s = "abc"

一方、char配列だと、代入で文字列を変更できる
s[1] = 'X' → "aXc"
0256デフォルトの名無しさん2015/03/16(月) 01:24:53.10ID:FVkTfRi9
とりあえずCでも可変長な引数でもいけるとわかりました
ありがとうございます
0257デフォルトの名無しさん2015/03/17(火) 07:18:02.34ID:lrVSJYkv
ある設定のもと、作ったプログラムで実験し出力したデータを、別プログラムで解析したい場合での質問です。
設置項目が多いのと、項目値を頻繁に変更するため、例えば、バージョンを0001とし結果に埋め込むとともに、ヘッダファイル名data_0001.hに設定項目を集めて、別プログラムでこのファイルの設定項目を使いたいです。

ほんとうなら、
#define VERSION 0001
#define HNAME(name) “data##_name.h”
#include HNAME(VERSION)
みたいなのを行いたかったのですが、
マクロの仕様的に無理そうなので
他の方法を探しています。

何か方法はありますでしょうか。
0258デフォルトの名無しさん2015/03/17(火) 08:09:10.67ID:Gg8QLluD
>>257
動的にソース作ってコンパイラ起動すればいいだけ
でも、ヘッダーだけ切り替わっても、その内容を使う側はどうするつもりなんだろう...
0259デフォルトの名無しさん2015/03/17(火) 09:51:25.00ID:zgpDzxRC
>>257
自分なら設定項目(?)をExcelとかで管理してテキスト形式でファイル出力し、
Cプログラムでファイルを読み込み処理する方法を選択する。
頻繁に変更する可能性のある項目を、定数とマクロで扱うこと自体を考え直すべきだと思う。
何かヘッダファイルに設定項目をまとめる必要性があるの?
0260デフォルトの名無しさん2015/03/17(火) 12:33:04.70ID:f6px5vQy
バージョン数多くないなら #ifdef 使えば?
0261デフォルトの名無しさん2015/03/17(火) 13:27:43.83ID:nDJgD8we
>>257
ここには、質問に言いがかり付けるバカしかいないから他に行った方が良い。

#define VERSION 0001

#define HNAME_(name) data_ ## name ## .h
#define HNAME(name) HNAME_(name)
#define STR_(x) #x
#define STR(x) STR_(x)

#include STR(HNAME(VERSION))
0262デフォルトの名無しさん2015/03/17(火) 14:54:48.05ID:he3uyXd7
>>261
STR_とSTRの二段階にしないと
うまく展開出来ないのはCの仕様なの?
0263デフォルトの名無しさん2015/03/17(火) 15:08:15.69ID:pZ5buOHw
仕様に明確化されてるかは知らない

"HNAME(VERSION)" と引数をそのままリテラル化するのと
HNAME(VERSION) の展開結果 data_0001.h を
"data_0001.h" とリテラル化するのを区別するのにそうなってしまってるという意識
0264デフォルトの名無しさん2015/03/17(火) 16:15:28.23ID:nDJgD8we
>>262
そうだよ
引数置換より#, ##の処理が先に行われると規定されている
0265デフォルトの名無しさん2015/03/17(火) 23:37:14.88ID:mPSuZyYO
>>264
どういうこと?
kwskぷりーず
0266デフォルトの名無しさん2015/03/18(水) 00:53:00.96ID:+/Z0nvoo
>>261
257です。
ありがとうございます。うまくいきました。
けど、中身がさっぱりわからない…
#define HNAME(name) HNAME_(name)
や
#define STR(x) STR_(x)
のおかげでできていると思うんですが…
マクロを順に展開して表示してくれるツールってあるんでしたっけ?
VisualStudioにマクロ展開の機能があった気もしますけど。
0267デフォルトの名無しさん2015/03/18(水) 01:05:22.37ID:mHp9M5nm
似たのは /p オプションだけども、プリプロセッサ処理後の結果を出力するだけで
プリプロセッサの処理過程を順に追っかけるのとは違うしなぁ
0268デフォルトの名無しさん2015/03/18(水) 12:14:59.34ID:+JhByqZK
>>265-266
nextのC言語なら俺に聞けの3,4
http://next 2ch.net/tech/1368680114/3
0269デフォルトの名無しさん2015/03/19(木) 02:58:06.33ID:noU2qMQu
>>264-265
#は、" " ダブルクォーテーションで囲む。
##は文字列の連結

#define STR_(x) #x
x → "x"

#define STR(x) STR_(x)

でも一般的には、頻繁に更新されるデータを、
ヘッダに定義したり、マクロを使ったりしない。
良いプログラミングではないのは確か
0270デフォルトの名無しさん2015/03/20(金) 10:08:15.87ID:JPS8a/86
ある処理を行いたいとします
でも他の処理が実行されているときはできません
他の処理の実行はflag[i]で管理されているとします。
自分の実行フラグを仮にexeflag=TRUEでスタートして他の処理のチェックに
for(i=0;i<自分以外の最大値;i++) exeflag=exeflag&~flag[i];
とかく場合と素直に
for(i=0;i<自分以外の最大値;i++)
{
if(flag[i]==TRUE)
{
exeflag=FALSE;
break;
}
}
と書く場合、動作は違いますか?
上記だとnot演算の時点で値が変わっちゃうからやらない方がいいですか?
0271デフォルトの名無しさん2015/03/20(金) 12:45:42.33ID:PaYW+yLx
>>270
どう見ても違うでしょ。
気にしてない部分かもしれないけど。

前者は必ずループ最後までまわる。
後者は確定した時点で止まる。
0272デフォルトの名無しさん2015/03/20(金) 13:17:11.47ID:8sMOXdGr
どちらもアトミックでないので誤り。

ビット演算と論理演算が混ざってるし、ループの判定条件もデタラメだし、
基礎から学んだ方が良い。
0273デフォルトの名無しさん2015/03/24(火) 20:19:36.28ID:l6Xdc+1e
すみません、最近始めたばかりなのですがよろしければご教授お願いしたいです

文字列 (str) を渡されると URL を開いて、そのページに「404」が含まれていたら 1 を、含まれていなければ 0 を返すような関数を作るにはどうしたらいいですか?

str に xyz が代入されている時に実行すると http://google.com/xyz を開くという感じにしたいです
0274デフォルトの名無しさん2015/03/24(火) 22:54:11.36ID:jbljGHry
1から作る場合は、ソケット通信、HTTPプロトコルを勉強して作らないといけないかも。
ここを参考にしてみると良いかも
http://x68000.q-e-d.net/~68user/net/c-http-1.html

動作させる環境によるけど、外部コマンドを起動して
その結果を受け取る形で作ることが出来るかもしれない。
その場合は、system popenなどの関数を調べてみると良いかも。

かもばかりですみません。
0275デフォルトの名無しさん2015/03/24(火) 23:00:33.86ID:d1n69A/m
とりあえずPHPで。
PHPソースは、ヒップホップPHPというソフトでC言語へもコンバート可能。
0276デフォルトの名無しさん2015/03/24(火) 23:30:18.39ID:8sshk8/M
>>274
�d、これ参考になるなぁ
0277デフォルトの名無しさん2015/03/24(火) 23:30:38.57ID:2rijsrHp
cURL
0278デフォルトの名無しさん2015/03/24(火) 23:38:51.00ID:d1n69A/m
初心者は多く勉強したらいいと思うだろうが。
少なく楽に勉強して同一成果を達成するほうが大事だと思うが。
0279デフォルトの名無しさん2015/03/25(水) 00:51:41.00ID:kIwvCb1k
スクリプトの方が楽だな
0280デフォルトの名無しさん2015/03/27(金) 15:06:30.31ID:lhRmt57r
ありがとうございます、敷居が少し高そうなのでもっと勉強してからにします
0281デフォルトの名無しさん2015/03/31(火) 09:15:09.06ID:FuCgZbru
externって、なんで必要なの?
トーク抜ければ、同じ変数でも関係ないだろ?
0282デフォルトの名無しさん2015/03/31(火) 09:22:51.70ID:koel4+b2
トーク?(´・ω・`)
0283デフォルトの名無しさん2015/03/31(火) 11:06:05.46ID:FuCgZbru
while(size-- && (c = fgetc(stdin)) != EOF && c != '\n')
「size--」って、どういう意味?
0284デフォルトの名無しさん2015/03/31(火) 11:10:10.48ID:koel4+b2
それがC言語だって知ってるのに、そこだけわからないの?どうやってC言語のこと
勉強すると、そういう偏った知識になるの?勉強の仕方が悪いんじゃないの?(´・ω・`)
0285デフォルトの名無しさん2015/03/31(火) 14:04:11.00ID:meXl7bV+
キーワード「後置デクリメント」
size=size-1 と同じ
というとたぶん
そんなこと知ってるけどなぜこれがwhileの中に必要なのか
と言われそう
0286デフォルトの名無しさん2015/03/31(火) 14:38:18.80ID:ItOrL3f1
一種の荒氏だな。
0287デフォルトの名無しさん2015/03/31(火) 19:12:26.27ID:XpnSzaSp
曖昧な質問には曖昧な回答しか得られない。
0288デフォルトの名無しさん2015/04/01(水) 09:36:59.81ID:MkgMN5zv
char who[] = "Potrzbie";
char *ptr;

ptr = who -1; //これどうすればいい?
while(-- ptr >= who)
putchar(*ptr);
putchar('\n');

最後のヌル文字を指すようにしたいんだけど
どうすればいい?
0289デフォルトの名無しさん2015/04/01(水) 09:42:50.00ID:IHXA7IXr
ptr=&who[strlen(who)]
0290デフォルトの名無しさん2015/04/01(水) 10:34:23.34ID:MkgMN5zv
ありがとうございます
0291デフォルトの名無しさん2015/04/02(木) 10:45:04.97ID:BsPUTWix
構造体のタグ名なんですけど、付ける時と
付けない時の違いってなんでうか?
0292デフォルトの名無しさん2015/04/02(木) 11:05:31.74ID:BsPUTWix
>>291
自決しました
0293デフォルトの名無しさん2015/04/02(木) 12:40:56.57ID:z8Sedsrd
不覚にも笑ってしまった
0294デフォルトの名無しさん2015/04/02(木) 12:57:51.59ID:qLyguZkL
      ∧,,∧
      (・ω・`)
      /  y/ ヽ ジケツシマシタ
   Σ(m)フ⊂[_ノ
     (ノノ | | | l )
0295デフォルトの名無しさん2015/04/02(木) 17:49:09.31ID:SdC+ucYi
早まるな・・・
0296デフォルトの名無しさん2015/04/04(土) 14:56:54.49ID:rXUW3s8s
構造体のタグ名周りってややこしいよね
単なる定義と、変数宣言を兼ねる場合の違いがわからずいつも頭が爆発する
0297デフォルトの名無しさん2015/04/04(土) 15:57:27.21ID:9l8XF/AL
なんで大学ってWeb系のプログラミングとかの授業しないの
今時C言語なんかやったって意味内だろ
0298デフォルトの名無しさん2015/04/04(土) 16:23:23.95ID:Y86GgH66
>>297
web なんて教育するまでもないから
0299デフォルトの名無しさん2015/04/04(土) 17:40:23.53ID:OQlVmU2K
Cもやった事の無いプログラマーなんて信用できない。
0300デフォルトの名無しさん2015/04/04(土) 17:59:55.72ID:8tbUo2zR
Cだけやったことがある人とPHPだけやったことがある人というそれだけの情報ならCの人を取る
Cでポインタまでちゃんと書ける人なら他の手続型言語はすぐ理解できる
0301デフォルトの名無しさん2015/04/04(土) 18:09:13.43ID:9l8XF/AL
Cで何作るんだよ
PHPを使ったシステム開発するなら普通にPHPの経験者雇うだろ馬鹿か
時代遅れのCプログラマはパチンコでも作ってろ
0302デフォルトの名無しさん2015/04/04(土) 18:22:16.06ID:8tbUo2zR
JavaとかRubyとかならそうかもしれんが
PHPの開発するからってPHPのみの経験者を雇うかなあ・・・?

Cは組み込みだとメインで使われてるんだよ自動車や飛行機やロケットや
0303デフォルトの名無しさん2015/04/04(土) 18:38:08.78ID:j0CZgyq7
C/C++と、PHPは相当に似ている。
PHPは、C/C++から公式・非公式問わずいいとこ取りしてスクリプト化してようにもの。
関数名も動作もPHPとC/C++と似ている。
0304デフォルトの名無しさん2015/04/04(土) 19:11:29.20ID:9l8XF/AL
GoogleやMicrosoftのエンジニアがCでプログラム書いてるかよ
時代遅れのアナログ脳の老外はさっさと引退しろよ
0305デフォルトの名無しさん2015/04/04(土) 19:13:24.10ID:0oskbUDr
アセンブラソース書けるレベルならやらなくてもいいけど。
0306デフォルトの名無しさん2015/04/04(土) 19:14:46.10ID:0oskbUDr
つ Microsoft Visual C++
0307デフォルトの名無しさん2015/04/04(土) 19:23:41.65ID:VBSsiPVq
googleと言ったらAndroid、Androidと言ったらLinuxベース、Linuxと言ったらC言語。

大手OSメーカーがC/C++向けドライバ-やAPIを用意しないわけ無いだろ。
0308デフォルトの名無しさん2015/04/04(土) 19:26:23.76ID:9l8XF/AL
組込みとか糞すぎ
全然コード書かねえじゃねえか
業務の9割がドキュメント作成と会議じゃねえか
設計書の通りにコード書くだけ
仕様もハード屋で仕事を終えた時点でほぼ決まっている
ハード屋の奴隷が組み込みソフトウェアエンジニア
ハード屋のミスで納期遅れが発生してもソフト屋の脳気後れにされて残業させられる
メーカーの年寄りはソフトウェア開発のことなんか何も分かってねえんだよ
ドキュメント作成とか医らねえWeb系とかGithubを使ってPullRequestとかやって
コードベースで物事が進んでることとか理解できないんだろうな
プログラミングできないからドキュメント設計に逃げてるのがメーカーの組込みエンジニア
家電も携帯も日本メーカーの完全敗北今後電気自動車とか自動運転とか出てきたらトヨタも負け組みになるだろう
0309デフォルトの名無しさん2015/04/04(土) 19:29:27.70ID:knpZoffv
>>304
Cで書けるのは当然で、更に高度な事やってるだけだが?
0310デフォルトの名無しさん2015/04/04(土) 19:50:40.77ID:8tbUo2zR
なんだただの組み込み屋のぼやきだったのか

ドキュメントだらけになるのは確かにどうかと思うが履歴だけで管理はできないだろうから体系立てて整理した文書自体は必要
ソフトのライフサイクルが短いか、その間ずっと少数精鋭でやっていけるならそれでもいいとは思うけどね
0311デフォルトの名無しさん2015/04/04(土) 21:09:52.87ID:Y86GgH66
組み込みで 9割とかは知らない(車とかだとありそう)けど、金融なら普通にある
0312デフォルトの名無しさん2015/04/04(土) 21:28:00.00ID:ugaLmOKA
http://builder.japan.zdnet.com/script/sp_c-programming-language/20370255/
0313デフォルトの名無しさん2015/04/04(土) 22:06:12.19ID:9l8XF/AL
動作確認が特に糞杉
何も画面が出ない
GDBでステップ実行して変数の値見てとか池沼の作業場かよ
オシロスコープで波形チェックとかソフト屋のやることじゃねえだろ
組込みは糞C言語の仕事は糞でFA
0314デフォルトの名無しさん2015/04/04(土) 23:11:46.70ID:lA3gUo/y
オシロスコープやロジックアナライザまではソフト屋の範疇。
スペクトラムアナライザやネットワークアナライザまで行くと流石に手に余る。
0315デフォルトの名無しさん2015/04/04(土) 23:25:26.80ID:QykeKoHq
オシロやロジアナをソフト屋が使わなきゃならない状況って既に危機的状況
だと思うよ(´・ω・`)
だって、それらで解析できた結果によって「根本的に」直さなきゃならないのは
本来ハードだからね?(´・ω・`)
おいらも色々殺ってファーストロットは、これで行くっかない、とか言われて随分
馬鹿げたソフトを書かされた覚えがあるけどね…(´・ω・`)
0316デフォルトの名無しさん2015/04/04(土) 23:26:16.67ID:QykeKoHq
ヤヴァイ…殺ってとか変換されてる…(´・ω・`)
0317デフォルトの名無しさん2015/04/04(土) 23:37:02.63ID:8tbUo2zR
組み込みソフトはレジスタ操作してハードを操作するんだから
作ったソフトで想定通りレジスタが設定できているかを見るのは組み込みソフト屋の範疇だよね
そんでハードもテストされて正しい前提でソフトとハードの結合テストするのも組み込みソフト屋の範疇でしょ
通信ソフトつくったりすればオシロ等使ってテストもするわな
0318デフォルトの名無しさん2015/04/04(土) 23:38:57.71ID:v7zJ69Ov
ロジアナでの出力波形タイミング確認とかは純粋にロジックで決まる部分でソフト屋の仕事。
波形の遅延や歪みの影響の確認や対応はハード屋と喧嘩する部分。
0319デフォルトの名無しさん2015/04/04(土) 23:41:48.82ID:QykeKoHq
それは、確認の為に使うんであってソフトの開発の為に使うんじゃないよ?(´・ω・`)
0320デフォルトの名無しさん2015/04/05(日) 00:01:55.64ID:WnBSziob
ん?
テストでの確認はソフト開発の一環ではないのか?
0321デフォルトの名無しさん2015/04/05(日) 00:19:01.30ID:a2jqf7RM
そういう意味では、その通りだけどスペック通りに作って「動かなかったら」
いよいよロジアナさんの出番、というのがうちのやり方なんだよ?(´・ω・`)
0322デフォルトの名無しさん2015/04/05(日) 00:26:01.75ID:/p4ZvisL
そういえば今のロジアナってWindowsXPじゃなくなった?変わらず?
0323デフォルトの名無しさん2015/04/05(日) 01:33:08.54ID:5qMUKc8z
組み込みは純粋なソフトウェアの仕事じゃないからな。
製品開発の一員でファームウェア担当ってだけだから。
外部のやつはタコ部屋でソフトだけやらされるが
0324デフォルトの名無しさん2015/04/05(日) 09:41:20.22ID:ASai6GRH
C言語の仕事はソフトウェアの仕事ではないでFA
0325デフォルトの名無しさん2015/04/05(日) 09:51:58.15ID:/p4ZvisL
組み込みの仕事≠ソフトの仕事 ということなら同意
0326デフォルトの名無しさん2015/04/05(日) 10:33:44.78ID:6aOjNglA
最先端の計算機科学やソフトウェア工学は必要ないけど、ソフトだけに偏った知識だけでも駄目。
制御理論や電子回路、メカトロの知識が必須。
0327デフォルトの名無しさん2015/04/05(日) 11:03:28.59ID:yCiLyi3D
制御系の組み込みソフトは、センサ入力から制御対象の挙動をリアルタイムでシミュレートして駆動回路にレスポンスを返すようなものだからな
ソフトウェアそのものより制御、物理や数学の能力のほうが重要だわな
0328デフォルトの名無しさん2015/04/05(日) 12:50:02.04ID:XqnpqZbw
制御ってラプラスとかを極めればいいの?フーリエまでテリトリーを延ばしたほうがいいの?
0329デフォルトの名無しさん2015/04/05(日) 14:14:54.30ID:A6ZtmCTJ
フィードバック制御系を中心にした古典制御系では、一般に一入力一出力の二次遅れ系の多重ループに
モデルを単純化して取り扱うのでラプラス変換が中心。
周波数領域で対象を扱うのなら連続関数のフーリエ変換より離散関数のz変換の方が有用。
入力系やFBループ内のデジタルフィルタを実現するために役立つ。
0330デフォルトの名無しさん2015/04/05(日) 14:21:01.29ID:ASai6GRH
複雑な処理なんかソフトウェアじゃ速度でなくて
LSIとか電子工学やってるやつが担当するんだよ
組込みソフトウェアエンジニアは電子工学出のやつが作った
LSIの機能をお得意のレジスタ操作で表面からONにしたりOFFにしたりするだけ
組込みソフトウェアエンジニアがどんだけ頑張ったってテレビの画質は変わらない
テレビの品質なんて画質がほぼ9割なんだから組込みソフトウェアなんか何も貢献してないようなもん
組込みエンジニアはマジゴミオシロスコープで波形を見る雑用をハード屋に命じられて死んでいく人生
0331デフォルトの名無しさん2015/04/05(日) 14:30:16.61ID:Y3BKMqAz
まあ、開発力と資金が豊富な大手ならカスタムLSIやASICに落とし込むことも出来るだろうけど、
多品種少量生産の場合そうも出来ないから組み込みソフトが廃れることはないよ
0332デフォルトの名無しさん2015/04/05(日) 14:41:29.46ID:A19xdTh3
むしろそういった分野でしかC言語プログラマの生き残る道は無いな
0333デフォルトの名無しさん2015/04/05(日) 14:44:43.29ID:EnZWbZxg
FAが消える事は無いよ。
0334デフォルトの名無しさん2015/04/05(日) 17:00:24.75ID:bGDnVVIi
そんな難しい言語でもないし、やっといて損無い。
少しでもいいから多くの言語やってる人の方が信頼できる。

グダグダとやらない理由探してる後ろ向きなやつとは関りあいたくない。
同時に一つの選択支にこだわるやつとも関わり合いたくないけど。
0335デフォルトの名無しさん2015/04/05(日) 17:27:28.83ID:WDwqsM6E
>>331
> まあ、開発力と資金が豊富な大手ならカスタムLSIやASICに落とし込むことも出来るだろうけど

小規模なら FPGA だろ

> 多品種少量生産の場合そうも出来ないから組み込みソフトが廃れることはないよ

ソフトでやるのはそれで性能が出る時で、大量生産でもソフトでできるならソフトでやるよ
不具合の対策楽だし
03363312015/04/05(日) 18:37:57.32ID:0qiZPeAg
>>335
ああ、やっぱりこの手のレスが付いたか。
FPGAだのゲートアレイだの屁理屈捏ねてくる輩が現れると思ってはいたが…
ソフトの領域を完全にハードで置き換えることも、ハードで実現している能力を完全にソフトで代替することもナンセンス。
お互いにカバーできない領域、あるいは現実的でない領域というものが存在する。
ハードが置き換えられることも、ソフトが廃れることもあり得ない。
書き込み文章の後半を見る限りわかっているんじゃないのか?
0337デフォルトの名無しさん2015/04/05(日) 19:11:55.31ID:WDwqsM6E
>>336
> ソフトの領域を完全にハードで置き換えることも、ハードで実現している能力を完全にソフトで代替することもナンセンス。

>>331 は、開発力や資金があるところが ASIC やカスタム LSI でやることを、開発力や資金がなくて多品種少量生産の場合はソフトでやると書いてるとしか思えないけど? w
0338デフォルトの名無しさん2015/04/06(月) 10:59:41.84ID:0WOuy3eK
だんだん慣れてきたんだけど、簡単な
ソース公開してるサイト知りませんか?
0339デフォルトの名無しさん2015/04/06(月) 11:01:56.63ID:gCF5ots4
簡単なソースなら見に行く必要ないよね?(´・ω・`)
どうせなら難解なソースを探せばいいのに…(´・ω・`)
0340デフォルトの名無しさん2015/04/06(月) 11:47:35.99ID:isJjxyNd
「こんな簡単な仕事なんてウリには似合わないニダ!
もっと難しい・・・ってこんな仕事出来ないニダ!!!チョッパリは陰湿ニダ!!!」
0341デフォルトの名無しさん2015/04/07(火) 10:51:16.23ID:6eaaD3gY
>>338
https://www.kernel.org/
0342デフォルトの名無しさん2015/04/07(火) 11:22:32.82ID:6eaaD3gY
>>338
https://github.com/search?utf8=%E2%9C%93&;q=C
0343デフォルトの名無しさん2015/04/07(火) 12:30:12.78ID:s4QIRInr
>>338
なにこれ?
タブバーみたいなやつで、全部開けるようにならんかねぇ?
0344デフォルトの名無しさん2015/04/08(水) 21:09:19.19ID:dULUzA7G
組込みはマジ糞メーカーはマジ糞
0345デフォルトの名無しさん2015/04/08(水) 21:20:51.15ID:GMSIP3gO
組み込みは宝の山、メーカーは職人魂
0346デフォルトの名無しさん2015/04/09(木) 20:59:47.85ID:pZRpsuDk
メーカーの仕事はマジ糞
ドキュメント作成、会議、下請け管理、オシロスコープを使ったゴミ仕事が9割5分
これのどこがソフトウェア技術者なの
俺はコードの読み書きがしたいねや
マジゴミ仕事
ドキュメント作成、会議、下請け管理とか文系の仕事だろ
何のために理系に進んだんだマジ意味ねえし
0347デフォルトの名無しさん2015/04/09(木) 21:15:49.40ID:k50MvlUG
辞めたら?
0348デフォルトの名無しさん2015/04/09(木) 21:36:35.40ID:pZRpsuDk
組込みソフトウェアエンジニアは全然ソフト開発の仕事じゃない
VBで事務処理アプリ書いてる専門卒の女プログラマーの方がよっぽどソフトウェアエンジニアしてるわ
0349デフォルトの名無しさん2015/04/09(木) 23:18:10.98ID:VwJ1oW5m
他はしらんが理系の仕事の下請け管理は理系の仕事だ
お前はプログラムの書けない文系の管理者に管理されたいと思うのか
0350デフォルトの名無しさん2015/04/09(木) 23:27:51.37ID:lYEwmrhq
>>346
つか、ソフトの読み書きこそ文系の仕事だわ。
0351デフォルトの名無しさん2015/04/10(金) 06:25:39.30ID:zXpE+1Ue
GoogleやMicrosoftの人間がコードの読み書きは文系の仕事とか言って
ドキュメント作成や下請け管理ばかりやってるかよ
設計と製造を分けて考えるてるのがそもそもの間違い
結果日本のソフトは海外で使われないし国際競争力落としてるじゃないか
日本のメーカーの年寄りは韓国メーカーに負けた責任取れよ土下座しろよ
0352デフォルトの名無しさん2015/04/10(金) 06:34:01.25ID:zXpE+1Ue
ソフト開発の仕事ができなくてもメーカーは安定してるから別にいいやと思えてしまうお前らもおかしいわ
世の中の役に立つソフトウェアを作ってもっと世の中を良くしたいとかそういう純粋な動機で情報科への進学を志したんだじゃないんか
それをドキュメント作成、会議、下請け管理の仕事で満足してしまうとかマジ軽蔑するわー
0353デフォルトの名無しさん2015/04/10(金) 06:50:19.38ID:Bpl5Bdps
>>351
お前、本当にメーカのソフト開発部門の人間か?
主張が余りに稚拙で何だか疑わしくなってきた。
もしかして妄想だけで話をでっち上げてないか?
0354デフォルトの名無しさん2015/04/10(金) 08:54:16.08ID:GpVQcYAR
extern と static同時に使いたいんだけど、どすすればいい?
0355デフォルトの名無しさん2015/04/10(金) 10:10:27.15ID:fTCzCSp2
externされた関数からstaticな関数を呼ぶ
0356デフォルトの名無しさん2015/04/10(金) 10:30:43.37ID:VmzPrHvp
それは同時じゃないんじゃないかな?(´・ω・`)>>355
0357デフォルトの名無しさん2015/04/10(金) 11:26:21.67ID:uz4ADwGN
グローバルなら基本staticだろ。
0358デフォルトの名無しさん2015/04/10(金) 12:45:02.62ID:Tezy6JoM
externした関数内でstatic変数を宣言する
0359デフォルトの名無しさん2015/04/10(金) 14:11:24.95ID:nRm0ivfQ
「extern と static 同時に使いたい」
何を質問しているのか、どうことを期待しているのか、さっぱりわかんない
0360デフォルトの名無しさん2015/04/10(金) 15:06:06.35ID:bTbyyoJy
多分、複数のファイルから参照したいけどそれ以外からは見えないようにしたい、とかじゃないかなあ
0361デフォルトの名無しさん2015/04/10(金) 16:48:42.19ID:nRm0ivfQ
ああ
ライブラリを記述してて(それらは複数のファイルに跨がる)
呼び出し元とライブラリとの間は不可視で、ライブラリ内記述で通るスコープの変数/関数か

変数は引数のハンドラ内に仕込むという術でごまかせるけど、
関数はどうしようもないから
名前をユニークにしつつ外部公開するヘッダーには載せない ぐらいしか思い浮かばないな
0362デフォルトの名無しさん2015/04/10(金) 17:23:02.03ID:VmzPrHvp
それでいいなら、ソースファイルを1個にすればいいんじゃないかな?(´・ω・`)
0363デフォルトの名無しさん2015/04/10(金) 17:34:54.65ID:nRm0ivfQ
いずれにしろ元質問者の答えが待たれるわけだが
0364デフォルトの名無しさん2015/04/10(金) 19:43:32.83ID:UO0Q28VH
ストリームについて質問です。
ファイルから文字列を順番に読み込む時にストリームが開きますよね?
ストリームが開いてる間はHDDは閉じてるんですか?つまりメモリにファイル移動が
終わった段階なんですか?
0365デフォルトの名無しさん2015/04/10(金) 19:45:57.47ID:UO0Q28VH
というか何でメモリはHDDと違って容量が低いんですか?
メモリの板の番号が増えるだけで、番号ごとにアクセスしたらいいだけじゃないですか
どんだけ増えても困らないと思いますけど
0366デフォルトの名無しさん2015/04/10(金) 19:51:37.67ID:6mfRBVMy
>>364
意味の通る日本語で質問してください

>>365
メモリ容量がHDD容量より必ず低くはありません
0367片山博文MZ ◆T6xkBnTXz7B0 2015/04/10(金) 20:32:50.06ID:d24Av0vo
>>365
スピードとコストと容量を天秤に掛けた結果
0368デフォルトの名無しさん2015/04/10(金) 20:53:54.70ID:UO0Q28VH
>>366
えっとじゃぁゲームを起動してるときは、HDDからメモリにプログラムや
データファイルすべて読み込み済みなんでしょうか?Cやjavaなど言語によって
HDDからファイルを読み込む量、タイミングなど決まってるのかなと
0369デフォルトの名無しさん2015/04/10(金) 21:07:35.80ID:ok6HHZm/
サーバーなんてメモリがテラ超えてますん
0370デフォルトの名無しさん2015/04/10(金) 22:22:42.30ID:9kdbIScz
どう読み込むかなんてのは、そのアプリの作者が決めている。
頻繁に高速にアクセスするデータは予めメモリに読み込んで使ったり、
そうじゃないものは都度ファイルを開いて読んだりとか。

ストリーム自体は、普通はキャッシュしていて、
ある程度のサイズ毎にHDDのファイルから読み出してメモリ上に持っている。
その範囲を超えて読もうとすると自動的にファイルから読み出している。
0371デフォルトの名無しさん2015/04/10(金) 22:23:24.72ID:9kdbIScz
>>365
メモリの値段とHDDの値段をググれば解決
0372デフォルトの名無しさん2015/04/11(土) 00:15:47.06ID:QwZnfvD+
適当にマザボ選んで
ttp://kakaku.com/item/K0000766891/spec/#tab
基本スペック
最大メモリー容量 64GB

まぁそういうこと。
0373デフォルトの名無しさん2015/04/11(土) 10:48:34.49ID:3UoQvxXV
>>370
メモリに読み込んでるかどうか判断する方法ってどうしたらいいんですか?
例えばfprintfっていうのはHDDから1文字ずつ読み込んでるのか、メモリに
全部ファイルを格納してからfprintfしてるのかどっちなんでしょう?
凄い気になります、というか大学のレポート課題です。
0374デフォルトの名無しさん2015/04/11(土) 10:57:33.99ID:boNHV4C5
宿題スレいけば
0375デフォルトの名無しさん2015/04/11(土) 11:12:50.53ID:fUcnqq9H
マジゴミ仕事
0376デフォルトの名無しさん2015/04/11(土) 12:10:33.23ID:0Iu17Q47
>>373
さすがに前提知識ぐらい習ってるだろ?
というかその文からして、まるで授業に出てなくて全く理解していないように見えるw
0377デフォルトの名無しさん2015/04/11(土) 12:16:07.90ID:BGNFw9vt
>>373
課題の内容を見てみないと何とも言えないな
君の質問は、もしかしたらその課題解決へのアプローチとして誤っているかも知れないし
つまり君が課題の意図を理解していない可能性を私は疑う
悪いことは言わないから、ここじゃなくて同じ課題を受けている学友と共同でやりな
0378デフォルトの名無しさん2015/04/11(土) 12:32:35.27ID:3UoQvxXV
で結局メモリとHDDがどういったタイミングでやり取りしてるかは
コード見るだけじゃわからないってことでOKですか?
0379デフォルトの名無しさん2015/04/11(土) 12:52:00.24ID:BGNFw9vt
>>378
うん。記憶装置とメモリ間のデータ転送はOSの仕事であり
ユーザーアプリケーションとは切り離されている
よってC言語の命令とOSのデータ転送動作を一対一で
カチっと対応付けるのは不可能
解決不可能な課題を出すとは思えないから、君の課題理解に
誤りがあるのでは、と踏んでいる
0380デフォルトの名無しさん2015/04/11(土) 14:22:40.78ID:j7Y/pu4p
ストリームが何かわかってたら >>373 みたいな馬鹿なこと言うわけない
教科書からやり直せ

ついでにストリームのバッファとOSのディスクキャッシュもおぼえとけ
0381デフォルトの名無しさん2015/04/11(土) 15:15:27.25ID:UKPnNYb6
HDDから1バイトずつ読み込んだりしない。
もし1バイトずつ、
OSのAPI(システムコール・カーネルコール)を呼ぶと、
4KBを読むのに、4,012回もAPIを呼ぶことになる
(1KBずつ読むかも知れないが、サイズはよく知らない)

C標準ライブラリ(libc, stdio)などではまず、
4KBのバッファをメモリに確保して、
4KBを一度に、バッファに読み込めば、
API呼び出しは、1回で済む

そしてプログラムが、1バイトを要求したら、
そのバッファから、1バイトだけを渡す
(バッファリング)

API呼び出しは、ユーザーモードからカーネルモードへ、
切り替えるため、色々な環境変数やフラグを、
スタックへ退避させる必要があるので、
結構重い処理だから、あらかじめ処理しておいてから、
最後に、APIを1回呼び出すなどした方がよい

Linuxでは、strace を使うと、呼んだAPIを見れる。
「ふつうのLinuxプログラミング」という本を参照
0382デフォルトの名無しさん2015/04/11(土) 16:56:14.97ID:hdU0XbS+
そしてカーネルも実際にはバッファリングしているだろうから、そういう意味では標準ライブラリのバッファは冗長になるかもしれない
0383デフォルトの名無しさん2015/04/11(土) 17:12:15.24ID:QETiQOTP
カーネルオーバーヘッドがあるから、標準ライブラリのバッファは有効
0384デフォルトの名無しさん2015/04/11(土) 17:32:04.25ID:Q7z6DqmL
てことはストリームってのは概念であって必ずしもHDDとメモリが通信状態で
あるとは限らないって事でOKですか?
ストリームって言葉が何か煩わしいです
0385デフォルトの名無しさん2015/04/11(土) 17:59:52.86ID:hdU0XbS+
ランダムアクセスできない仮想的なデバイス/オブジェクトとして考えている

>>383
同意
0386デフォルトの名無しさん2015/04/11(土) 18:32:38.62ID:UKPnNYb6
Linuxなら、OS起動してから、手当たり次第に、
HDDを先読みして、使いそうな箇所を読めるだけ、
メモリ内に入れておくね

逆に更新したデータを、外部記憶装置に保存するときも、
本当に保存したかどうか、わからないかも

ひとまず、ジャーナル(ログ)を書いた時点で、
保存できたものとして扱い、その後に、
HDD・USBメモリのファームウェアが、
本当の書き込みを行っているかも
0387デフォルトの名無しさん2015/04/11(土) 20:32:46.73ID:sTzSX6CB
バッファってのはHDD領域にもあるんですか?
0388デフォルトの名無しさん2015/04/11(土) 20:35:37.01ID:hdU0XbS+
キャッシュを持っている HDD は多い
0389デフォルトの名無しさん2015/04/11(土) 20:38:56.75ID:sTzSX6CB
>>381
の人が書いてるバッファはどこのバッファなのか分かりません
バッファって一言でもいっても具体的にどこの場所のバッファなんですか?
だって機能っていうのはメモリ、HDD,CPUの内どれかの中にあるから
その場所が知りたいです。
0390デフォルトの名無しさん2015/04/11(土) 20:46:56.15ID:sTzSX6CB
だからバッファってどこですか?
抽象的すぎて話が理解できない…
0391デフォルトの名無しさん2015/04/11(土) 21:12:49.76ID:paw6lFbk
前の人も書いてるけど課題の内容貼ってみれば?
0392デフォルトの名無しさん2015/04/11(土) 21:27:34.97ID:BvvWrKK3
なんで4012回なの?
0393デフォルトの名無しさん2015/04/11(土) 21:40:04.94ID:aih7mS+Y
>>392
typo か 4096 = 2^12 なのをあやふやに覚えたかのどちらかかと
0394デフォルトの名無しさん2015/04/11(土) 21:53:24.03ID:37h/xSpQ
全部
0395デフォルトの名無しさん2015/04/11(土) 21:54:02.40ID:37h/xSpQ
>>389
全部
03963812015/04/11(土) 22:08:00.39ID:UKPnNYb6
>>389
C標準ライブラリが、メインメモリ(DRAM)内に確保した領域を、
バッファと呼んでいる

一般的に、バッファ・キャッシュというのは、
2つの装置間の速度差を埋めるための、ちょっとした領域

CPUにも1次・2次・3次キャッシュや、
HDDにもキャッシュが付いている

CPUの10倍遅いのが、1次キャッシュとすると、
1次の10倍遅いのが2次、2次の10倍遅いのが3次、
3次の10倍遅いのがDRAM

速い装置ほど、価格が高いから、少量しか持てない。
一方、遅い装置は、安いので大量持てる

>>392-393
4,096 でした
0397デフォルトの名無しさん2015/04/11(土) 22:45:26.56ID:sTzSX6CB
>>396
ややこしいけど面白そうですね…
キャッシュっていろんな部品なんですね
ところでカーネルというのは何ですか?
例えばprintf関数はカーネルと全く関係ないんでしょうか?
0398デフォルトの名無しさん2015/04/11(土) 23:31:47.92ID:QwZnfvD+
各ソフトからOSへ送るバッファ、
OSからハードへ送るバッファ、
ハード内の記録媒体へ書き込むバッファ。
どこにでもあるよ。
0399デフォルトの名無しさん2015/04/12(日) 00:19:32.37ID:S2hnXY0Q
>>397
とは検索やwikipediaを覚えた方がいい
0400デフォルトの名無しさん2015/04/12(日) 00:25:05.13ID:q+QqCCxE
            .,. -‐: : :‐-、r::: ::‐- 、
         .,..'´ ヽ ..-‐、 "~ ゙  ‐- 、`ヽ
        t´~r``/.、 __゛ 、 ' ;; 、、、..,:ヽ;::ヽ
       r´(. `/ :.、;r'´    ̄   : ::ヽ :ヽ;ヽ
      .,'"~`(´l、 ;: :i         : ::::i 、i,;:ヽ
       {:;:r ´::lー ;.:.|         : : :::i :i;; :::i
      .〉´(, ;: .{ミ;; :.|  ,,,-‐、,,,_丿ヽ,,,-‐、::i r _,::::i
      {:; '´、ゝ(r 、;::}.  :.-tコュャ.-‐::rfコュ:;:゙i´ : ::}
      〉、゙ ;‐´( 、 : :!: : ,.゛ -‐" ヽヽ.-‐":::〉-‐: ::}
      {、;/、::、; ゝ::;i゙: : :: :  . ./,,,, ,;;) : :::::}´ミ ::::}
      `{: ::; ゝ ミ:;}:: : : .  ./  `~´ヽ.::::::} : : ::::}
      ヽr 、 i.⌒:::i:: : :   /-‐`‐´ーヽ::::::}: ::.::::/
         {:、、;:!: ; :::〉;:.:ヽ:. .. .  -‐´ : ::::::/: :: ::::}
       ヽ、; :,`/:::|\:`: ‐: 、_.. ... ..::::::/:::::::::/
       .`r::'::´:::::::::i  > 、;;`_~;´/;:r:::´::`......、
     ,.r::´::::::::::::::::::::::::ヽ       .,.r:´:::::::::::::::::::::::::`ヽ、
  ,.r ´::::::::::::::::::::::::::::::::::::ヽ    ./::::::::::::::::::::::::::::::::::::::::::::`ヽ、
./:::::::::::::::::::::::::::::::::::::::::::::::::i   .,t´::::::::::::::::::::::::::::::::::::::::::::::::::::::::::`ヽ
::::::::::::::::::::::::::::::::::::::::::::::::::::::::}  ./::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヽ
  ヨハン・ゼバスティアン・バッファ(Johann Sebastian buffer)
0401デフォルトの名無しさん2015/04/12(日) 10:17:32.81ID:lLs4nXqS
バッファとキャッシュの違いって何ですか?
0402デフォルトの名無しさん2015/04/12(日) 10:25:55.45ID:0qAnmAgd
なぜまずググることをしないのか
0403デフォルトの名無しさん2015/04/12(日) 10:48:51.55ID:dgOnfcNk
もうC言語から脱線してるし
バッファ厨はNGに入れて無視しましょ
0404デフォルトの名無しさん2015/04/12(日) 10:54:37.90ID:uieaeE3y
>>396

原理を覆す気は在りませんが CPU には Memory が無いので Cashe は存在しないと考えられますが…
0405デフォルトの名無しさん2015/04/12(日) 10:57:36.00ID:f/YMZojg
レジスタはメモリーじゃないのか
0406デフォルトの名無しさん2015/04/12(日) 10:59:20.48ID:JSEloFFa
教科書とか、授業に出ていた人のノートを借りて読んだ方がいいよ

CPUにもメモリは載ってるよ。CPUによるけどさ。
0407デフォルトの名無しさん2015/04/12(日) 11:04:49.70ID:5IvJvm44
だね。どのCPUなのか型番で言ってくれないと議論にならない
0408デフォルトの名無しさん2015/04/12(日) 11:08:40.56ID:BQBr0rdt
>>404
> Cashe は
釣りでしょ、解散!
0409デフォルトの名無しさん2015/04/12(日) 11:42:19.09ID:BibiZULK
キャシー
0410デフォルトの名無しさん2015/04/12(日) 11:48:01.37ID:km7gypTw
塚本?
0411デフォルトの名無しさん2015/04/12(日) 12:15:10.90ID:uieaeE3y
>>406-407

intel です…
型番は必要ですか?
0412デフォルトの名無しさん2015/04/12(日) 12:27:36.04ID:JSEloFFa
教えを請う側の態度じゃないな

教える側が、どのCPUか型番を言えと言ってるんだから言えよ
0413デフォルトの名無しさん2015/04/12(日) 13:08:12.43ID:f/YMZojg
intelなら型番でググればどれだけメモリ乗ってるか書いてあるだろうに
0414デフォルトの名無しさん2015/04/12(日) 16:05:59.14ID:5IvJvm44
>>397 見る限り、質問することすらまだ早い知識レベルなので、まずは自分で調べろってこと
0415デフォルトの名無しさん2015/04/13(月) 00:15:55.92ID:XrkvqAK6
すみません質問です。

if文の判定部分に関数を入れて、そのまま判定を行っているのですが
unsign char型(以後UBと表記)ですべて統一しているのに、マイナスの判定になります…。
これでどうしてvalに2が代入されるのでしょうか…助けてください。
ちなみに、ifの判定をこのようにキャストして書くと上手くいきます。→ (UB)abc() > 0
スマホからなので読みにくいかもしれません。

void main(void){

UB val =0;

if(abc() > 0){

val=1;

}else{

val=2;
}

}

UB abc(void){

UB temp=0x80;

return temp;
}
0416デフォルトの名無しさん2015/04/13(月) 00:34:58.75ID:/iDNJK3C
環境は?
ideoneとかに、コンパイルが通って、その現象が再現するコード張ってみてくれる?
0417Office & Gamers ◆G144Hzgh2.0e 2015/04/13(月) 00:37:17.36ID:zG5LWDsu
>UB abc(void){

これ何だろう?w
0418Office & Gamers ◆G144Hzgh2.0e 2015/04/13(月) 00:39:48.79ID:zG5LWDsu
毎日このレベルなのか?w
0419デフォルトの名無しさん2015/04/13(月) 00:56:24.32ID:+6B1BJ1B
俺も初心者だからよくわかんないんだけど、ifの中身って文字列を比較してるんじゃなくてポインタの比較をしてるだけ、みたいなのは関係ないのかな
0420デフォルトの名無しさん2015/04/13(月) 00:58:50.52ID:hGbEnssU
>>415
別におかしくないんじゃないか?

http://ideone.com/IMayu6
0421デフォルトの名無しさん2015/04/13(月) 00:59:59.05ID:Jx8Ct1XZ
プロトタイプ宣言なしでint abc()で仮定されたのに
abc定義でなぜかコンパイラがエラー出さずにおかしくなってるのか?
0422デフォルトの名無しさん2015/04/13(月) 01:10:02.82ID:mAPdjQMm
>>416
>>419
>>420
>>421
ありがとうございます!!
環境までは詳しく理解出来ず分かりません…すみません。
そのURLの内容は、意図した通り動いているみたいです。
関数abc()が別のファイルで、extern UB abc(void)の記述が無いからでしょうか。
ただ、別ファイルの関数を使う場合、書かなくてもコンパイラが勝手にやってくれると習ったんですが…違うんでしょうか。
コンパイルでエラーは出ません。
明日もう一度試してみます…
ちなみに、上手く行かないのが0x80のときだけなので
最上位ビットが関係あるのは間違いなさそうです。
0423デフォルトの名無しさん2015/04/13(月) 01:51:06.05ID:hGbEnssU
>>422
>関数abc()が別のファイルで、extern UB abc(void)の記述が無いからでしょうか。
>ただ、別ファイルの関数を使う場合、書かなくてもコンパイラが勝手にやってくれると習ったんですが…違うんでしょうか。
コンパイラが別ファイルに関数が定義されてるものとして、そしてそれを
関数暗黙の宣言でint型と仮定してコンパイルして、結果としてコンパイルが通っているだけ。

ヘッダーファイルに関数宣言を書いて読み込ませるのがいいかと。

あとコンパイル時のログを見たり、警告レベルを変えたりするといろいろわかることもある。
0424Office & Gamers ◆G144Hzgh2.0e 2015/04/13(月) 01:57:46.56ID:zG5LWDsu
>unsign char型(以後UBと表記)ですべて統一しているのに、マイナスの判定になります…。

あんま関係ないけど、

>unsign char

unsigned charでは?w
0425デフォルトの名無しさん2015/04/13(月) 01:59:50.87ID:XrkvqAK6
>>423
ありがとうございます!!
その可能性が高そうです、今日試してみます!


>>424
1人だけレベルの違う回答ありがとうございます!
0426Office & Gamers ◆G144Hzgh2.0e 2015/04/13(月) 02:03:01.96ID:zG5LWDsu
型宣言にマクロ使うのはやめた方がいいような…
0427Office & Gamers ◆G144Hzgh2.0e 2015/04/13(月) 02:09:15.32ID:zG5LWDsu
フツーにやらないコトが2chでよく出てきてワロタw
C以前に何かをやり直すべきでは?w
0428デフォルトの名無しさん2015/04/13(月) 06:05:09.22ID:3yz2e6d2
>>422
そんな間違い教えたのどこのどいつだよ
0429デフォルトの名無しさん2015/04/13(月) 07:17:04.29ID:SDgL5/lj
教える側も何も分かっていない初心者ってとこかな
0430デフォルトの名無しさん2015/04/13(月) 10:47:22.56ID:zKKia///
unsigned char が UB ってどの界隈の流儀かと思ってggったらTRONがそうなのな
0431デフォルトの名無しさん2015/04/13(月) 15:15:19.15ID:CSX0O65J
>>415
abc()は1バイトだけが戻り値として有効
なのに呼び出し元はintで値を見ている
1バイト以外の残りはゴミだ
0432デフォルトの名無しさん2015/04/13(月) 15:23:58.73ID:a7QtIk1p
コンパイルが通る ≠ 正しく動く

正しく動くものはコンパイルは通るが
コンパイルが通るからといって正しく動く保障は何もない

正しく動くようなコードを書きましょう
0433デフォルトの名無しさん2015/04/13(月) 16:18:02.00ID:Y8nurpVH
じゃあ、コンパイルが通れば正しく動くようにコンパイラを改良すれば
馬鹿にも使えるようになって、馬鹿な質問に悩まされずに済むよね?(´・ω・`)
0434片山博文MZ ◆T6xkBnTXz7B0 2015/04/13(月) 16:23:33.40ID:aa2kknXQ
正しさはだれが保証するの?(´・ω・`)
0435デフォルトの名無しさん2015/04/13(月) 16:33:42.35ID:Y8nurpVH
誰も保証しないよ?コンパイルが通れば正しく動くようにコンパイラを
改良するんだから、それでいいんじゃないかな?(´・ω・`)
0436片山博文MZ ◆T6xkBnTXz7B0 2015/04/13(月) 16:39:44.89ID:aa2kknXQ
「正しく動く」が未定義。コンパイラーに仕様書を読ませるのは難しい。(´・ω・`)
0437デフォルトの名無しさん2015/04/13(月) 17:24:43.99ID:NulSFsZC
正しいとは書かれた通りに動く事。
大抵のコンパイラは書かれた通りに動くコードを生成する。
0438片山博文MZ ◆T6xkBnTXz7B0 2015/04/13(月) 17:30:26.57ID:aa2kknXQ
メモリーリークや捕捉されない例外発生まで正しいとは言えないだろ
0439デフォルトの名無しさん2015/04/13(月) 17:33:37.70ID:Y8nurpVH
コンパイラーに仕様書を読ませる必要はないよね?(´・ω・`)
コンパイルが通れば正しい動作になるような定義や制限を指定できるように
すればいいだけだよね?(´・ω・`)
0440片山博文MZ ◆T6xkBnTXz7B0 2015/04/13(月) 17:39:18.45ID:aa2kknXQ
そういう制約でプログラミングしたいなら、Haskelのような関数型言語使えばいい
0441片山博文MZ ◆T6xkBnTXz7B0 2015/04/13(月) 18:06:48.51ID:aa2kknXQ
ハスケルならプログラミングをプログラミングできるよ
0442デフォルトの名無しさん2015/04/13(月) 18:42:59.89ID:AcTVCjAU
仮に >>433 が望むコンパイラが奇跡的に出来たとして
今度はコンパイルが通るプログラムを書けるのかと

半年かかってもコンパイルが通りません(泣)というオチ
0443デフォルトの名無しさん2015/04/13(月) 20:56:48.88ID:IDsAK2Rh
double型の変数同士の比較の質問です

小数点以下が0(つまり整数)同士のときは
イコールイコールで比較しても良いですか?
0444デフォルトの名無しさん2015/04/13(月) 21:00:33.40ID:9EsgSL1z
浮動小数点数というものを調べてみよう
0445デフォルトの名無しさん2015/04/13(月) 21:28:09.44ID:kdjswjr8
==で比較してもいいよ。 同じ値ならtrue
0446デフォルトの名無しさん2015/04/13(月) 21:31:36.48ID:NPPeHBbv
>>433
チューリング完全な汎用言語では無理。
4GL、DSLあるいはマクロと呼ばれるような記述力を限定した言語であれば可能かもしれんが。
0447デフォルトの名無しさん2015/04/13(月) 21:38:19.53ID:92QVV6Zl
プログラムA を与えるとそれが止まるか止まらないかを判定するプログラム H が存在したとする‥
止まるとき止まらない、止まらないときとまる‥
ぐだぐだハイ論破‥
0448デフォルトの名無しさん2015/04/13(月) 21:43:06.97ID:JQ1iUXgi
ソース吐くぐらいならバイナリーコード吐けよ。
0449デフォルトの名無しさん2015/04/13(月) 22:54:27.64ID:DMsADE4F
>>447
いまだに未解決問題なんですがそれは
0450Office & Gamers ◆G144Hzgh2.0e 2015/04/14(火) 01:07:55.82ID:0kYWajMh
>>443
10年に1度も遭遇しない例w
0451デフォルトの名無しさん2015/04/14(火) 06:45:40.41ID:u43yaxAf
>>449
未解決=存在するかしないかわからない、じゃないよ、存在しないんだよ
0452デフォルトの名無しさん2015/04/14(火) 10:16:58.39ID:/6kj9/fT
>>451
多くの研究者がそう考えているがまだ証明されてはいない。
尤も証明されてしまうと演算能力の問題はあるにしても
現在の公開鍵暗号化の安全性が脅かされることになる訳だが…
0453デフォルトの名無しさん2015/04/14(火) 10:40:39.01ID:T110a2Mj
>>452
暗号の安全性が脅かされるのはP=NPが証明された場合でしょ
考えられているようにP≠NPが証明された場合は何の問題もない
0454デフォルトの名無しさん2015/04/14(火) 13:00:51.51ID:BUcE4O7z
>>452
知ったかぶりはやめた方が良い。
>>447はプログラムの停止性問題を証明するために大昔に使われた、中学生にも理解可能な明快な論法だ。
0455デフォルトの名無しさん2015/04/14(火) 18:31:41.46ID:u43yaxAf
>>454
明快、かな?‥自己言及はあまり好きじゃないんだ、胡散臭い‥
0456デフォルトの名無しさん2015/04/15(水) 11:26:49.49ID:C8f6FFCh
自作インタプリタ処理系をJITコンパイラに改造したいのですが
機械語の生成後どのようにそのコードを実行させたらよいでしょうか
つまりIPレジスタへ機械語の格納した配列のポインタをセットするのでしょうか?
0457デフォルトの名無しさん2015/04/15(水) 11:43:17.67ID:elzEhIzV
ふつうJITコンパイラって機械語でなくJAVA VMのように仮想マシンみたいなところで動かしてるのでは?
C#は違うようだが。
予想ではDLLの仕組みと同様で必要に応じてビルドしてそれをDLLのような形で保存しておき動的にロードするのでは?
0458デフォルトの名無しさん2015/04/15(水) 11:48:42.11ID:C8f6FFCh
>>457
仮想マシンですか?
ネイティブコードを実行したいのですが
それと一旦ファイルに落とすとなるとそのオーバヘッドも大きいあると思うのです
0459デフォルトの名無しさん2015/04/15(水) 11:53:20.44ID:oXflK9zc
OSが許してくれるのかねぇ
データ領域上のメモリを機械コードと仮定して、そこへロングジャンプするとか
0460デフォルトの名無しさん2015/04/15(水) 11:55:13.21ID:elzEhIzV
nodejsはオープンソースだった思うし、仮想マシンなどが動作せずにJITコンパイルしているらしいから
これがいいんじゃないか。
0461デフォルトの名無しさん2015/04/15(水) 11:59:51.95ID:elzEhIzV
.NET Frameworkの仕組みを再確認、不測のトラブルに備えよう:CodeZine


EXEファイルを実行すると、まずCPUアーキテクチャ(32bit/64bit等)に合わせて「MScorEE.dll」、.NET Frameworkのバージョンに合わせて「MSCorWks.dll」が選定される。
続いて、アセンブリローダにより、アセンブリのマニフェスト/署名確認、アセンブリのバージョン選定/検索、パーミッションの設定などが行われる。

また、中間言語MSILのコードは、JIT(Just In Time)コンパイラにより、実行可能なネイティブコードにコンパイルされた後、メモリに格納され、実行される(一度コンパイルされたものは再度コンパイルされない)。

アセンブリの配置場所・配置方法

.NET Frameworkでは、アセンブリ単位で高度なバージョン管理が行われるため、従来のようなレジストリへの登録が不要。

必要なアセンブリは、GAC(Global Assembly Cache)と呼ばれる共有スペース、構成ファイルの<codeBase>に記述されている場所の順で検索され、見つからない場合はProbingというプロセスに入る。
アプリケーションが存在するディレクトリ以下で「アセンブリ名+.dll/.exe」が検索され、それでも見つからないと例外(System.IO.FileNotFoundException)となる。
なお、原則Probingは避け、GACや<codeBase>を利用すべきとしている。

なお、GACに登録するには厳密名を持つ必要があり、登録されているアセンブリ一覧は「Windows」フォルダ直下の「assembly」フォルダで確認できる(実際にアセンブリがこのディレクトリに存在するわけではない)。

アセンブリの配置方法には、XCopy(ツリー構造のままコピー)による単純な配置、Windowsインストーラ(.msiファイル)による配置、ClickOnce(インターネット経由のインストール)による配置がある。

http://codezine.jp/article/detail/2236
0462デフォルトの名無しさん2015/04/15(水) 12:03:13.23ID:p+DXba6a
CRuby (MRI, Matz's Ruby Interpreter,
C言語で、Matzが作った処理系)
JRuby (Java, JVMを使った処理系)
Rubinius(Ruby, C++, LLVMを使った処理系)

速いのは、GCなど長年の実績のある、JVMを使った、JRuby。
一方、ソースコードが見やすく、勉強になるのはRubinius


Rubyのしくみ、2014

年末に出た外人の翻訳本で、
Rubyの実装系、Ruby1.9のRuby仮想マシンの本。
内容は新しく、Ruby2.0のキーワード引数まで含む
0463Office & Gamers ◆G144Hzgh2.0e 2015/04/15(水) 12:20:21.02ID:6vmnXgxy
逆コンパイルされるリスクを考えると.NETは不味いかもなw
0464デフォルトの名無しさん2015/04/15(水) 12:34:50.29ID:/EekHbuv
>>459
ちゃんと実行許可してるメモリに書き込めば大丈夫でしょ
0465デフォルトの名無しさん2015/04/15(水) 12:47:39.56ID:oXflK9zc
>>464
(osのローダーによらず)、実行許可してるメモリに直接書き込む手段が
あるかどうかってことになりそうだわね
0466デフォルトの名無しさん2015/04/15(水) 12:53:42.85ID:C8f6FFCh
>>465
それであるのでしょうか
0467デフォルトの名無しさん2015/04/15(水) 13:05:47.09ID:/EekHbuv
OS問わずはともかくwindowsならVirtualAllocでPAGE_EXECUTE付けてメモリ確保すればいい
0468デフォルトの名無しさん2015/04/15(水) 13:41:49.55ID:nez808pG
unsigned short と WORD
unsigned int と DWORD
って何が違うんですか・・・?
0469デフォルトの名無しさん2015/04/15(水) 13:57:07.79ID:LX/U9UXu
shortとint
0470デフォルトの名無しさん2015/04/15(水) 13:57:26.19ID:nez808pG
あー分かりました
どっかのヘッダのtypedefで宣言されてるんですね
0471デフォルトの名無しさん2015/04/15(水) 13:59:27.26ID:6y5mm0JJ
unsigned short は実定義 WORD は本来存在しないtypedefや#define
unsigned int と DWORDもまた同じ
0472デフォルトの名無しさん2015/04/15(水) 14:00:03.22ID:p+DXba6a
たぶん、#define した単なる別名だろ
0473デフォルトの名無しさん2015/04/15(水) 14:10:53.90ID:sh/waqNi
20年以上戦えるOSになるために必要なおまじないさ
0474デフォルトの名無しさん2015/04/15(水) 14:10:58.86ID:nez808pG
>>469-472辺り
ありがとうございます
04754432015/04/15(水) 14:11:21.76ID:T/6eZcpY
>>444-445
ありがとう
小数点部があるかどうかを簡単に調べたくて
たぶん大丈夫だとは思ってたんだけど
0476デフォルトの名無しさん2015/04/15(水) 15:02:48.46ID:BUAMs/hC
>>467
調べてみます
ありがとうございました
0477デフォルトの名無しさん2015/04/15(水) 19:24:04.76ID:BUAMs/hC
よし
UNIXではmmapの第三引数にPORT_EXECを渡せばいいらしいことがわかった
クロスプラットフォームにするにはそれらのラッパーを作れば良さそうだ
0478デフォルトの名無しさん2015/04/15(水) 20:01:58.59ID:N55KAMEZ
すいません、配列をmemsetで初期化するときに、
char data[10];
memset(data, 1, sizeof(data));
としても、
memset(&data, 1, sizeof(data));
としても中身を見ると1で初期化されてるんですが、
どっちも問題ないんでしょうか
0479デフォルトの名無しさん2015/04/15(水) 20:16:43.30ID:mAbpXmH/
http://ideone.com/ScooDe

配列 type array[<size>]; での
array と &array は例外的に同じポインタを指す

んだったけかなぁ
0480デフォルトの名無しさん2015/04/15(水) 21:05:17.92ID:YYpYNbny
c++だと。
#include<iostream>
#include <typeinfo>
using namespace std;
int main(void) {
int a[10];
cout << typeid (a).name() << '\n';
cout << typeid (&a).name() << '\n';
cout << typeid (&a[0]).name() << '\n';
return 0;
}
0481Office & Gamers ◆G144Hzgh2.0e 2015/04/16(木) 01:07:41.08ID:sQiZAhF+
それ先頭だけだろw
0482デフォルトの名無しさん2015/04/16(木) 23:17:55.07ID:ODecBIUR
マジ組込みはゴミ仕事
0483デフォルトの名無しさん2015/04/17(金) 01:48:59.89ID:V+O/rDGL
妄想乙
0484デフォルトの名無しさん2015/04/17(金) 09:30:46.95ID:hhi93tBw
仕事に貴賎をつけるやつは特亜の血筋。
0485デフォルトの名無しさん2015/04/17(金) 19:12:56.55ID:1brv0V7U
#include<stdio.h>
int main(void) {
int a[10];
printf("%8p %8p\n",a,a+1);
printf("%8p %8p\n",&a,&a+1);
printf("%8p %8p\n",&a[0],&a[0]+1);
return 0;
}
0486デフォルトの名無しさん2015/04/17(金) 20:55:29.70ID:wY1nPylN
メーカーの仕事はマジ糞
ドキュメント作成、会議、下請け管理、オシロスコープを使った検査みたいなゴミ作業が9割5分
コードの読み書きも碌にしないで何がソフトウェア技術者なの
GoogleやMicrosoftの人間がドキュメント作成ばっかりやってプログラミングは下請け丸投げとかしてるかよ
ソフト作りたくて情報科に進学したんやないんか
ドキュメント作成、会議、下請け管理とか技術者じゃねえだろマジゴミ仕事
0487デフォルトの名無しさん2015/04/17(金) 21:58:30.13ID:4DjBpZO2
ならお前が直接客にコード売って来い。
0488デフォルトの名無しさん2015/04/17(金) 22:24:28.10ID:GXONZpip
メーカーの仕事辞めてGoogleやMicrosoftで働けばいいのに
0489Office & Gamers ◆G144Hzgh2.0e 2015/04/18(土) 00:53:47.67ID:yZFnrc/6
>>486
いやならラーメン屋のオヤジでもやれw
0490Office & Gamers ◆G144Hzgh2.0e 2015/04/18(土) 00:57:10.01ID:yZFnrc/6
会社ってのはいろんなイキモノがいるから、意思疎通のための時間が多くなるんだよなw
基本的に悪平等、できるものができないものに仕える構造だよw

協調性(=バカに合わせる懐の深さ)も必要w
0491Office & Gamers ◆G144Hzgh2.0e 2015/04/18(土) 01:18:45.23ID:yZFnrc/6
>ソフト作りたくて情報科に進学したんやないんか
>ドキュメント作成、会議、下請け管理とか技術者じゃねえだろマジゴミ仕事

ワロタw

顧客先の業務内容を知るコトが重要なのに、それができないんだったら会社にいる意味ないよw
研究者になれw
0492デフォルトの名無しさん2015/04/18(土) 03:00:04.80ID:Tv+tD0iJ
ものづくりへの技術者の劣等感が招いた、日本のソフトウエアの悲惨
http://itpro.nikkeibp.co.jp/atcl/column/14/463805/040900032/
0493デフォルトの名無しさん2015/04/18(土) 03:08:04.57ID:Tv+tD0iJ
>組み込みソフトだけでは負ける
> ソフトを機能として製品に組み込んでしまえば、それで終わりだが、サービスとして提供すれば新たにお金が取れるし、
>顧客の満足度も高まる。さらにAPI(アプリケーション・プログラミング・インタフェース)などを公開してソフトを他社にも
>作ってもらえば、製品の付加価値をさらに高めることになる。「モノ」の安さで攻勢をかける新興国のメーカーの追撃をかわすのは、
>本来ならこの方法が最善だったのだ。

>ビジネスモデルづくりとしてのソフト開発を
> そんなわけで、エンタープライズITだけでなく組み込みソフトの領域でも、そろそろ「図面通り造る」という、ものづくりの発想から
>脱却しないと日本の産業は大変なことになる。ソフト開発のものづくりではなく、サービスづくり、ビジネスモデルづくりである。
>その認識を持たないと、ビジネスモデルづくりが三度のメシより好きなシリコンバレーの技術者と同じスタートラインにすらつけない。
0494デフォルトの名無しさん2015/04/18(土) 04:04:44.52ID:j/wjXDDU
個別の製品を売っておしまいじゃなく、

例えば、新幹線という、運営保守まで全てをひっくるめた、
より大きなシステム自体(サービス)を売る
0495デフォルトの名無しさん2015/04/18(土) 08:12:35.82ID:7ovsCVgN
>>492
こういう駄文を鵜呑みにするのが多いうちは、確かに伸びないだろうな。
どこが駄文かって言うと、記事内の「ソフト」を「ハード」に書き換えても似たような品質の記事になってしまう点。
つまり論理性が無い。
0496デフォルトの名無しさん2015/04/18(土) 08:38:15.62ID:EXqN9qYN
メーカーはゴミ
バブル期以前の景気の良い時代に就職した
40代以上の人間が仕切っている組織は全部ゴミ
0497Office & Gamers ◆G144Hzgh2.0e 2015/04/18(土) 08:54:44.03ID:yZFnrc/6
>>496
んじゃAppStoreに開発者登録して独立するって言う方法もあるよw
0498デフォルトの名無しさん2015/04/18(土) 10:42:56.70ID:EXqN9qYN
ソフト開発の仕事ができなくてもメーカーは安定してるから別にいいやと思えてしまうお前らもおかしい
下請け丸投げで技術蓄積を放棄して目先の利益だけ得られれば良い年金支給まで逃げ切れれば良い
そんな考えの人間ばかりだからバカにしていた韓国企業にすら負けたんだ
良い物を作ってたくさんの人に使ってもらいたいそういう純粋な気持ちで理系進学を志したんじゃないのか
それをドキュメント作成、会議、下請け丸投げで良しとする神経にマジ軽蔑するわー
日本経済の足を引っ張る癌細胞だという自己認識を持つべき
0499デフォルトの名無しさん2015/04/18(土) 10:52:16.83ID:BOnvUYOC
>>498
そこまで言うのなら自ら率先して企業風土を変えるなり起業するなりの行動を起こせよ。
こんなところで女々しく愚痴ってるだけだとお前自身がゴミ以下だと知れ。
いい加減、目障りだ。
0500デフォルトの名無しさん2015/04/18(土) 11:12:18.55ID:f5uPGWnR
>>498の言っていることってどうも現実感が無いんだよな
ネットの歪んだ情報を自分の意見のように述べているけど、どうにも胡散臭さが隠しきれていない
ソフトだけに視野狭窄している役立たずにしか思えない
0501デフォルトの名無しさん2015/04/18(土) 11:37:32.03ID:BNt8ZDmj
製造をやりたいなら、就職先を間違えてるんだろ。
ゼネコン就職して穴掘りをさせてもらえない!って騒いだって意味ないのと同じに思えるんだけど。

本当に旗振り役を満足に出来るようになってからなら転職先も引く手あまただろうし、ものは経験だと思って
今できることを十分に経験にしとけば? それが出来るようになった頃なら、会社自体も変えられるかもよ。
0502Office & Gamers ◆G144Hzgh2.0e 2015/04/18(土) 11:43:07.65ID:yZFnrc/6
んじゃとっととVC++覚えようねw
0503デフォルトの名無しさん2015/04/21(火) 12:20:46.73ID:r0bMc7ZT
わしはMFCぜんぶ覚えた
0504デフォルトの名無しさん2015/04/21(火) 22:45:58.31ID:m3zlAJZ/
MFCってwin32apiのラッパ?
0505デフォルトの名無しさん2015/04/24(金) 19:51:25.61ID:ASiwTaOh
ctrl+zでEOFを入力するとバグるので対応したいんですけど
#include<stdio.h>int main(void){
char str[10];
int ret;
int i;

for(i = 0;i < 5;i++){
ret = scanf("%9[^\n]%*[^\n]%*c",str);
printf("str %s\nret %d\n",str,ret);
}
return 0;}
1文字目にEOFだと代入はされませんがバッファクリアされ問題なし
ただ2文字目以降にEOF(aa ctrl+zとか)だと残りの入力すべてスルーされます
無限ループにしていようものなら悲劇が起こります
これずっとEOFがバッファに残って悪さしているんでしょうか?
1文字目なら平気で2文字目以降は悪さする理由が知りたいです
0506デフォルトの名無しさん2015/04/24(金) 20:28:23.37ID:EVUoHV0Q
EOFと言う文字が読まれるのでは無い。
EOF(と言う状態)になったファイルからは二度と読む事が出来なくなる。
0507デフォルトの名無しさん2015/04/24(金) 21:05:35.46ID:r6061US2
悪さをしてるのはあなたのプログラムです
0508デフォルトの名無しさん2015/04/24(金) 21:09:10.29ID:ASiwTaOh
1文字目にEOFだと何も入力されてないのでEndもくそも無いので無視され
二文字目以降にEOFがあるとstdinがEOFという状態になってしまう?
多分ちゃんと理解してないですけどプログラムを終了させるのが無難ですかね
0509デフォルトの名無しさん2015/04/24(金) 21:24:36.53ID:X55/YHPN
操作ミスとプログラムミスが重なってますよ?(´・ω・`)

まず、5回入力があるという前提なのにctrl+zをしているのが最悪ですよね?(´・ω・`)
次に途中でEOFになるという可能性を無視している作り方が、さらに最悪ですよ?(´・ω・`)

結論としては、もう少し勉強した方がいいか、いっそCを諦めた方が
おまいさんを含めて全人類の幸福に繋がると思うよ?(´・ω・`)
0510デフォルトの名無しさん2015/04/24(金) 21:51:56.79ID:vlOeNW1P
>>505
理由を知りたいんら wiki scanf でネット検索すればでるよ。
詳しく解説されてるから。
0511デフォルトの名無しさん2015/04/24(金) 21:53:17.48ID:ASiwTaOh
あ、すいません。これはEOF入力の挙動を見るただのテストプログラムです
戻り値でEOFを入力したかわかるので対応は出来ます
なんというかひねくれた入力されても終了させず続行できないかなと思いました
0512デフォルトの名無しさん2015/04/24(金) 21:56:51.50ID:ASiwTaOh
scanfをfgetsにしても同じ結果です。そこは重要ではありません
ていうか書き込みすぎですねすいません
色々と教えてくれてありがとうございました
0513デフォルトの名無しさん2015/04/24(金) 22:30:38.87ID:2id89I46
fopen("CON","r")使って…
いや、なんでもない
0514デフォルトの名無しさん2015/04/24(金) 23:26:13.88ID:FlpLECNl
>>512
先頭でctrl+Zを入力されると、
strはクリアされずにゴミを表示することになりませんか?
0515デフォルトの名無しさん2015/04/24(金) 23:43:28.47ID:ASiwTaOh
確認しました、確かに。あぶないコード書いて申し訳ありません
0516デフォルトの名無しさん2015/04/25(土) 00:54:42.78ID:aBMMjkXv
>>515
>>506をもう一回読んだほうがいい
0517デフォルトの名無しさん2015/04/25(土) 18:21:54.94ID:Dty1TRvE
ctrl+zが入力されたら即終了させるようしようと思います
扱いに困ってもやもやしていましたがすっきりです。エラー対策にもなるし
変な質問してすいませんでした
0518デフォルトの名無しさん2015/04/25(土) 23:28:59.34ID:1qQ4OViY
思ったんですが、スクリプト言語とC言語ってどっちが先なんですか?

スクリプト言語とはcygwinで実行できるコマンドです。
sum
cat
mkdir
とかです。

スクリプト言語があればC言語のプログラムを代替できるじゃないですか?
そう考えるとスクリプト言語が後のような気もしますが…
0519デフォルトの名無しさん2015/04/25(土) 23:42:14.93ID:uBtkZLXE
日本語でおk
0520デフォルトの名無しさん2015/04/25(土) 23:55:00.87ID:RRePAnXv
今日初めてコマンドライン引数を知ったものです
コマンドライン引数にファイルを指定?して
中身を読み込み、処理をすることはできそうなのですが
ファイル名そのもの(の一部)を取得するには
どのようにすればよいでしょうか?
0521デフォルトの名無しさん2015/04/26(日) 00:08:12.06ID:mXAUe7wT
>>519
どっちが先か教えてほしい
mkdirとprintfはどっちが先?
0522デフォルトの名無しさん2015/04/26(日) 00:09:59.55ID:2Rez+dkg
>>520
日本ごむづかしいよ
ほしいもこうゆうことか
ttp://ratan.dyndns.info/MicrosoftVisualC++/filepointa2.html
0523デフォルトの名無しさん2015/04/26(日) 00:14:10.72ID:zOtZ5kho
>>522
ありがとうございます
しかし、違うと思います...
例えば
a.out hoge.dat
と入力したときに
hoge.dat
もしくは
hoge
という文字列を取得したいんです
説明下手ですみません
0524デフォルトの名無しさん2015/04/26(日) 00:14:50.79ID:5lQWV10m
エスパーしてあげよう。
argv[0]が君の求めているものだ。
0525デフォルトの名無しさん2015/04/26(日) 00:15:19.91ID:5lQWV10m
うわ、はずれ。
0526デフォルトの名無しさん2015/04/26(日) 00:19:32.97ID:zOtZ5kho
>>524
>>525
いえ、ハズレなことなさそうです
少なくともヒントは得られたっぽいです!

ありがとうございました
またお世話になりにくるかもしれませんが
0527デフォルトの名無しさん2015/04/26(日) 00:29:55.49ID:zOtZ5kho
もう帰ってきてしまいました...

さっきの続きになるのですが
hoge.datまたはhogeを~
なんて言ってましたが
本当はhogeだけが欲しかったのです
前者が抜き取れたらなんとかなるだろ
なんて考えてましたがいざできたと思ったら
思考停止してしまいました

ある文字列から.が来るまで別の文字列へコピーする方法
を考えればよいのですかね?

もしよければヒントお願いします
0528デフォルトの名無しさん2015/04/26(日) 00:30:43.41ID:5lQWV10m
strchr
0529デフォルトの名無しさん2015/04/26(日) 00:40:40.89ID:zOtZ5kho
>>528
ありがとうございます
strchr調べました
.がある位置を調べることができるのはわかったのですが
それより前の文字列を抜き出すには
どのようにすればよいでしょうか?
0530デフォルトの名無しさん2015/04/26(日) 00:45:58.15ID:jps7khmk
応用力がないならプログラミングは諦めた方がいいよね?(´・ω・`)
0531デフォルトの名無しさん2015/04/26(日) 00:55:27.49ID:zOtZ5kho
>>530
そうですよね
流石にポンポン投げすぎました
もう少し練ってみます
0532デフォルトの名無しさん2015/04/26(日) 01:14:48.33ID:zOtZ5kho
sscanfと[^.]でできました
お騒がせしました
0533デフォルトの名無しさん2015/04/26(日) 03:02:38.57ID:/+jU1ZiF
コードに関する質問ではないのですが・・・

ポインタに関する質問です。
ポインタ学習でコード色々書いて試しているのですが
その中で何回も、プログラムのミスによってコマンドプロンプトが
強制終了で止まってしまいました。

それからなのですが、HDDのデータに異常が見られるようになりました。
HDD自体は異音もなく、破損はしていないようなのですが(CrystalDiskInfoで確認しました)
データがCRCエラーで読み込めなくなってしまった部分が多々出てきております。

これはやはりポインタのミスによって、引き起こされたことなのでしょうか?

ちなみにコーディングは以下の環境を使っておりました。
・Microsoft Visual Studio 2010
・EasyIDEC

お手数ですが、ご教授お願い致します。
0534デフォルトの名無しさん2015/04/26(日) 06:52:57.22ID:OgSLyDoz
んなわけねーだろアホか
0535デフォルトの名無しさん2015/04/26(日) 06:56:05.45ID:Q1VXGEBh
このスレにご教授は居るのかね
0536デフォルトの名無しさん2015/04/26(日) 07:48:43.70ID:hr5fj2k4
ご教授 間違い
ご教示 正解
0537デフォルトの名無しさん2015/04/26(日) 10:02:33.76ID:fv98dTeM
>>533
おそらくそうだろう

ポインタにより異常なメモリアクセスがされた
↓
Windowsがさじを投げてコマンドプロンプトごと強制終了
↓
その時更新中だったファイルが巻き込まれて破損
0538デフォルトの名無しさん2015/04/26(日) 10:39:34.00ID:m718dCEm
ディスクコントローラが読めないデータを、
ディスクコントローラが書き込めるのか?
書き込み途中で電源を落としたり、
書き込み最中にコントローラリセットでもしない限り
意図的にCRCエラーを書き込めるとは思わないけど
単にディスクの不良なんでは?
0539デフォルトの名無しさん2015/04/26(日) 10:49:04.74ID:oidXsJ58
たまたま不運が重なっただけでしょ。
少なくとも「そのプログラムが原因である」とは言えないと思う。

仮にあったとしても、風が吹いて桶屋が儲かるレベル以下の因果関係でしょ。
0540デフォルトの名無しさん2015/04/26(日) 11:18:22.47ID:qg161fiO
昨晩うるさかったものです

一応形にはなってきたのですが
まだコンパイルエラーが残っています
そのうちの1つからわからないことが出てきました

バケットソートを使えとのことなんですが
調べてみると整数なら~みたいなことが書いてあるのに
ソート対象が平均点(double型)なんです

これは合計点でソートすればよいのでしょうか?
仮にそうだとしたら0~300(点)になるのですが
バケットソートを使うのに範囲が
大きすぎたりしませんか?
0541デフォルトの名無しさん2015/04/26(日) 11:23:10.96ID:2npT22yp
>>540
昨日のことなんか知らず今日はじめて読む人のことを考えて書いてくれ
あとコードを晒せ
0542520, 523, 5402015/04/26(日) 12:14:17.45ID:qg161fiO
すみません
とりあえず
https://ideone.com/vXrIyf
でいいんですかね...?
ポインタをあまり理解しないまま書いてるので
質問のこと以外でも何かあればお願いします

とりあえずエラーを無くしたいです
課題なのであまり任せすぎると1にあるように
そっちのスレへ行った方がいい気もしますが
一応丸投げではなく教えてほしいと思ってるので...
0543520, 523, 5402015/04/26(日) 12:17:37.86ID:qg161fiO
すみません
エラーを忘れていました
540の通り合計点でやろうとしたので
これだけが残っています

$ gcc test.c
test.c: 関数 ‘bucket_sort’ 内:
test.c:66:20: 警告: 互換性のないポインタ型からの代入です
x[j--] = &buckets[i];
^
0544デフォルトの名無しさん2015/04/26(日) 12:54:49.50ID:fQCkpbM6
配列、ポインタ、構造体、ソートアルゴリズムと
いっぺんに勉強しようとしてるのかな?
小分けにして少しずつ進めた方がいいかも
0545デフォルトの名無しさん2015/04/26(日) 13:05:21.01ID:m718dCEm
>>543
>student *x[]
>int buckets[M]
>x[j--] = &buckets[i];

この辺は聞く前に自分で気がついてほしいな。
たぶんどこかのサイトからコピペしたんだろうけど、
何をしているかを理解してから使う方が良いと思う。
0546デフォルトの名無しさん2015/04/26(日) 13:26:31.44ID:qg161fiO
>>544
>>545
お二人ともありがとうございます
ポインタなどからもう一度勉強し直してきます

ど素人がいっぺんにやるもんじゃないですね
0547デフォルトの名無しさん2015/04/26(日) 14:05:21.85ID:5lQWV10m
授業の課題ならそれに至るまでに教えてくれてるだろ。
授業料払った客なんだから遠慮なく先生に聞きなさい。
0548デフォルトの名無しさん2015/04/26(日) 14:21:41.03ID:qg161fiO
>>547
普通の課題とは違いまして
これが今月中にできれば
今年の授業は普通と違うことを
やらしてあげるよってものなので
絶対に終わらさないといけない
ってものじゃないんですよね

ただその普通と違うことというのに
興味のあることがあるのでこの課題に
チャレンジしてみようかと思っただけなんです

高専2年なんですが1年の授業を考えると
普通の授業だけだとつまらないとも感じてます
0549デフォルトの名無しさん2015/04/26(日) 15:53:23.61ID:VbszMtBa
句読点使って改行減らした方がいいよ
そういう些細な事でも気に障る人もいるからね
0550デフォルトの名無しさん2015/04/26(日) 16:25:18.16ID:isTdCshV
普通はそうかもしれんけど2chは別にいいよ
0551デフォルトの名無しさん2015/04/26(日) 18:45:36.42ID:5lQWV10m
>>548
小中学校からプログラミングやってきた生徒を選別するんじゃないのか?
お前がそこに混ざってやって行けるのか?
はっきり言って、お前より出来る小学生は数千から数万人規模でいるだろう。
0552デフォルトの名無しさん2015/04/27(月) 14:31:25.70ID:yqS/aDtR
自分で解決できないと、その先の難しいのが来たときに
もっと首をしめることになる

かもしれない

(だからこそ選択的に篩いにかけてるんじゃないのかなぁ?)
0553デフォルトの名無しさん2015/04/28(火) 23:00:46.22ID:Vh533yHB
1から25までの全ての自然数で割り切れる自然数の最小値っていくらぐらいになります?
宿題なんで求め方とかは言わないでネ
0554デフォルトの名無しさん2015/04/28(火) 23:08:30.75ID:Vh533yHB
79,444,618,800ぐらいっすかね?
0555デフォルトの名無しさん2015/04/28(火) 23:08:34.85ID:CsdWamuz
中学生?
0556デフォルトの名無しさん2015/04/28(火) 23:08:46.01ID:JjkQ77hh
10 の 25 乗くらい
0557デフォルトの名無しさん2015/04/28(火) 23:27:47.60ID:Vh533yHB
小学生だヨ
>>556
いやさすがにそれは…
0558デフォルトの名無しさん2015/04/28(火) 23:57:51.25ID:DNyMJ+rL
1*2^4*3^2*5^2*7*11*13*17*23
0559デフォルトの名無しさん2015/04/28(火) 23:58:42.93ID:DNyMJ+rL
19抜けた
0560デフォルトの名無しさん2015/04/29(水) 07:22:51.47ID:iBeGX6EQ
16×9×25×7×11×13×17×19
=1163962800
0561デフォルトの名無しさん2015/04/29(水) 09:36:22.69ID:ETVs0A17
23 が抜けてる
0562デフォルトの名無しさん2015/04/29(水) 09:42:13.37ID:X6r8hO2k
>>553
お前絶対同級生だろwwwwwww
俺の結果だと1,001,340,624
0563デフォルトの名無しさん2015/04/29(水) 10:22:03.04ID:g6CBhBxf
26771144400
0564デフォルトの名無しさん2015/04/29(水) 10:45:39.52ID:X6r8hO2k
>>562
すまん普通にオーバーフローしてた
0565デフォルトの名無しさん2015/04/30(木) 06:58:50.64ID:zo0y0avD
2chにwwwwwwとか書き込む同級生なんてきもいよね
友達は選んだ方がいい
0566デフォルトの名無しさん2015/04/30(木) 07:23:29.97ID:/f/yXWTE
確かに >>565 とは友達になりたくないわ
0567デフォルトの名無しさん2015/04/30(木) 18:03:55.98ID:TCb6+RK4
562だけど、同級生=友達ってどういう思考回路やねん
0568デフォルトの名無しさん2015/04/30(木) 18:49:39.54ID:ga5gKNt3
>>564
この場合、解き方も大事だけど検算も重要
0569デフォルトの名無しさん2015/05/01(金) 03:13:13.78ID:ZjEFOS1C
1から10までの自然数の和を求めるサンプルみてて
main()
{
int i;
int sum=0;
for(i=1;i<=10;i++)
{
sum = sum + i;
}
print("%d\n",sum);
}

上記サンプルガネット上にあったのでひろってきたんだけど解答でいえば
厳密には合ってないですよね?
上のサンプルだと0から10までの和を求めてるので問題に沿ったプログラム
になってないとおもうんですが。0は自然数じゃない。
なんで
main
{
int i;
int sum;
sum=1;
for(i=2;i<=10;i++)
{
sum = sum + i;
}
printf("%d\n"sum);
}
が完璧な正解だと思うが、教授に見せたら分かりづらいいわれた。なんでやねん
0570デフォルトの名無しさん2015/05/01(金) 03:46:04.64ID:xRCjBIdQ
お前性格歪んでるなぁ
0571デフォルトの名無しさん2015/05/01(金) 06:19:44.46ID:zvb/ik8+
>>569
それ以前にprintfの引数間違えてる
コンパイルエラーだな
寝言はコンパイルしてから言いましょう
0572デフォルトの名無しさん2015/05/01(金) 06:50:57.11ID:8Yyb98Ue
>>569
int sum=0;
は代入であって「足している」わけではない、と考えるのはどうか?

変数をつかって何かするときに、「無害」なもので初期化するのは手筋だよ
0573デフォルトの名無しさん2015/05/01(金) 06:57:35.16ID:1iQu4yI/
>>572
そこじゃなくて
1をたす時に0と足している
0574デフォルトの名無しさん2015/05/01(金) 07:06:48.00ID:ZUYG54Ne
題意は
1+2+3+4+5+6+7+8+9+10
であり、加算は9回と言いたいのだろう。
それをアスペと言うのだ。
実務では公式使うからつまらん事に拘るな。
0575デフォルトの名無しさん2015/05/01(金) 07:08:16.19ID:zwA9F9si
>>569
学校で習う数学とは訳が違うんだよ
そういう正しさはプログラムでは求められてない
出力結果が同じになると確信できているのであれば
わかりやすい方を選ぶのはよくあること
0576デフォルトの名無しさん2015/05/01(金) 07:12:13.14ID:zwA9F9si
ちょっと語弊あったかも

数学の論理違って、プログラムはすごく現実的であり人間的でもあるから
泥臭いことが必要にもなるよってこと
0577デフォルトの名無しさん2015/05/01(金) 08:53:15.62ID:XsxuvEVX
いいとこに目をつけた
職業プログラマとして擦れるとここの人たちみたいになっちゃうんだけど
まあしょうがないよね
君は思った道を歩め
0578デフォルトの名無しさん2015/05/01(金) 08:59:17.54ID:cPV5bWNS
#include <stdio.h>
#define START 1
#define END 10

int sum(int i)
{
if (i > END) return 0;
else return i + sum(i + 1); /***再帰呼び出し***/
}

int main(void)
{
int i;
i = START;

printf("%d\n", sum(i));

return 0;
}

/***出力結果
55
***/
0579デフォルトの名無しさん2015/05/01(金) 08:59:18.48ID:zwA9F9si
言われてみれば泥臭いことばかりだったから擦れたかも
確かに疑問を持つこと自体はいいことだね
0580デフォルトの名無しさん2015/05/01(金) 09:02:45.67ID:59t8TCz8
そんなあなたに関数型言語
print $ sum [1..10]
0581デフォルトの名無しさん2015/05/01(金) 09:07:21.01ID:59t8TCz8
まあ0は加算の単位元だから気にしないってだけでしょうね
0582デフォルトの名無しさん2015/05/01(金) 10:00:46.82ID:/IuMPAj6
三日ぐらい前からプログラミング勉強はじめて今やっとif elseとか覚えた辺りなんだけど
覚えるコツってやっぱコードいっぱいうちこむしかないのかな
0583デフォルトの名無しさん2015/05/01(金) 10:47:12.55ID:QKt0Z1XW
打ち込んで、実際に動かしてみる
出来ればデバッガで少しづつ動かして変数の値とかを見ながらな
0584デフォルトの名無しさん2015/05/01(金) 10:53:07.54ID:/IuMPAj6
>>583
やっぱそうかー
ありがとう、頑張るわ
0585デフォルトの名無しさん2015/05/01(金) 11:33:23.41ID:mcLYTm8y
質問。線形リストのメモリ解放なんですが、前からfreeしてくとダメ、
みたいなことってあるんすか?
BOOL FreeNodes() {
 node_t *p;
 node_t *pp;
 p = Nodes->next;
 while(TRUE) {
  pp = p->next;
  if(pp == NULL) break;
  free(p->str);
  free(p);
  p = pp;
 }
 return TRUE;
}
とかやったんですがエラー出る。。。
0586デフォルトの名無しさん2015/05/01(金) 11:50:43.86ID:XsxuvEVX
どういうエラー?
リストが1件だったらとか、消した後のNodesの扱いとか。
0587デフォルトの名無しさん2015/05/01(金) 12:26:13.15ID:I4Z6LTxE
作りたいものがないんじゃいくらお勉強しても無駄
0588デフォルトの名無しさん2015/05/01(金) 12:38:22.15ID:mcLYTm8y
レスどもです。Win32APIのオベンキョウ中だったもので、エラーはSDKの
dbgheap.c内CheckBytes()なる関数で起き、unsigned char *pbという引数で渡された
中身が<不適切なPtr>となっています。
渡した文字列の問題であってC言語での線形リストの弄り方の問題でなければ
いいのですが、TCHARとかすらよくわかっとらん状態なんで混乱してました。
>>585でのやりかた自体に問題はないってことでおk?
0589デフォルトの名無しさん2015/05/01(金) 12:51:44.98ID:eNvbKuWQ
>>585
最後の要素の開放もれてない?
無限ループじゃなくてpがnullになるまでしゃいかんのか?
0590デフォルトの名無しさん2015/05/01(金) 12:56:38.62ID:eNvbKuWQ
それにNodes->nextかnullだと、p->next参照するタイミングでエラーになる
0591デフォルトの名無しさん2015/05/01(金) 12:58:11.46ID:eNvbKuWQ
誤字だらけ^^;
スマホで書いてるから許して
0592デフォルトの名無しさん2015/05/01(金) 13:34:08.22ID:HxX2ojlD
while(TRUE)をwhile(p!=NULL)にして
if(pp==NULL) break;を削除でいいんでね
0593デフォルトの名無しさん2015/05/01(金) 13:36:44.79ID:HxX2ojlD
それでもダメならNodesに繋げてるところで最後のnextにNULL指定してないか
0594デフォルトの名無しさん2015/05/01(金) 14:19:36.65ID:mcLYTm8y
いろいろどうもありがとう。
確かに>>585だと最後のNodeをfreeしませんね。そこも穴でした。
が、直してもエラーは出るし、Nodeはつくる度にnextにNULL入れてました。
そんなわけで他のところを疑ってみます。
ここ自体はおかしくないと分かっただけでも相当有難いっす。どもでした。
0595デフォルトの名無しさん2015/05/01(金) 14:25:13.58ID:XsxuvEVX
いやまあやり方はいろいろだけどループで境界に注意するとか
勉強になるからどんどんやってちょ
デバッガのステップ実行くらいはしたほうがいい
0596デフォルトの名無しさん2015/05/01(金) 14:53:26.04ID:8Yyb98Ue
たいがい printf() とか messagebox() で済ましている‥
ステップ実行は混乱するんだ‥時間もかかるしね‥
0597デフォルトの名無しさん2015/05/01(金) 15:04:35.92ID:59t8TCz8
それで済ませて時間かからずにできてるならいいけど
結局解決できなくて時間かかってるのでは
0598デフォルトの名無しさん2015/05/01(金) 15:07:20.05ID:cAuiYNmm
printf埋め込むのマンドクセ
gdbが嫌ならvisual studioでも使えばええ
0599デフォルトの名無しさん2015/05/01(金) 15:33:59.76ID:hrJIMyES
void FreeNodes() {
 node_t *p = Nodes;
 while(p != NULL) {
node_t *pp = p->next;
  free(p->str);
  p->str = NULL;  // (A) 本来なら不要
  free(p);
  p = pp;
 }
 Nodes = NULL;  // (B)
}
FreeNodes() を呼び出した後、
Nodes から線形リストを手繰りなおす可能性があるのなら (B) は必須
0600デフォルトの名無しさん2015/05/01(金) 15:44:06.51ID:XsxuvEVX
最後のfreeは、常に最後を保持するものを作って空のリストはそれを指す、
という可能性もあったからね、その場合はNodesがそれを指せばいいのでfreeいらない
常に最後はそれを指す必要はあるが、一個消しをうまく作ればそれを回すだけで全消しもできるし。
0601デフォルトの名無しさん2015/05/01(金) 15:57:19.76ID:mjAleie/
if('A' <= c && c <= 'Z')
c = c + ' ';

c = c + ' '; これの「 ' ' 」ってなんで必要なんですか?
0602デフォルトの名無しさん2015/05/01(金) 16:03:35.19ID:XsxuvEVX
>>601
多分、0x20 を足したかったんだろう、わかりにくいよなそれ。
0603デフォルトの名無しさん2015/05/01(金) 16:08:14.07ID:hrJIMyES
ASCIIコードでA〜Z を a〜z にしたいんだろうけど

c = c - 'A' + 'a' と書かずに
'A' が 65 で 'a' が 97 で差が丁度32だから 'a' - 'A' ⇒ ' '(半角スペース) にして
c = c + ' ';
にしてるんじゃないかなぁ

勝手に想像しているだけなので、別の理由かもしれない。
知らんけど。
0604デフォルトの名無しさん2015/05/01(金) 16:29:07.18ID:czAfvCC3
>>601
かわいい
0605デフォルトの名無しさん2015/05/01(金) 17:53:05.48ID:JeOZhz9V
asciiコード知ってれば、大文字と小文字の差が0x20なことは既知だから分からんでもない
ただ空白文字とは直接関係しないので紛らわしいとは思う
ちなみにc = c | ' ';でもいい
0606デフォルトの名無しさん2015/05/01(金) 19:21:29.84ID:PZEl4U1u
アスキーコードだって信じちゃっていいんだっけか。
CってEBCDIC使えないとか無いよね・・・? ダメだっけ?
0607デフォルトの名無しさん2015/05/01(金) 20:57:13.26ID:Nx5p4eae
ソースがunicodeに変換されてたらどうなるんだろ?
0608デフォルトの名無しさん2015/05/01(金) 21:56:14.01ID:nYrpaQdI
文字コードは難しくてダメだな
宇宙のことを考えると気が遠くなるのと同じ
テキストデータとバイナリデータの違いは何かと問われれば
君らは何と答えるか?
0609 ◆QZaw55cn4c 2015/05/01(金) 22:06:18.19ID:8Yyb98Ue
EBCDIC だろうと UTF-8/16/32 だろうと、大文字小文字変換に関しては問題ないように英語文化圏優先の配慮がなされている
0610デフォルトの名無しさん2015/05/01(金) 22:35:47.20ID:55qAYVzd
>>607
変換しないから平気
0611デフォルトの名無しさん2015/05/01(金) 23:28:50.09ID:pvsZfiKs
ファイルの作成日時とか更新日時とかの情報を読みたいんですが、
fopenで開いてもバイナリエディタで見てもそういう情報は見当たらないんですが
どうなってますか
0612デフォルトの名無しさん2015/05/01(金) 23:39:20.46ID:MchOqu5l
>>611
ファイルに書いてるわけ無いだろ
ファイルシステムに聞けバカ
0613 ◆QZaw55cn4c 2015/05/02(土) 00:01:30.99ID:jUtO03f6
>>611
linux/bsd なら fstat()
win32api なら GetFileTime()
0614 ◆W3Vs4e.72Q 2015/05/02(土) 01:54:32.25ID:zD1228MI
あ
0615デフォルトの名無しさん2015/05/02(土) 04:49:31.91ID:fGctg1FU
かかってこいよ
0616デフォルトの名無しさん2015/05/02(土) 14:34:17.18ID:3vlS11u7
>>609
嘘を書かないの
utf-16なら2バイト表現だからwchar型で表現でしょ
サンプルはchar型だから
0617 ◆QZaw55cn4c 2015/05/02(土) 16:21:56.04ID:jUtO03f6
>>616
まあまあそうお堅いことをいわないでよ‥そりゃ 16/32 はひろげなくっちゃだめだよ‥
0618デフォルトの名無しさん2015/05/02(土) 20:52:48.43ID:/5jAHNbh
tolowerって引数intだぞ
sizeof(int)==2の場合、どうやって32ビット渡すんだよ
0619デフォルトの名無しさん2015/05/02(土) 21:46:12.85ID:z9GOGwWK
>>585です。
その後もよーわからん状態だったんですが、 >>599さんみたいに
freeしたもんにNULLを代入したところエラーが出なくなりました。
ウインドウを閉じ、プログラムを終了するタイミングの処理だったので
「後から参照される」ことは考慮に入れてなかったのですが、そこがダメだったみたい。
いやー助かりました!
0620デフォルトの名無しさん2015/05/02(土) 22:20:09.64ID:/5jAHNbh
それは無能な解決方法
二回freeして落ちていたのを、二回目はNULLをfreeするようにしたから落ちなくなった
本来は二回freeしないようになおすべき
0621デフォルトの名無しさん2015/05/02(土) 23:09:52.29ID:URjlMtGt
何言ってるの
NULLのfreeはOKだよ
0622デフォルトの名無しさん2015/05/02(土) 23:17:20.18ID:hG3MztA5
システム的に問題ないから何度も NULL ポインタを free するのを OK とするのと、
アルゴリズム的に不要な free をしないようにする方がいいってのの違いでしょ。
宗教論争になりそうだからやめといた方がいいと思うけど。

自分は後者の方が好みだけどね。
0623デフォルトの名無しさん2015/05/02(土) 23:17:58.13ID:RbSXq7CR
ライブラリ的にはNULLにfreeしてもよい仕様になってるだけで
末端の処理共通化とか何かしらの目的もなくNULLをfreeするような設計はそもそもやめるべき
0624デフォルトの名無しさん2015/05/03(日) 00:10:16.86ID:o9NCZLQk
>>616
>utf-16なら2バイト表現だから、wchar型で表現でしょ

utf-16には、サロゲートペアという4バイトもあるので、
2 or 4 バイトだけど、wchar型でよいのか?
0625デフォルトの名無しさん2015/05/03(日) 00:12:40.76ID:fM7MkGHJ
[迷信] free に NULL を渡すとクラッシュする
0626デフォルトの名無しさん2015/05/03(日) 00:36:40.20ID:cKrnMy/8
[迷信] freeにNULLを渡してはいけないと言う規格は存在しない。
0627デフォルトの名無しさん2015/05/03(日) 02:27:35.84ID:SHvEvIe/
それ以前に誰が
>[迷信] free に NULL を渡すとクラッシュする
なんて主張をしたと言うんだろう。
0628デフォルトの名無しさん2015/05/04(月) 02:33:07.11ID:QUd4Bv2i
int sum(int x, int y){
 return (x+y);
}
int main(){
 int a=1,b=2;
 printf("%d",sum(a,b));
}
-------------
int i=1,j=2;
int sum(){
 return (i+j);
}
int main(){
 printf("%d",sum());
}
これってこうしちゃいけないんです?
入門書とか見てもグローバル変数はほとんど使われてない印象なんだけど、
必要なものをグローバル変数にするのは良くないことなの?
0629デフォルトの名無しさん2015/05/04(月) 02:47:37.22ID:5nOx4T09
・作った関数の数だけグローバル変数増えるよ?
どの変数がどの関数の何に対応するものか把握できるとは思えない

・同じ関数を異なる引数値で呼び出すのはどうするべ?
再帰呼び出しやマルチスレッドは....
0630デフォルトの名無しさん2015/05/04(月) 04:25:09.78ID:XgE0u9/L
>>628
必要もないのにグローバル変数を使うのが良くない

stdio.hとかstring.hとかの関数も同じような作りになってた時のことを想像してみ
変数宣言するために、わざわざどんな変数名使われてるか確認して、上書きしないようにするの?
0631デフォルトの名無しさん2015/05/04(月) 08:59:38.03ID:uR5g3T2U
>>628
問題が無い限り、好きにしてよし
0632デフォルトの名無しさん2015/05/04(月) 12:08:10.90ID:ipWHm2/q
関数名が良くないね
sumでは何の合計なのか分かりにくい
sum_global_a_b()とかにすればもっと良くなるね
0633デフォルトの名無しさん2015/05/04(月) 12:10:17.94ID:3vKXe8zC
グローバル変数の使いどころは体験の中で身に付けていくしかない。
そのうちに、何が良くて何が悪いのかわかるようになる時が来る。
0634デフォルトの名無しさん2015/05/04(月) 12:15:17.21ID:1n3Hr5ux
グローバル変数にして実害がでたようなことってありますかね?
0635デフォルトの名無しさん2015/05/04(月) 12:27:18.47ID:QUd4Bv2i
628です、ありがとうございました
大きなプログラミングになると色々問題が出てくる訳なのか
0636デフォルトの名無しさん2015/05/04(月) 13:19:39.80ID:UkhECCZE
リードオンリーなら問題無い。
リードライトするとマルチスレッド化するときに地獄を見る
0637デフォルトの名無しさん2015/05/04(月) 17:06:21.93ID:89QT3Y97
せんぱい、プログラミングおしえて?
0638デフォルトの名無しさん2015/05/04(月) 23:14:18.39ID:TIjg96Rr
>>634
関数使う時に、いちいちグローバル変数とその使われ方を調べて代入するのがめんどくさい。
0639デフォルトの名無しさん2015/05/04(月) 23:47:55.96ID:ipWHm2/q
1000行以下のゴミプログラムなんて
全変数グローバルでも問題ない
0640デフォルトの名無しさん2015/05/05(火) 00:52:17.63ID:JPFk61nl
行数に何の関係があるんだ?
0641デフォルトの名無しさん2015/05/05(火) 01:07:52.27ID:suYaF0Fr
構ってちゃんだよ
0642デフォルトの名無しさん2015/05/05(火) 01:17:17.52ID:bb60TpkR
自分が作ったことのある最大行サイズなんではないかな?
0643デフォルトの名無しさん2015/05/05(火) 09:35:35.96ID:0Ay0x4TE
Cで行数?とんちですか?馬鹿ですか?
0644デフォルトの名無しさん2015/05/05(火) 13:15:27.77ID:uVCPYNMa
Cは、ifやforのブロック中にも変数のスコープが発生すると
同僚に言われてびっくりしたんですけど違いますよね?
言い張って聞かないんです
0645デフォルトの名無しさん2015/05/05(火) 13:23:24.68ID:WHe9lprJ
なぜ違うと思ったのか
0646デフォルトの名無しさん2015/05/05(火) 13:29:55.25ID:FwdC3axg
試せばいいじゃないの
0647 ◆QZaw55cn4c 2015/05/05(火) 14:07:11.43ID:L//ecjsr
>>644
http://ideone.com/RhqwU8
0648デフォルトの名無しさん2015/05/05(火) 16:25:46.29ID:uVCPYNMa
アドバイスありがとうございます。自分は以下のような時に
外の i と内の i が別スコープになるというのが相手の主張だと
解釈して、それはないと否定したわけですが
もしかしたら相手と話が噛み合ってないのかも知れません
http://ideone.com/r6mZLQ
0649デフォルトの名無しさん2015/05/05(火) 16:52:23.72ID:bb60TpkR
>>648
それって何をやりたかったんだい?
0650デフォルトの名無しさん2015/05/05(火) 16:54:15.73ID:8cP4yYWI
内側の i は未宣言の変数だ ってエラーにしたいの?
0651デフォルトの名無しさん2015/05/05(火) 17:07:18.76ID:uVCPYNMa
>>649
一つの変数はブロックごとに別スコープを持つという主張ですね
0652デフォルトの名無しさん2015/05/05(火) 17:13:05.50ID:8cP4yYWI
親のブロックで宣言した変数が 子には伝わらないんなら そうだろうね

子Aで宣言したのは  子Bに伝わらない  ってのが同僚の主張

void foo()
{
 int i = 1;
 { int a; a = 10; /* このブロックで i は存在するし伝わってる */ }
 { このブロックでは a は存在しない }
}
0653デフォルトの名無しさん2015/05/05(火) 17:20:43.37ID:r7nLF9aC
>>651
あなたが言う「スコープ」は、ブロックの中のみという範囲のようだが
あなた以外の人がスコープと言うとき、ブロックの外側も含まれている

要するに、あなたがスコープの意味を理解してないか、オレオレ用語を使ってる
ので話があわない
0654デフォルトの名無しさん2015/05/05(火) 17:22:27.10ID:FLJns8IJ
最終的に機械語に翻訳されたらグローバル変数しかないというか
変数の区別はどうやってやるのだろうか
0655デフォルトの名無しさん2015/05/05(火) 17:23:24.65ID:8cP4yYWI
>>651
>>648 の記述で
どういう出力結果を求めてるの? またはコンパイルエラーにしたいの?
0656デフォルトの名無しさん2015/05/05(火) 17:24:29.20ID:p1RbtT4Y
>>654
アドレス
0657デフォルトの名無しさん2015/05/05(火) 17:26:13.31ID:8cP4yYWI
>>654
それこそ 吐き出すコードみてみれば としかw

おおよそ スタックフレームって機構で、相互に衝突しないものは、それぞれ使いまわしてたりする
0658デフォルトの名無しさん2015/05/05(火) 17:58:00.46ID:uVCPYNMa
>>655
欲しいのは、outerループが1回回るごとに
innerループが0〜9まで回るという結果ですね

内側のブロックで外側と同名の変数に代入を行うと
新たなローカル変数が作成され外側には影響しない
というのが彼の主張です
0659デフォルトの名無しさん2015/05/05(火) 17:59:58.30ID:bb60TpkR
>>658
宣言と代入を混同しているのではないですかね
0660デフォルトの名無しさん2015/05/05(火) 18:00:27.05ID:r7nLF9aC
そんなこと言ってないから彼本人に確認しなさい
0661デフォルトの名無しさん2015/05/05(火) 18:06:31.44ID:uVCPYNMa
休み明けに改めて確認します
ちょっと言い合いになってしまった件なので気が重い…
0662デフォルトの名無しさん2015/05/05(火) 18:07:40.20ID:8cP4yYWI
>>658
下記の記述により 内側は10回まわるようになると 同僚は言おうとしていると予測される

int i;
for (i=0; i<5; i++) {
 int i;
 for (i=0; i<10; i++) {
 }
}

「どういう記述で、どういう結果となるか」 を双方の主張ですりあわせとけ
0663デフォルトの名無しさん2015/05/05(火) 18:07:57.83ID:BmQGuWC3
>>657
> おおよそ スタックフレームって機構で、相互に衝突しないものは、それぞれ使いまわしてたりする
原理的には可能だけど、スタックフレームを関数のプロローグ/エピローグ以外で変更するコンパイラなんか見たことないぞ。
具体的にはどのコンパイラだよ。↓これでyとzが同じアドレスだという主張だよな。


#include <stdio.h>
int hoge(char *x)
{
printf("%p\n", x);
return 0;
}
int main(int ac, char **av)
{
char x[100];
{
char y[256];
hoge(y);
}
{
char z[256];
hoge(z);
}
}
0664デフォルトの名無しさん2015/05/05(火) 18:08:09.27ID:WHe9lprJ
プログラマならその場で検証プログラムを書いて結果を見て話し合うべき
0665デフォルトの名無しさん2015/05/05(火) 18:11:16.49ID:8cP4yYWI
>>663
MSC の古めのやつ(最適化のレベルは覚えてない)
main 内の確保が char 356 分で y と z が 同じアドレスになりえた
0666デフォルトの名無しさん2015/05/05(火) 18:14:21.22ID:BmQGuWC3
スタックフレーム変更しなくても使いまわしは可能なので訂正
× スタックフレームを関数のプロローグ/エピローグ以外で変更するコンパイラなんか見たことないぞ。
○ そんなコンパイラなんか見たことないぞ。
0667デフォルトの名無しさん2015/05/05(火) 18:17:28.80ID:BmQGuWC3
>>665
-O2で最適化するようだ。というわけで>>663は取り下げ。
0668デフォルトの名無しさん2015/05/05(火) 18:18:22.62ID:8cP4yYWI
>>667
おっけー 追試できてなにより
0669デフォルトの名無しさん2015/05/05(火) 18:28:39.00ID:JPFk61nl
そんなどーでもいーことばっかにやたらと執着する言語ヲタが会社にいるけど
そいつ、まったく装置動かせないよw

いっつもハマって上司がみかねてヘルプをつけるが、言語仕様がどうだとか、命名規則がどうだとか・・・
そんなこといってねーでさっさと運転しろよ

客立にまにあわねーじゃんw
0670デフォルトの名無しさん2015/05/06(水) 00:41:23.24ID:EsqtbM0m
客立?
0671デフォルトの名無しさん2015/05/06(水) 03:59:01.59ID:cCF2kAXu
客の立会い試験とかなんとかじゃね
0672デフォルトの名無しさん2015/05/06(水) 11:12:07.78ID:S4hzcfXD
グローバル変数がどうとか、スタックフレームがどうとかアセンブラレベルでどうなっているのかとか
言っていた人たちは、下の本、

Cとアセンブリ言語で学ぶ計算機プログラミングの基礎概念 - プログラムはプロセッサ上でどのように実行されるのか
角川 裕次 (著)
http://www-masu.ist.osaka-u.ac.jp/~kakugawa/fccp.shtml#SEC:CONT
>C言語で書かれたプログラムを実際の CPU は どのように実行するかを説明をしています。
>具体的に言えば、C言語での各種の概念がどのようにしてアセンブリ言語の 形で実現されるかを
>詳細に示しました。

第7章「大域変数」第8章「算術演算」第9章「関係演算・分岐」第10章「制御構造」
第11章「論理演算」第12章「配列」第13章「ポインタ」第14章「システムコール」
第15章「実数算術演算」第16章「関数」第17章「引数・関数値」第18章「局所変数」

とあるから参考にしてみては?
0673デフォルトの名無しさん2015/05/06(水) 11:21:21.05ID:rIokvfax
フォントドライバVFlibの角川さんは好きです
0674デフォルトの名無しさん2015/05/07(木) 06:56:53.41ID:rR0iGNie
ポインタが凄く難しいって聞いたのですがやっぱり難易度高いですか?
もうすぐその範囲に入るので不安です...
0675デフォルトの名無しさん2015/05/07(木) 07:55:43.97ID:6SXIADlN
メモリに対する理解があればそんなには難しくない。

ただしその利用方法がいくらでもややこしく出来るってだけ。
0676デフォルトの名無しさん2015/05/07(木) 08:13:31.51ID:CSFF77Jn
void** (*a)(void** (**)(void**));
こんなのがたくさん出てきます。
心してください
0677デフォルトの名無しさん2015/05/07(木) 12:33:30.28ID:bwdzUvDw
void ** って意味がないような気がするなぁ‥
0678デフォルトの名無しさん2015/05/07(木) 12:41:02.54ID:IYwlVx6v
QueryInterfaceで使ってる
0679デフォルトの名無しさん2015/05/07(木) 12:46:14.16ID:1aEh68NY
#include <stdio.h>

int main(void)
{
int n ;
int a ;
int b ;
double e ;

n = 2 ;
e = 1 ;

while( n <= 10 ){
a = n ;
b = n - 1 ;
while( b >= 1){
a = a * b ;
b = b - 1 ;
}
n = n + 1 ;
e = e + 1/a ;

}
printf("%lf", e) ;
}

自然対数の近似値を求めるためのプログラムなんですがe=1と出てしまいます。
1/a が0になってしまっているんでしょうか?どこが間違っているか教えてください。よろしくお願いします
0680片山博文MZ ◆T6xkBnTXz7B0 2015/05/07(木) 12:50:32.36ID:l1tCi63v
Cでは、整数どうしの割り算は整数になる(整除)。
どちらかを浮動小数点数にする。
1.0/a
0681デフォルトの名無しさん2015/05/07(木) 12:50:45.36ID:zypL+WE6
>>679
aをdouble型にキャストしてみたらどうだろう
0682デフォルトの名無しさん2015/05/07(木) 13:09:51.88ID:1aEh68NY
解決しました 
ありがとうございます
0683デフォルトの名無しさん2015/05/07(木) 20:40:55.51ID:bPt/b6xW
Javaの参照ってポインタと何か違うんすか
0684デフォルトの名無しさん2015/05/07(木) 21:23:51.98ID:KiMRR+7s
>>683
おまいさんにはプログラミング言語より先に日本語の勉強が必要だと思うよ?(´・ω・`)
0685デフォルトの名無しさん2015/05/07(木) 21:48:00.49ID:fjPy0nkM
参照渡しとポインタ渡しの違いか?
参照渡しは実体を共有する
ポインタ渡しはアドレスを共有する
ダブルポインタ使えば参照みたいな使い方も出来るけどね
0686デフォルトの名無しさん2015/05/07(木) 21:53:52.66ID:oOkqqR+A
>>685
最後の一行の意図がわからない。
0687デフォルトの名無しさん2015/05/07(木) 22:24:21.84ID:foeMbsV4
double *がどうしたって?
0688デフォルトの名無しさん2015/05/07(木) 22:30:33.25ID:fjPy0nkM
>>686
あれ?ここってC言語について語る場所だろ?
C言語に参照なんて考え方はないからダブルポインタ使えば似たようなことは出来るってだけ
0689デフォルトの名無しさん2015/05/07(木) 22:37:38.53ID:oOkqqR+A
>>688
いや、ダブルの必要ないでしょって言う。。。
0690デフォルトの名無しさん2015/05/07(木) 22:44:03.27ID:bwdzUvDw
>>688
お前のいう参照とは Java の参照なのか C++ の参照なのか?
0691デフォルトの名無しさん2015/05/07(木) 23:26:35.92ID:7YBj0pfZ
ポインタ
0692デフォルトの名無しさん2015/05/07(木) 23:28:54.90ID:7YBj0pfZ
ダメか…これならどうだろう…
ポインタ&sup2;
0693デフォルトの名無しさん2015/05/08(金) 00:11:21.39ID:4o94EzEj
>>688
call by value
call by reference
参照はあるから、、、
ダブルポインタって言ってるのはアドレス型のアドレス値を渡したいってことでしょ
0694デフォルトの名無しさん2015/05/08(金) 02:08:31.98ID:jMZH93D+
下記のソースで、コンパイルは上手くいくんですが、実効すると無限ループとなってしまいます。
表示したいのは、対角線が*で、それ以外が-となる図形です。
奇数行、奇数列の図形です。
したがって、上半分、真ん中、下半分の3つに分けています。
どうして無限ループになるのでしょうか?。

http://www.dotup.org/uploda/www.dotup.org304045.c.html
パスワード:俺に聞け
0695デフォルトの名無しさん2015/05/08(金) 02:41:09.98ID:P4kSop9a
自己解決しました
既に色々やってた方がいたらごめんなさい
0696デフォルトの名無しさん2015/05/08(金) 19:04:27.02ID:wSMyBbJk
typedef struct
{
  int a;
  int b;
  int c;
} TEST;

TEST *p;
と書くとpのための領域が4バイト確保される

p = malloc(sizeof(TEST));
と書くと12バイト分の領域を確保した上で、その先頭アドレスがpに格納される

p++;
と書くとpに格納されていたアドレス値が12増える
0697デフォルトの名無しさん2015/05/08(金) 20:05:43.60ID:wSMyBbJk
組込みの仕事はマジでゴミ
会議、ドキュメント作成、検査、下請け管理しかしねえ
コードも碌に書かないで何がソフトウェア技術者なの
特に自動車、航空機、医療関係は最悪
人の命が関わるからバグが許されない
それはつまり業務の9割5分がドキュメント作成と検査になるということ
マジゴミ仕事
俺は天才プログラマーになりたかったんや
オシロスコープを使った動作確認とかまじ簡便
0698デフォルトの名無しさん2015/05/08(金) 20:11:08.10ID:lSxIHzFs
>>696
前提くらい書いたほうがいいよ
0699デフォルトの名無しさん2015/05/08(金) 20:57:07.34ID:WF39tTmI
>>696
sizeof(int) == 4 である根拠は?構造体中にパディングが入らないと言い切れる根拠は?
0700デフォルトの名無しさん2015/05/08(金) 21:18:19.29ID:UBjnUI5T
sizeof(int)が4でメンバーが全てintな構造体のアライメントが4じゃない変態環境はどこにあるんだ?
0701デフォルトの名無しさん2015/05/08(金) 22:06:29.42ID:CL8gFber
文句言いたいだけのアスペ
文面見て言いたいことは大体想像できんだろ
0702デフォルトの名無しさん2015/05/08(金) 22:25:03.84ID:wSMyBbJk
C言語をやると性格が歪んでくるということ
0703デフォルトの名無しさん2015/05/08(金) 22:26:41.52ID:c65wRwd8
性格がゆがんでる俺のこと呼んだ???
0704デフォルトの名無しさん2015/05/08(金) 22:28:47.42ID://zzhYF7
C is lean and mean.
0705片山博文MZ ◆T6xkBnTXz7B0 2015/05/08(金) 22:44:41.14ID://zzhYF7
C言語は将来、関数型言語MLに征服されるよ。
0706デフォルトの名無しさん2015/05/08(金) 23:03:14.65ID:6sEltI/r
今年ももう5月か…速いのぅ
0707デフォルトの名無しさん2015/05/08(金) 23:06:40.02ID:c65wRwd8
年越してからもう1年の3分の1が終わったからね
0708片山博文MZ ◆T6xkBnTXz7B0 2015/05/08(金) 23:17:46.74ID://zzhYF7
【最終警告】
コンピューターから人間たちに警告する。
C言語でバグが許されない低レベルなコードを書くのは、関数型言語MLの仕事になる。
もはや人間の仕事ではない。
繰り返す。
C言語でバグが許されない低レベルなコードを書くのは、関数型言語MLの仕事になる。
もはや人間の仕事ではない。
0709デフォルトの名無しさん2015/05/08(金) 23:29:08.61ID:TPJja9oF
>>700
Visual Studio 2013

struct S {
__declspec(align(8)) int a;
__declspec(align(8)) int b;
__declspec(align(8)) int c;
__declspec(align(8)) int d;
}

sizeof(int) = 4
sizeof(S) = 32
0710デフォルトの名無しさん2015/05/09(土) 00:36:34.41ID:YDx2Xk8T
俺は天才プログラマーになりたかったんや
進捗表とにらめっこして下請けにプレッシャーを与えるゴミ仕事とかまじ簡便
0711片山博文MZ ◆T6xkBnTXz7B0 2015/05/09(土) 00:40:10.33ID:IBcmzD7P
>>710
トランジスターがICになったのも、現場の提案が上司に受け入れられたからだよ。
君が世界を改善するんだ。
0712デフォルトの名無しさん2015/05/09(土) 09:14:34.23ID:vgPWJyqk
0123567・・・(4は飛ばす)とno文字だけ表示させたいんだけど
なんか0だけしかでないんですけど、どう直せばいいんですか?

dg=0;
for(i=0;i<no;i++);{
printf("%d",dg%10);
dg=dg+((dg%10)==3)?2:1; }
0713片山博文MZ ◆T6xkBnTXz7B0 2015/05/09(土) 09:20:28.76ID:IBcmzD7P
dg=0;
for(i=0;i<no+1;i++);{
printf("%d",dg%10);
if (dg==4) ++dg;
++dg;
}
0714デフォルトの名無しさん2015/05/09(土) 09:52:08.76ID:vgPWJyqk
ありがとう助かった
0715デフォルトの名無しさん2015/05/09(土) 10:12:38.93ID:daz+XnBC
解決したならいいけど、
for(i=0;i<no;i++);{
の ; (セミコロン)が不要
0716デフォルトの名無しさん2015/05/09(土) 19:47:50.54ID:1kQvgyO4
リストで作ったスタックの中身に構造体をいれたいのですがどうすればいいんでしょうか?

木の探査を非再帰でやりたくて現在地をスタックに保存したいです。

スタックの中身の変数をポインタにしたり、入れたい構造体にしたりしてみたのですが出来ないです。
0717デフォルトの名無しさん2015/05/09(土) 19:57:41.36ID:YDx2Xk8T
C言語の仕事はゴミ
組込みの仕事はソフトウェア技術者の仕事ではない
マジ組込みはゴミ仕事
0718デフォルトの名無しさん2015/05/09(土) 20:00:42.26ID:cV6h0Xbh
いや〜君の愚痴は何も面白くないね
0719デフォルトの名無しさん2015/05/09(土) 20:21:16.09ID:hIQ1odRh
ゴミ仕事から排除されたのですか?
0720デフォルトの名無しさん2015/05/09(土) 20:58:46.42ID:ozKNLSFg
>>716
> スタックの中身の変数をポインタにしたり、入れたい構造体にしたりしてみたのですが出来ないです。
普通は出来る。
どのようにできないのか秘密にするという事はアドバイス不要という表明。
0721デフォルトの名無しさん2015/05/09(土) 21:15:45.69ID:4IoY+00I
>>720
あんた、ばかぁ

アドバイス不要なら、はなから書き込まないでしょ
0722デフォルトの名無しさん2015/05/09(土) 21:35:36.03ID:ozKNLSFg
(誰も読んでない)ブログに書くべきゴミレスを書く趣味の奴がいる。>>716のような。
0723デフォルトの名無しさん2015/05/09(土) 21:41:17.81ID:j9cS4CQF
>>717
ハードも理解した上で設計しないと行けないから、ソフトしかできないアホにやらせると大変なことになるわな
本当はハードもソフトも出来る優秀な人材が担当するべきなんだけど、そうしないからゴミみたいな仕事になる
0724デフォルトの名無しさん2015/05/09(土) 22:19:43.64ID:4IoY+00I
ハード的な知識が無くて、ソフトなんて作れないだろw
仮に作れたとしても、そんなレベルの人が作ったソフトなんて使いたくない
0725デフォルトの名無しさん2015/05/09(土) 22:26:24.42ID:4Yk3wVkf
>>724
巷に溢れてるよ
スマホもそんなレベルが開発してたりするな
もうスマホ使えないな
0726デフォルトの名無しさん2015/05/09(土) 22:29:16.54ID:ev3sjkli
>>724
コピペだろうけど、いつ見てもイミフだな。
ハードの知識無しってのは例えば「CPUはデジタルで動いてる」と考えてるようなレベルの事なんだが。
0727デフォルトの名無しさん2015/05/09(土) 22:35:15.40ID:YDx2Xk8T
半田このやろう
0728デフォルトの名無しさん2015/05/09(土) 22:41:50.68ID:j9cS4CQF
>>726
ハードも出来るってのは少なくとも自分でハード設計も出来るレベルをさしてる
ハードの仕様をしっかり理解した上でのソフトが開発できる人間は以外と少ないもんだぞ
0729デフォルトの名無しさん2015/05/09(土) 22:48:36.75ID:YDx2Xk8T
電子工学科出てるやつで余力のあるやつがソフトもやるぐらいで丁度いいんだよ
0730デフォルトの名無しさん2015/05/09(土) 23:01:14.06ID:qeICslx9
>>717
組み込みの特殊事情だな。

・たいていろくなデバッグ手段がない。
・ドキュメントもろくなものがない。たまに間違っている。
・おまけにハード自体も信用できない。

こんなんだからハードの内部動作を想像できないとソフトも作れない。
0731デフォルトの名無しさん2015/05/09(土) 23:05:23.10ID:IBcmzD7P
ハードウェアテスターはないのかい?
0732デフォルトの名無しさん2015/05/09(土) 23:11:56.32ID:YDx2Xk8T
標準化されたライブラリみたいなのもないから
現場によって独自に作りこんでる部分があって
そこの理解に時間が取られるしよそへいったら
もう何の意味もなくなるっていうことの繰り返し
マジゴミ仕事
0733デフォルトの名無しさん2015/05/09(土) 23:41:58.87ID:ev3sjkli
>>728
それは既存の部品を集めるレベルだろ。
724が勘違いしてるようだが、問題はハードを知らないからじゃなく、ハードとのインターフェースを理解してないでソフトを組むから。
0734デフォルトの名無しさん2015/05/10(日) 18:31:14.05ID:AxnT61tv
>>725
セマフォは使ってません
0735デフォルトの名無しさん2015/05/10(日) 19:13:27.44ID:kdcQucPe
>>734
ガラケーも同じ
0736デフォルトの名無しさん2015/05/10(日) 20:00:58.26ID:FYierr14
大昔に関数ポインタを使ったことがあるんだが
利点を思い出せない・・・
配列に入れて変数によって呼び出す奴を変えることができるくらいか?
なら条件分岐でいいよな・・・
0737デフォルトの名無しさん2015/05/10(日) 20:03:08.62ID:365WGLAf
大昔にステートパターンを使ったことがあるんだが
利点を思い出せない・・・
ポインタに入れてオブジェクトによって呼び出す奴を変えることができるくらいか?
なら条件分岐でいいよな・・・
0738デフォルトの名無しさん2015/05/10(日) 20:38:00.54ID:YxnR9SV6
>>736
なければないで、どうにでもなるけれども、特定の用途ですっきりと記述できることがある
Java8 にも入ったらしく、割と満足
http://peace.2ch.net/test/read.cgi/tech/1313183984/799
0739デフォルトの名無しさん2015/05/10(日) 23:12:13.55ID:365WGLAf
int *p;

p = malloc(sizeof(int));

*p = 0x12345678;

if(p == *p)
{
  printf("Good!!\n");
}
else
0740デフォルトの名無しさん2015/05/10(日) 23:33:52.50ID:lTuxjKa7
>736
WindowsのDLLの様な仕様がある環境では必須。
0741デフォルトの名無しさん2015/05/10(日) 23:40:28.13ID:RM9fQePY
>>736
関数へのポインタを使えば、オブジェクト指向っぽく設計できる。
0742デフォルトの名無しさん2015/05/11(月) 00:15:06.11ID:m+nGbHpv
変数のポインタは
 その変数のアドレスを何かに渡す事でそのアドレスにある内容を何かが処理する
関数のポインタは
 その関数のアドレスをこれまた何かに渡すことでそのアドレスにある処理内容を
 実行する…ことになる

という事でいいんですかね
何かの本でイベントドリブンでは必須だとか書いてあったような気がするんですが
0743デフォルトの名無しさん2015/05/11(月) 10:10:11.49ID:gpC2e9/B
初歩的な質問ですみません。

12345という数値があったとして、千の位以上を削除したい場合はどのような関数を使用すればいいですか?
例として、12345 → 345 というようにしたいです。
よろしくお願い致します。
0744デフォルトの名無しさん2015/05/11(月) 10:21:33.76ID:HV4oJuiv
>>736
1000で割った余りを使えばいいじゃん
余りを求める演算子は%だぞ
0745デフォルトの名無しさん2015/05/11(月) 10:23:50.21ID:jciykodT
>>743
プログラミングじゃなくて算数をやり直した方がいいね?(´・ω・`)
0746デフォルトの名無しさん2015/05/11(月) 10:26:23.02ID:HV4oJuiv
>>744
あ、間違えた>>743へのレスね
0747デフォルトの名無しさん2015/05/11(月) 11:02:29.73ID:Ni1vX9nL
関数ポインタの代表的なのはソートでしょ
比較関数を後から指定できる

最近の言語だとクロージャとかラムダ式とかあるけどさ
0748デフォルトの名無しさん2015/05/11(月) 12:05:22.11ID:4swP+GcR
Cにもラムダ式欲しい…
0749デフォルトの名無しさん2015/05/11(月) 12:06:20.13ID:D8H3QW/Z
>>748
全くいらん
0750デフォルトの名無しさん2015/05/11(月) 13:43:10.88ID:4OXblWJt
ラムダ式だけあってもクロージャの性質が無いと意味ないと思うけど。
クラスの無いCでどうやるんだろ。
0751デフォルトの名無しさん2015/05/11(月) 18:06:29.89ID:fXdd85Lw
>>747
その最近の言語で Y コンビネータは記述できますか?
0752デフォルトの名無しさん2015/05/11(月) 20:32:40.28ID:4swP+GcR
>>749
qsortとかbsearchとか使いやすくなりそうな?
0753デフォルトの名無しさん2015/05/11(月) 22:28:35.37ID:s//EDtxh
わいは天才プログラマーになりたかったんや!
下請けの管理とかマジ簡便
0754デフォルトの名無しさん2015/05/11(月) 22:44:57.01ID:xm68DOiB
天才に成れないからそんな仕事しか回ってこないんだよ。>753
0755デフォルトの名無しさん2015/05/11(月) 23:21:33.70ID:L6E5egEt
構造体で配列のサイズだけ違ってメンバ名が全く同じものを宣言する場合、
スマートなやり方はありませんか?

typedef struct {
char a[32];
char b[32];
char c[32];
}AAA;

typedef struct {
char a[64];
char b[64];
char c[64];
}BBB;
0756デフォルトの名無しさん2015/05/11(月) 23:56:31.29ID:AYB9vRVo
マクロを使うダサイ方法しか思いつかない

#define def_struc(N, name) \
typdef struct { \
int a[N]; \
int b[N]; \
int c[N]; \
} name

def_struc(32, AAA);
def_struc(64, BBB);
0757デフォルトの名無しさん2015/05/12(火) 00:00:41.34ID:uAwIFKxw
>>756

それは実は私も考えました
C言語診断室かなんかでスマートなやり方見た気がしたんだけど
気の所為だったか
ずーっと考えてて思い浮かばないんで質問させて頂いた次第

やっぱ無いのかなぁ〜

ご回答ありがとうございました
0758デフォルトの名無しさん2015/05/12(火) 06:08:44.46ID:f92i4CwQ
>>757
abcをそれぞれポインタで定義
構造体のサイズ+aで必用なサイズ+bで必用なサイズ+cで必用なサイズ分を一塊でいっぺんに確保して、abc各々に開始アドレスを設定してあげれば出来上がり
0759デフォルトの名無しさん2015/05/12(火) 07:56:04.62ID:X3P04L7j
>>750
やりたいなら保持したい変数のアドレス渡せばいいだけ
複数なら構造体にしてそいつへのポインタでいい
要するに C++ が this ポインタ渡すのと同じ
0760デフォルトの名無しさん2015/05/12(火) 07:56:49.84ID:qMtJFQcL
int Buf32x3[32*3];
int Buf64x3[64*3];

typedef struct {
char *a;
char *b;
char *c;
} AAA={&Buf32x3[32*0],&Buf32x3[32*1],&Buf32x3[32*2]},
BBB={&Buf64x3[64*0],&Buf64x3[64*1],&Buf64x3[64*2]};

などとさらに醜く…
0761デフォルトの名無しさん2015/05/12(火) 14:06:51.03ID:mX0LVOy5
typedef struct {
char *a;
char *b;
char *c;
char buf[0];
} AAA;

aaa = malloc(sizeof(AAA)+(32 * 3));
aaa->a = &aaa->buf[0];
aaa->b = &aaa->buf[32];
aaa->c = &aaa->buf[64];

っ感じて可変長構造体にすれば、メンバのfreeもいらないし
最近C書いてないし、スマホからだから構文エラーは見逃して
0762デフォルトの名無しさん2015/05/12(火) 15:28:39.55ID:A6ih3Jq7
>>761
それならbuf[0]じゃなくbuf[1]で定義するべきだな
0763デフォルトの名無しさん2015/05/12(火) 19:08:43.74ID:axCQbgah
buf[] でも buf[0] でも buf[1] でも OK
0764片山博文MZ ◆T6xkBnTXz7B0 2015/05/12(火) 19:12:28.65ID:fncYevaL
古臭い環境への移植を考えるならbuf[1]だな。
0765デフォルトの名無しさん2015/05/12(火) 19:21:58.49ID:gAoTmxoz
asciiz 文字列との親和性もいいし
0766デフォルトの名無しさん2015/05/12(火) 21:06:18.16ID:oFYn3u4Y
変数に直接アクセスさせないで関数用意してあげて
0767デフォルトの名無しさん2015/05/12(火) 21:52:10.59ID:t3rVsQYT
>>759
その通りだね。
まあ結局、クロージャがある言語のミニチュアを作ってる事になるけど。
0768デフォルトの名無しさん2015/05/12(火) 21:57:06.38ID:z/Ock0GH
入門編とは一体…
0769デフォルトの名無しさん2015/05/12(火) 22:04:37.71ID:7L7ARdO1
学校のC言語教えてる先生がバカすぎてつらい
0770デフォルトの名無しさん2015/05/12(火) 23:11:11.97ID:72IEvG4v
それは、バカを集めた学校に入ったキミが悪い。
0771デフォルトの名無しさん2015/05/13(水) 01:17:34.76ID:KymJiBND
>>766
それは別問題でしょ
お題に対しての答えなんだから
0772デフォルトの名無しさん2015/05/13(水) 09:09:17.35ID:nqIuSKm+
[1]なのは、[]や[0]だとエラーになる処理系が昔あったから
0773デフォルトの名無しさん2015/05/13(水) 14:05:21.20ID:6S568jOQ
案の定というか見事にポインタで詰まったんだけど勉強するのにおすすめのサイトとかある?
0774デフォルトの名無しさん2015/05/13(水) 14:26:50.10ID:CDy1Mf1G
>>773
参考書で勉強してるなら詰まった箇所の前の部分で理解が浅くないか確認とか
最初は詳細にこだわらず全体像、概要を捉える様にてっしてみたら

あとポインタの何で詰まったか書かないと具体的なアドバイスは難しいかと
0775デフォルトの名無しさん2015/05/13(水) 14:30:15.92ID:6S568jOQ
>>774
ありがとう
確かにざっくりすぎた、すまない
ポインタがアドレスを参照にして代入したりできるってことは何となく理解できたんだけど
そっから先どう使うのかがさっぱり浮かんでこないんだ
0776デフォルトの名無しさん2015/05/13(水) 14:37:55.17ID:jhRXZk3H
使い方は、関数へのポインタ値渡し、ポインタの付け替えなど。
ポインタというと文脈によってポインタ変数だったりポインタ値(アドレス値)だったりするので、
区別して捉えた方がいいんじゃない。
0777デフォルトの名無しさん2015/05/13(水) 14:43:17.86ID:6S568jOQ
>>776
ありがとう
一概にポインタっていってもいろいろあるんだね
どこいっても難しい難しいってなってるから
始める前からなんか苦手意識できちゃってたがなんとかやってみる
0778デフォルトの名無しさん2015/05/13(水) 15:26:49.25ID:j5Rua+OI
>>772
ちげーよ。[1]というテクニックが先にあった。
サイズ計算が面倒くせといって、gccが[0]を許すように拡張した。
こりゃ便利だ、でも[0]はダサいから[]にしようと規格になった。
0779デフォルトの名無しさん2015/05/13(水) 16:42:17.34ID:nqIuSKm+
>[1]というテクニックが先にあった。

だから、なんで[1]かというと[0]だとエラーになるからなんだよ、当時の話な。
0780デフォルトの名無しさん2015/05/13(水) 17:19:14.26ID:6S568jOQ
0から勉強はじめて六日目ぐらいなんだが自信なくなってきた…
比較できる人がいないから不安で仕方ない、普通はどれぐらいで基礎をマスターしちゃうもんなんだろうか
0781デフォルトの名無しさん2015/05/13(水) 17:24:40.51ID:E9+9yRfV
まず、基礎ってなんだろね
0782デフォルトの名無しさん2015/05/13(水) 17:26:06.85ID:6S568jOQ
苦c全般理解できるぐらい?っていう認識なんだけど
0783デフォルトの名無しさん2015/05/13(水) 17:33:22.74ID:E9+9yRfV
ポインタは教わっててもわかりにくいからしょうがないよ

プロジェクトオイラーの問題でもやってみるといいと思う
どういう勉強してるかわからないけど、数学と一緒でやった量だけ身になるからね
0784デフォルトの名無しさん2015/05/13(水) 17:48:07.05ID:6S568jOQ
>>783
そういわれるだけですごく気が楽になる…
ど素人からプログラミングの基礎学んで仕事にしないといけないんだ
雇い主の人からまずはcの勉強からってVishualC++パーフェクトマスターって分厚い本渡されて毎日勉強してるんだが難しくてさ
苦cってサイトが初心者向けっぽいからそこずっと読みながらやってるんだけどなかなかね…
0785デフォルトの名無しさん2015/05/13(水) 19:25:15.35ID:/pzsOmxB
>>784
C++の本を渡されてC言語の勉強をしろと言われてるの?
0786デフォルトの名無しさん2015/05/13(水) 19:28:01.21ID:E9+9yRfV
C++を使えるようにならなくちゃいけないのかwwwww
笑ったわwww
0787デフォルトの名無しさん2015/05/13(水) 19:52:16.16ID:j5Rua+OI
>>779
ぶれぶれだな。

> [1]なのは、[]や[0]だとエラーになる処理系が昔あったから
[1]が使われ始めた頃に[0],[]を許してるコンパイラがあったとでも?
0788デフォルトの名無しさん2015/05/13(水) 19:57:44.30ID:qjtFgsv4
先にアセンブラやってたからポインタの概念の理解は楽だった。
ただ記述方法が訳解らんかった。

とにかく頭の中で噛み砕いてイメージがつかめないとどんな解説も頭に入らんかった。
0789デフォルトの名無しさん2015/05/13(水) 20:15:16.35ID:Ghw7MN1V
>>784
どういう事情?
全く経験がないのに開発会社に入社したのか?
そりゃ無茶ってもんだぜ
0790デフォルトの名無しさん2015/05/13(水) 20:32:46.44ID:vG965+Mg
>>787
もしかして
「エラーになる処理系が昔あった」→エラーにならない処理系の存在を否定していない
という解釈なんだろうか。
0791デフォルトの名無しさん2015/05/13(水) 20:37:55.43ID:tiPZGdAm
重要な機能はハードウェアエンジニアが作ってて
組込みソフトウェアエンジニアは
ポインタを介してレジスタにアクセスして
ハードウェアの機能をオンにしたりオフにしたりしてるだけ
組込みエンジニアがどんだけ頑張ってもデジタルテレビの画質は変わらないし
結局LSIとかハードウェアエンジニアが主導権握っててソフトウェアエンジニアは
ハードウェアエンジニアの奴隷のゴミ扱いうけるだけ
まじC言語の組込みの仕事はゴミ仕事
0792デフォルトの名無しさん2015/05/13(水) 20:41:47.01ID:fzQ8Q0/1
ゴミ仕事の人がきたか
0793デフォルトの名無しさん2015/05/13(水) 20:55:10.41ID:tiPZGdAm
C言語なんかいまさらやる意味ないJavaやれ
システム開発もWEB系も組込みJavaもどこでも進めるし
趣味でのスマホアプリ開発にも使える
求人サイト見てみろよC/C++なんかゴミ仕事しかない
今時GDB使ってコンソール画面でステップ実行かよアホだろ
0794デフォルトの名無しさん2015/05/13(水) 21:04:32.92ID:/pzsOmxB
>>793
統合開発環境ならC言語でもあるだろうが。

eclipseでも使っとけよ。
0795デフォルトの名無しさん2015/05/13(水) 21:04:55.17ID:RNPZGRSt
言語としてJavaもC/C++も大差ないとおもうが。
どうしてもどっちらか一方しか頭に入らないってのは特殊な人だろ。
0796デフォルトの名無しさん2015/05/13(水) 21:09:01.02ID:tiPZGdAm
eclipseやvisualstudioを使ったC言語の開発現場がどこにあんだよ
組込みがメインじゃろが組込みでC言語いうたらコンソールでGDBやろが
vimでコードアシストもろくにない環境でmakeでgccやろが
githubも使ったことなくて未だにCVSやろが日付名のzipでバックアップしてカオスっとけ
0797デフォルトの名無しさん2015/05/13(水) 21:09:52.70ID:E9+9yRfV
CやってからのJAVAって流れがおおいよね
0798デフォルトの名無しさん2015/05/13(水) 21:10:05.16ID:FA3H2LgS
ずぶの素人にVC++の本渡すとか
0799デフォルトの名無しさん2015/05/13(水) 21:11:04.88ID:/pzsOmxB
いまでも速度が求められるようなものは、C/C++で作ると思うが。

Javaと比較するのはナンセンス。

Javaの場合はどれだけライブラリ、フレームワークが使えるかどうかが重要。

JavaとC#.netなら、おおいに比較してくれ。
0800デフォルトの名無しさん2015/05/13(水) 21:13:30.32ID:/pzsOmxB
>>796
統合開発環境が使いたければ、組込みでもなんでも使えばいい。
0801デフォルトの名無しさん2015/05/13(水) 21:28:22.89ID:FLqH1D4g
JetBrains CLion ─ Intelligent cross-platform C/C++ IDE
https://www.jetbrains.com/clion/
0802デフォルトの名無しさん2015/05/13(水) 21:31:24.05ID:tiPZGdAm
完全に時代遅れのゴミ言語
githubでC/C++のプロジェクトがどんだけあんだよ
C/C++の勉強会とか全く開かれてねえだろ
C言語なんかやっててもネットワーク、データベース、画面回り、全然フレね絵だろ
ネットワーク、データベース、画面回り触らなくて何がソフトウェアエンジニアなの
完全にゴミ、組込みはハードウェア開発のおまけの鼻糞
金魚のふんをありがたがって食ってるのが組み込みソフトウェアエンジニア
0803デフォルトの名無しさん2015/05/13(水) 21:46:10.12ID:2n3z24+O
>>802
またお前か
0804片山博文MZ社外取補 ◆T6xkBnTXz7B0 2015/05/13(水) 21:50:30.94ID:cKVTGKhm
>>802
君がC/C++に未来がないと思うなら使わなくてもいいよ。
君はプログラマーよりも映像プロデューサーの方が向いてるんじゃね?
俺? 大規模プロジェクトでバリバリ使ってるんだが。
0805デフォルトの名無しさん2015/05/13(水) 21:54:49.66ID:+iYQy+8d
超底辺の職業プログラマやってるけどこのスレの内容もほとんど理解できません
助けてください
0806片山博文MZ社外取補 ◆T6xkBnTXz7B0 2015/05/13(水) 21:57:22.70ID:cKVTGKhm
>>805
アスキーかナツメ社の入門書でも読んでろよ
0807デフォルトの名無しさん2015/05/13(水) 22:13:05.26ID:L2Pq5kUd
>>803-804
なんで相手するかなぁ...
0808片山博文MZ社外取補 ◆T6xkBnTXz7B0 2015/05/13(水) 22:17:45.76ID:cKVTGKhm
>>807
仕事に絶望して自殺するバカが多いから取りあえず声かけしよっぜ
0809デフォルトの名無しさん2015/05/13(水) 23:02:03.86ID:tiPZGdAm
組込みソフトウェアエンジニアが不足している?
ドキュメント作成、会議、プレゼン、GDBを使った検査作業、下請け管理の
ゴミ仕事なんか誰がやりたいんだよ
俺は天才プログラマーになりたかったんや
コードなんか一切書かないやないか
資料作り、会議、下請け管理だけやってて何がソフトウェア技術者なの
世の中の役に立つソフトウェアが作りたくて情報科にいったんやないんか
まじゴミ仕事
0810デフォルトの名無しさん2015/05/13(水) 23:03:38.43ID:2n3z24+O
情報科(笑)
0811デフォルトの名無しさん2015/05/13(水) 23:14:07.55ID:/pzsOmxB
>>809
設計に関わっているなら、天才プログラマの本領が発揮できるじゃないか?
0812デフォルトの名無しさん2015/05/13(水) 23:36:10.72ID:KVjnfnXe
大グループの中途半端に下っ端でも頂点でもないとこだと
設計とはいってもプロダクトの根幹に関われず過去資産からの変更開発しかなく
それでもテストは全部いるから下請け管理はやらされ
でとても面白くない仕事だった

>>809 はやく転職しな
0813デフォルトの名無しさん2015/05/14(木) 00:35:48.68ID:vApwSFZ8
>>811
横だけど。

製造大好きな自分は、設計やらされててすごいストレス溜まってる。w
設計時の技術検証用コードの作成とかは喜んでやってるけど、やっぱり物足りない。
お客さんに気に入られて〜とかだとわがままも言えないし。。
0814デフォルトの名無しさん2015/05/14(木) 00:42:51.00ID:k2QfJ8yl
>809
在日専用の2chにコピペを書き続ける仕事って楽しい?
0815デフォルトの名無しさん2015/05/14(木) 07:25:15.24ID:9kEFBjrZ
#include <stdio.h>
#define BUFFSIZE 7

int main(void)
{
char* buf;
char tmp;

buf = (char*)malloc(BUFFSIZE);

tmp = -126;
*(buf+0) = tmp + 0;
*(buf+1) = tmp + 72;
*(buf+2) = tmp + 0;
*(buf+3) = tmp + 103;
*(buf+4) = tmp + 0;
*(buf+5) = tmp + 89;
*(buf+6) = tmp + 126;

fputs(buf,stdout);

free(buf);

return 0;
}
0816デフォルトの名無しさん2015/05/14(木) 08:21:27.05ID:+Q1u5qyE
プログラミング初めて10年目だけど
へっぽこだから今でもポインタに関して「シンボリックリンクみたいなものでしょ?」程度の理解しかないや
0817デフォルトの名無しさん2015/05/14(木) 09:25:28.99ID:SeUvNv+Y
784だけどぶらぶらしてたところを親戚の知り合いの社長に拾ってもらってって感じなんだ
まず基礎のcからって話だったんだが渡された本はc++の本だった
cを覚えれば他のプログラミング覚えるときにも役に立つって言われてひたすらcの勉強してる
勉強はじめて一週間ぐらいでやっと構造体とかはうっすら理解できるようになったんだけどほんとに自分に向いてるのか毎日不安になるんだよ…
教えて貰ったり出来ないし有効な勉強方法がよくわからないんだよなぁ
0818デフォルトの名無しさん2015/05/14(木) 09:47:15.18ID:SeUvNv+Y
今自分がやってるのがネットでも本でも理解が薄くてもとりあえずみたプログラムをうちまくってるんだけどこういう勉強の仕方であってるんだろうか
0819デフォルトの名無しさん2015/05/14(木) 10:21:18.18ID:SXVTC2OO
読むだけじゃなくやるのが正しい。
すぐに達成できる簡単な目標を立てて実践して感触を掴むといいかな。
ポインタなんかは使わないとわからんよ。
0820デフォルトの名無しさん2015/05/14(木) 10:26:12.40ID:SeUvNv+Y
>>819
ありがとう、確かにサイトとか説明文ひたすら読んでてもなにいってだって感じでさっぱりだしね…
見よう見真似でひたすら打ち込んでくよ
0821デフォルトの名無しさん2015/05/14(木) 12:29:40.13ID:O7MsFe85
>>816
まあ、合ってるんじゃね
p++ とかの概念はどうするんだ? って言う懸念はあるけど
0822デフォルトの名無しさん2015/05/14(木) 17:42:37.55ID:oxudfJFS
>>817
学校の授業も教科書読み上げてるようなもんだから独学で本にそって勉強するだけでも充分だよ
ネットで見て勉強してるみたいだけど、お金があるならC言語の入門本を買ったほうがいいと思う

Cに限ったはなしじゃないけど、サンプルプログラムを真似して、そこで終わり、じゃなくて
ここを変えてみたらどうなるんだろう、っていろいろ試していくと結構身につきやすいかも
0823デフォルトの名無しさん2015/05/14(木) 17:53:23.34ID:SeUvNv+Y
>>822
なるほど、参考になる
今日はもう一日中本に沿ってプログラム打ち込んでていつのまにかクラスやらなんやらのとこまでいってた
明日は自分で本真似てうったプログラム少しいじったりしてみることにするよ
無駄に最初の#includeからint mainまでうつのがはやくなった…
0824デフォルトの名無しさん2015/05/14(木) 17:56:58.78ID:KwWkhxua
>>817
まともな職業プログラマになるには数年かかるよ。
0825デフォルトの名無しさん2015/05/14(木) 18:03:48.04ID:SeUvNv+Y
>>824
一週間程度じゃどうにもならんのね
気長にやれればいいんだが期待に応えなきゃっていうプレッシャーもあって焦っちゃうんだよね…
0826デフォルトの名無しさん2015/05/14(木) 18:06:52.68ID:0IdWTpjY
>>824
まともなプログラマって1時間で何が出来る?
0827デフォルトの名無しさん2015/05/14(木) 18:13:55.00ID:tu5PNrB+
ポインタ、構造体の存在しない言語もあるし実用上は勉強しなくてもいいだろ。
必要ならそのときで。
ポインタは参照、構造体はクラスでほぼ代替できる。
0828デフォルトの名無しさん2015/05/14(木) 18:25:02.50ID:Zp0DB20p
ポインタと構造体を使わずにCを実用的に使えるスーパープログラマが現れたと聞いて飛んできますた
0829デフォルトの名無しさん2015/05/14(木) 19:26:53.32ID:tu5PNrB+
プログラム全体でみればポインタという概念は必ずなければいけない事はない。
0830デフォルトの名無しさん2015/05/14(木) 19:44:19.37ID:8GNAdFn0
ソフトしかできないくせに技術者面してるアホと棲み分けするにはいいな
0831デフォルトの名無しさん2015/05/14(木) 19:46:45.47ID:KwWkhxua
>>830
ソフトウェア技術者ですが?
0832デフォルトの名無しさん2015/05/14(木) 19:49:51.31ID:8GNAdFn0
>>831
ソフトなんてバカでも出来るからな
0833デフォルトの名無しさん2015/05/14(木) 19:57:25.38ID:k2QfJ8yl
単なる嫉妬
0834デフォルトの名無しさん2015/05/14(木) 19:58:29.13ID:Y551DifY
足し算さえできればプログラマになれるから安心しろ
0835デフォルトの名無しさん2015/05/14(木) 20:03:53.85ID:k/syaxul
そうだなソフトなんて専門学校でちょろっとやれば出来ちゃうしな
ハードはちゃんとした施設が必要で育てるのに金がかかるし色々ちゃんと勉強せんと理解できん
0836デフォルトの名無しさん2015/05/14(木) 20:07:38.35ID:KwWkhxua
簡単だからソフトって言うんだし。
0837デフォルトの名無しさん2015/05/14(木) 20:24:58.61ID:QpsaVdXI
お勉強なんかいつまでやってたって時間の無駄
こういうソフトウェアを作りたいってのをまず考えて
それを実現するために必要な知識を調べていく方法が一番手っ取り早い
お勉強して何を目指してるんだ
0838デフォルトの名無しさん2015/05/14(木) 20:31:09.81ID:8GNAdFn0
>>837
な、バカでも出来るだろ?
それもやりつつ勉強すんだよ普通の技術屋は
0839デフォルトの名無しさん2015/05/14(木) 20:38:14.18ID:8GNAdFn0
>>837
愚者は経験に学び、賢者は歴史に学ぶ。愚者だけが自分の経験から学ぶと信じている。

こいつこの言葉のままだな
0840デフォルトの名無しさん2015/05/14(木) 20:40:48.46ID:fiPuDRwH
なに荒れてんだw
言いたいことはわかるけど、スレが違うだろうよ
0841デフォルトの名無しさん2015/05/14(木) 20:51:15.60ID:7N8ESwZ3
Cは既に歴史のかなたにある言語だからCに学べと言っているのでは。
0842デフォルトの名無しさん2015/05/14(木) 21:06:33.02ID:QpsaVdXI
学ぶこと自体が目的な人はそれでいいんだろうけど
それじゃあ何も新しいもの生まれないじゃない
0843デフォルトの名無しさん2015/05/14(木) 21:19:22.45ID:/OQN4YGE
Cほど組めるやつ組めないやつの差が出る言語は無い
組めない下手糞のコードってパッと見ですぐわかる
0844デフォルトの名無しさん2015/05/14(木) 21:20:54.03ID:oxudfJFS
可読性は同じぐらいとして、実行時間を優先するタイプ???コードの短さを優先するタイプ????
0845デフォルトの名無しさん2015/05/14(木) 21:26:28.95ID:/OQN4YGE
仕事が早く終わる方を優先するタイプ
0846デフォルトの名無しさん2015/05/14(木) 21:27:36.50ID:KwWkhxua
タイプ
http://livedoor.blogimg.jp/beelzeboulxxx/imgs/a/b/ab65e755.jpg
0847デフォルトの名無しさん2015/05/14(木) 22:09:04.94ID:fuEBqopl
(・∀・)イイ!!
0848デフォルトの名無しさん2015/05/15(金) 17:36:16.95ID:gjAUK4zg
会社でここ開いてるから唐突にそんなもんはられると困ります…
0849デフォルトの名無しさん2015/05/15(金) 21:41:45.54ID:6+woBF0g
ちゃちゃっとできることをさも難しいかのごとく喧伝して必要工数を上げるタイプ
0850デフォルトの名無しさん2015/05/16(土) 01:52:29.36ID:jUULRVoQ
C99で10進数の0ってどう書くの?
0851デフォルトの名無しさん2015/05/16(土) 10:54:02.86ID:lOhswFE6
>>850
C99で変更ないみたいだから、単に0じゃない?
0852デフォルトの名無しさん2015/05/16(土) 11:05:41.75ID:YyhkQWes
8進数になったりしない?
0853デフォルトの名無しさん2015/05/16(土) 11:26:15.24ID:0p3VeBPS
いまいち何を言ってるのかわからない。
何を心配してるのか。
0854デフォルトの名無しさん2015/05/16(土) 12:03:51.70ID:OeFTiPiY
もしそれが8進数だったとして何か不都合はあるのか?
0855デフォルトの名無しさん2015/05/16(土) 12:38:42.81ID:808i7u12
10進数の 0 が記述できないC言語は糞って言いたいだけだろ
相手しなくていいよ
0856デフォルトの名無しさん2015/05/16(土) 13:06:24.09ID:Nus4TJ+M
8進数の場合は00って表記する
0857デフォルトの名無しさん2015/05/16(土) 19:54:48.55ID:GMwyWt2i
&O777
0858デフォルトの名無しさん2015/05/17(日) 01:17:17.99ID:EOve1L53
カレンダーのプログラム程度しか作った事無く資格もない
ド素人ということで配属される予定なんですが浅く広く予備知識つけとく(ポインタとか)のと
分岐・forwhileループ・配列あたりまでのプログラムの山を築いて基礎を固めるか
どちらのほうが教育する側にとってはやりやすいんでしょうか?
やることはおそらく工業系の制御だと思います。
0859デフォルトの名無しさん2015/05/17(日) 01:32:54.68ID:gwzajC0P
>>858
俺なら浅く広く知識つけてもらったほうがいいな
知識あると教えてもらう時の頭の入り違うしね
0860デフォルトの名無しさん2015/05/17(日) 08:33:45.88ID:E55Qxiyn
思うんですが、インデックスが0から始まるのって何でですか?
0番から始まると思ってる人と、1番から始まると思ってる人とで
齟齬は出ないんでしょうか?
0861デフォルトの名無しさん2015/05/17(日) 08:39:09.02ID:L9xrr/te
そんなこと考えるなんてプログラム始めて3ヶ月以内だな?
0862デフォルトの名無しさん2015/05/17(日) 08:39:40.67ID:E55Qxiyn
>>861
4年目です
0863デフォルトの名無しさん2015/05/17(日) 08:40:14.56ID:E55Qxiyn
例えば最初から順番に変数取得してって言われた時
a[0]から始めるのかa[1]から始めるのか悩むじゃないですか?
0864デフォルトの名無しさん2015/05/17(日) 08:48:19.51ID:sm1abTym
先頭アドレスからのオフセットでしょ。
i<size とも書けるから便利だしw
0865デフォルトの名無しさん2015/05/17(日) 08:53:06.02ID:zQUNSVwx
1から取る場合なんてあるか?
普通は0で、特別1から取るときはそう言うでしょ

インデックスが0から始まるのは、たぶんインデックスレジスタの名残だろじゃね
ベースレジスタの値×インデックスの値=オフセット値で計算するからな
0866デフォルトの名無しさん2015/05/17(日) 09:04:17.19ID:Nddh46PA
a[0]は、*(a+0)と書いたのと同じで、配列aの先頭要素になる
a[1]だと、*(a+1)で2番目の要素になってしまう
0867デフォルトの名無しさん2015/05/17(日) 09:49:07.61ID:nnFlbvVf
>>865
他言語になっちまうけど、COBOLは1スタートです
今のCOBOLは変わったのかどうかまでは知りませんが;
0868デフォルトの名無しさん2015/05/17(日) 09:53:10.91ID:ISfLAoNP
データベースの列指定も1からなんだよなあ
0869デフォルトの名無しさん2015/05/17(日) 09:53:40.70ID:V3PZsjdl
Fortran も 1 から
Pascal とか VB は任意の値を指定できる

一番目の値とか考える人は 1 からの方がしっくり来るんだと思う
0870デフォルトの名無しさん2015/05/17(日) 10:33:37.55ID:TC+xegdR
0から始まるのはアセンブラを引きずってるから
1--MAX
0--(MAX-1)
後者が変だと感じないのは脳が老化している
0871デフォルトの名無しさん2015/05/17(日) 10:34:56.99ID:EOve1L53
>>859
了解です。一通り目に入れる感じで学習して行こうと思います。
0872デフォルトの名無しさん2015/05/17(日) 11:01:56.14ID:sm1abTym
だからカウントじゃなくてオフセットでしょ。
enumだって0から始まるしその方が便利だよ。
0873デフォルトの名無しさん2015/05/17(日) 11:20:27.46ID:Wl3PdyQn
ポインタはオフセットで0から
配列は個数で1からにしよう
0874デフォルトの名無しさん2015/05/17(日) 11:51:31.89ID:bObx+CyQ
>>860
俺の教科書は「自然数=0, 1, 2, .... 」「それ以外の定義は素人」と断言している
多分、齟齬があっても互いに素人呼ばわりしているだけだろう、問題ない
0875デフォルトの名無しさん2015/05/17(日) 12:26:40.86ID:V2aSY1Hr
中学では自然数は1からで0は含まれなかったな
0876デフォルトの名無しさん2015/05/17(日) 12:28:48.18ID:V2aSY1Hr
思えば日付も1から始まってるせいで2000年代が21世紀(2000年は除く)とか
ややこしくなってるしなあ。
0年0世紀から始めりゃきれいなのに
0877デフォルトの名無しさん2015/05/17(日) 12:43:10.90ID:5c3dws5I
>>874
零元がないと自然数を拡張したり、集合論としてやりにくいだけで
人間がものを数える最初は1スタートが自然。
0878デフォルトの名無しさん2015/05/17(日) 12:46:39.26ID:gwzajC0P
もういいよ
0879デフォルトの名無しさん2015/05/17(日) 12:47:27.18ID:JNSkSdXY
道路もスタート地点は0km
0880デフォルトの名無しさん2015/05/17(日) 12:47:29.16ID:ilt+9b63
仕様的に0から始まった方が都合がいいから。
0881デフォルトの名無しさん2015/05/17(日) 14:01:02.03ID:TC+xegdR
オフセットが0を許すのは当然だが
インデックスは1から始まるべき
0882デフォルトの名無しさん2015/05/17(日) 14:43:52.61ID:kKRSs7TC
>>881
始まるべき(キリッ
じゃなくてC言語がそういう仕様なんだから仕方ないだろ
0883デフォルトの名無しさん2015/05/17(日) 17:09:02.09ID:1IpXjnUn
余所の 1スタートの言語へ行くか 1スタートが元の俺俺C を開発
後者は絶対やらかしそうだが
0884デフォルトの名無しさん2015/05/17(日) 17:50:15.84ID:ffhtfDk6
R も 1-base なんだよね。でもまぁいつも for (i in 1:n) { ... } て書いてるから
特に変だとは思わないけれども
0885デフォルトの名無しさん2015/05/17(日) 18:57:09.95ID:ilt+9b63
Cが出来た当初のCPU性能だとわざわざインデックス番号を-1するコストが勿体無いと思う。
0886デフォルトの名無しさん2015/05/17(日) 19:09:19.86ID:TC+xegdR
Cが出来た当初のメモリ価格だと1バイトたりとも無駄に使うのは犯罪
0887デフォルトの名無しさん2015/05/17(日) 19:25:53.43ID:9fO52Wbi
計算機学的な数学的発想とは無縁な人だろうな。
0スタートの方が絶対的に合理的なのに。
感性的に文系脳だと、社会慣習にマッチしているという、左脳的、ネトウヨ的、固定観念・先入観的発想の論点で、1スタートが自然とかほざく。
0888デフォルトの名無しさん2015/05/17(日) 19:50:08.93ID:uVyFEayZ
座標の原点も(0,0)は不自然、(1,1)にしろとか言い出すのかな
0889デフォルトの名無しさん2015/05/17(日) 19:59:39.61ID:3cG/S5lD
多分Fortran由来だろうけど、物理系の人たちは1スタートを好むよね。
Matlab系全般、最近では科学技術計算向けの高性能を標榜するJuliaも1スタート。

個人的にはx%mが0〜(m-1)だから0スタートが合理的だと思ってる。
0890デフォルトの名無しさん2015/05/17(日) 20:02:50.28ID:c8Xp4GLX
>>887
数学的な慣習では添字が1から始まる方が自然だからFORTRANなど初期の
数値計算向け言語はみんな1開始だったんだよ。
計算機科学と数学をごっちゃにするから文系とか意味不明な方向に矛先が向く。
0891デフォルトの名無しさん2015/05/17(日) 20:06:48.49ID:TC+xegdR
道具に使われるのを恥ずかしいと思わないドカタ脳の論点で(ry
08928872015/05/17(日) 20:12:33.23ID:9fO52Wbi
>>889
まさしくそれ。例えばカレンダーとかね。
0893デフォルトの名無しさん2015/05/17(日) 20:16:20.86ID:3cG/S5lD
そういや、MathematicaとかPARI/GPとかガチの数学系言語も1スタートだね。
0894デフォルトの名無しさん2015/05/18(月) 17:46:29.07ID:/fldf48Z
数学で添字が序数(1個 2個 と数え上げる数)だけだとおいしくなくなるのは
テイラー/マクローリン展開あたり? (0乗項が欲しい)
0895デフォルトの名無しさん2015/05/18(月) 20:29:35.06ID:bjaRbl0h
IT業界の『多重下請け構造』は社会悪になりつつある
ttp://paiza.hatenablog.com/entry/2014/09/18/IT%E6%A5%AD%E7%95%8C%E3%81%AE%E3%80%8E%E5%A4%9A%E9%87%8D%E4%B8%8B%E8%AB%8B%E3%81%91%E6%A7%8B%E9%80%A0%E3%80%8F%E3%81%AF%E7%A4%BE%E4%BC%9A%E6%82%AA%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%A4%E3%81%A4%E3%81%82
0896デフォルトの名無しさん2015/05/18(月) 22:51:51.14ID:bjaRbl0h
わいは天才プログラマーになりたかったんや
0897デフォルトの名無しさん2015/05/18(月) 23:26:15.33ID:Paz0utPy
ま た お 前 か
0898デフォルトの名無しさん2015/05/18(月) 23:29:25.39ID:J8UTKINg
早く消えればいいのに
0899デフォルトの名無しさん2015/05/19(火) 14:48:54.57ID:MzsPfgik
>>895
なりつつあるじゃねーよ 周回遅れはどいてろ
更に責任所在の問題もぬけてるじゃねーか
0900デフォルトの名無しさん2015/05/20(水) 05:35:40.56ID:v3NczzHT
添え字のオフセットは「エキスパートCプログラミング」という本に解決策が書いてあった気がした
それでペラペラめくってみたが・・・現実世界にもgrepあればなぁ
0901デフォルトの名無しさん2015/05/20(水) 08:00:33.72ID:iEwCGDQw
>>900
ペラペラめくって終わりか
0902デフォルトの名無しさん2015/05/20(水) 08:40:56.65ID:v3NczzHT
>>901
ペラペラはペラペラだが何度もペラペラした訳だが
0903デフォルトの名無しさん2015/05/20(水) 14:52:12.93ID:BBUsAeFA
あんまりにも未熟で質問の仕方も下手くそになるかもしれないが助けてくれないか…
かなり出来上がってるプログラムをいじって編集する課題を出されてて
今やってるのがダイアログボックスの中でいくつかの項目から条件を指定するとその条件にあったものが閲覧出来るみたいな感じで
検索する項目はID 名前 役柄みたいな感じの3つなんだけど条件があっていても特定のファイルだけ表示されないように除外する方法が知りたいんだ
コードをはらないとこんな質問どうにもならないかもしれないが仕事関係のファイルをコピーされて渡されてるからそれも難しい
昨日から10時間以上にらめっこしてるがもうどうしようもないんだ…
0904デフォルトの名無しさん2015/05/20(水) 17:58:27.14ID:xPP2t7ur
向いてないから死ぬべき
0905デフォルトの名無しさん2015/05/20(水) 18:01:58.01ID:/1PKd//z
死んだら自殺教唆で通報してやるよ
0906デフォルトの名無しさん2015/05/20(水) 18:37:28.86ID:HsZYzFlk
>>903
社会人でこの文章力かよ
0907デフォルトの名無しさん2015/05/20(水) 19:16:15.46ID:cONZoquf
項目とファイルの関係について述べよ。
0908デフォルトの名無しさん2015/05/20(水) 19:48:38.06ID:EYfpEq4l
何がわかってないか自分でわかってないのね
0909デフォルトの名無しさん2015/05/20(水) 20:05:50.93ID:d04OrxSr
社怪人
0910デフォルトの名無しさん2015/05/20(水) 20:47:34.83ID:rUG5np26
さすがに社会人なら出された課題は自分で解かないとだめだろ
説明できなくて怒られるの図が見える
0911デフォルトの名無しさん2015/05/20(水) 21:29:15.25ID:ViQsHset
ネタだろ
ネタじゃないとしてもちゃんと説明できる気がしないし
0912デフォルトの名無しさん2015/05/21(木) 02:14:35.47ID:8lPMONx3
>>903
http://ideone.com/Qyju6t
ストレージのファイルなのかDBのレコードなのかわからなかった
検索がANDなのかORなのかも
こんなコードしか書けなかったよ
0913デフォルトの名無しさん2015/05/21(木) 11:20:07.69ID:fARx/LI0
わいは猿や!天才プログラマー猿になりたかったんや!
0914デフォルトの名無しさん2015/05/21(木) 12:44:00.02ID:fKJyVKW3
>>865
最近はわりとそうすることが多いかも
0番目を特殊シークエンス扱いってのをよくやる
0915デフォルトの名無しさん2015/05/23(土) 22:12:49.34ID:880fXT8y
C言語が時代遅れって話がここ10年で囁かれてますが、何で一番処理が速い言語が
廃れるんですか?例えばネットワークのプログラムは、ネットワークは速度が重要視
されますから処理の早いC言語を使うべきだと思います。実際はどうなんでしょうか?
0916デフォルトの名無しさん2015/05/23(土) 22:23:14.99ID:ojXlCtK2
>>915
http://oshiete.goo.ne.jp/qa/3248667.html
0917デフォルトの名無しさん2015/05/23(土) 23:40:54.47ID:DFFXwSdo
最近はコンシューマゲームでさえスクリプト言語で作ってるのもあるらしいしな。

動かすハードを限定させないようにするとC言語の仕様だときついものがあるだろう。
0918デフォルトの名無しさん2015/05/24(日) 00:20:34.68ID:CIt/0wyb
JITがあるから実際には大した速度差はない
プログラムの書き方によってはむしろ逆転するかもしれない
あと、Cは安全性が低くて脆弱性の原因だからネットワークでは避けたい
0919デフォルトの名無しさん2015/05/24(日) 11:52:39.58ID:ttfptk0Q
他言語なら安全って訳でもないけどな。
0920デフォルトの名無しさん2015/05/24(日) 13:16:42.32ID:c5QH3103
C言語は開発効率が悪すぎるしな。

C++とかだと、オブジェクト(変数)の自動初期化機能だとか、動的確保メモリやらのリソースの自動開放処理が有って、
Cで苦労していたことが簡単に確実に出来るようになってるし。

C#とかだと、async/awitを使えば、普通の同期処理的に関数を書くだけで、
その非同期指定部分を自動的にスレッドで処理して、それが終われば続きとなる同期部分を自動的に実行してくれるとか。
言語仕様レベルで、今時のマルチコアなCPUを考慮しているからね。
0921デフォルトの名無しさん2015/05/24(日) 13:21:32.40ID:c5QH3103
JavaとかC#とかJITの言語だと、動かす環境でそのCPUに応じた最適なコードが生成されるしな。
0922デフォルトの名無しさん2015/05/24(日) 14:16:45.91ID:tfiN6M1R
C言語の仕事にはろくな仕事がない
GDBでコンソール画面でステップ実行とかまじ勘弁
オシロスコープを使った動作確認とかまじ勘弁
0923デフォルトの名無しさん2015/05/24(日) 14:18:49.76ID:exsxxDGe
>>915
人間様が機械をこき使って人間様が楽をするのが本来あるべき姿
Cを使うということはその一部を賢い人間様が肩代わりをするということを意味する
機械や技術が進歩すればそういう必要はだんだんなくなる
故に時代遅れ

さらにネットワーク関連の開発はCが苦手とする部分を直撃する
故に昔から避けられているし Javaが主流になれたのもそこが原因
0924デフォルトの名無しさん2015/05/24(日) 14:26:15.64ID:OkaosCx2
>>923
>ネットワーク関連の開発はCが苦手とする部分を直撃
ってなによ?
0925デフォルトの名無しさん2015/05/24(日) 14:57:02.18ID:DzSqeMhN
>>923がプログラマーかどうかは知らないけど
こういう使い物にならなそうなのはうちの会社に面接来ても書類選考の段階で落としちゃうわな
0926デフォルトの名無しさん2015/05/24(日) 15:13:56.92ID:UPLYrFwQ
>>923
言語としての機能は時代遅れになってもなくならないよ
機械・技術の進化は止まらないが進化したものが利益になるとは限らない
小さなメモリ・より安価なマイコンの限界を追求するためにC言語は必要不可欠
0927デフォルトの名無しさん2015/05/24(日) 15:16:04.33ID:i34y3CNt
>>923
ファームウェアって知ってるかな?
0928デフォルトの名無しさん2015/05/24(日) 15:19:48.98ID:35ZDMNrX
ドライバーみたいなハードウェアに近いところのプログラムをアセンブラやC以外で作ってると聞くとなんか信用出来ない。
0929デフォルトの名無しさん2015/05/24(日) 15:54:15.72ID:GQYzkbvF
>>923
意のままに完全に肩代わりしてくれるならならともかく
そうでないからエンジニアが必要なんだ
0930デフォルトの名無しさん2015/05/24(日) 16:33:28.07ID:+ybRJBl1
>>915
処理速度は速いんだが、開発速度が遅いから。。。
0931ドリル優子2015/05/24(日) 20:50:35.84ID:AQeiVYfT
【話題】なぜ日本人は世界中でモテモテなのか!?日本人の魅力について外国人100人に聞いてみた【最強】

https://www.youtube.com/watch?v=P4UD7b6h2KM
0932デフォルトの名無しさん2015/05/25(月) 10:50:24.07ID:Wo+u4H9T
聞きたいんだが0から勉強していってcでまともにかけるようになるまでどれぐらいかかった?
勉強はじめて二週間ぐらいなんだが自分が0からかけるようになる気がしないんだが
ポインタとかあやふや過ぎて使いこなせる気がしないし
0933デフォルトの名無しさん2015/05/25(月) 11:04:39.49ID:SeiMBcWL
5年位だよ
じゃんけんゲームくらいでいいなら、1年で十分
0934デフォルトの名無しさん2015/05/25(月) 11:37:22.68ID:BoDY/xJk
大学時代BASICとアセンブラをある程度理解できる状態から始めて
数ヶ月でアセンブラ+Cでプログラム組めるようになった(Cの理解できないところをアセンブラで記述)。
半年の講義で今の技量で作れる自作プログラムを書けって課題で
テキスト表示の3D迷路作った。

同級の大半は過去の課題そのまま出してた。



あとVCの広告かなんかで時間と理解度のグラフがあってVCは1年ぐらい全く理解度が上がってなかったww
0935デフォルトの名無しさん2015/05/25(月) 11:48:16.97ID:SeiMBcWL
大学の半数以上がC言語挫折する
まぁ、俺が行ってった大学での話だけど
0936デフォルトの名無しさん2015/05/25(月) 12:31:38.18ID:+qOGko8x
最初の言語にCを選ぶなと何度も言ってるだろう
老害が勧めても無視しろ

加えて、それを覚えた後に何を作りたいか、どう作るかを明確なイメージとして持っておくこと
0937デフォルトの名無しさん2015/05/25(月) 12:47:54.95ID:hRQdkvZn
>>936
大学の講師は時代遅れのじじいだから、C、C++を教えたがる。
0938デフォルトの名無しさん2015/05/25(月) 12:56:54.64ID:ckkiM8D4
最初のプログラミング言語に Cは敷居高い
じゃあ何が適切なのか? BASIC? FORTRAN? PASCAL?
0939デフォルトの名無しさん2015/05/25(月) 13:09:23.90ID:BkqdDrua
最初にCの何が駄目って作ってて何も面白くも糞も無いんだよね
それを勉強とわりきって耐えられる強靭な人はいいけど
プログラミングの楽しさも伝えるという意味では最悪な言語の一つ
0940デフォルトの名無しさん2015/05/25(月) 13:11:05.79ID:hRQdkvZn
>>938
時間がない大学じゃExeclVBA使って教えた方がいい。
0941デフォルトの名無しさん2015/05/25(月) 14:36:52.72ID:Xk6vQ0dI
C はともかく、C++ は書いてて楽しかったけどな。
気に入らないのは仕方ないけど、なんだかな。
0942デフォルトの名無しさん2015/05/25(月) 15:35:40.12ID:BoDY/xJk
大学の最初半年はPASCALやってた。
その後2年半はCとFORTRANだったな。
CはともかくPASCALもFORTRANも、もう覚えてない。
0943デフォルトの名無しさん2015/05/25(月) 17:33:13.90ID:DGE9ym7n
>>939
面白かったけどなC言語初めてやったとき
あ、もしかして情報工学の人?w
0944デフォルトの名無しさん2015/05/25(月) 18:27:15.52ID:qbsfNozj
>>943
ううん、元々ガチハード屋出身でアセンブリからIT業界へ。
自分自身は楽しかったよ。メカが動くのって素敵な事だしね。
ただ、初学者で特に開発=ソフトだと思ってる人にとってはつまらないものだ。
ObjectiveCのようなほうがよっぽど楽しめると思うし好きになれると思う。

PC上コマンドラインで動くだけのを作るのが楽しいと思えたならそれだけで才能だと思うw
0945デフォルトの名無しさん2015/05/25(月) 19:35:16.67ID:q3RsIaDq
Obj-CはCの基礎が無いと話にならんけどな。
0946デフォルトの名無しさん2015/05/25(月) 20:12:38.61ID:3sNtCck1
DXライブラリ+Cでゲームとか作れるじゃない
ビットマップ画像をモノクロ化とか拡大縮小とか面白いじゃない
0947デフォルトの名無しさん2015/05/25(月) 21:08:17.20ID:T/6uKPGY
ど素人はすっこんでろよ
0948デフォルトの名無しさん2015/05/25(月) 21:08:23.20ID:3sNtCck1
客から貰った仕事を下請けに丸投げしてピンはねしてるだけの組織に何の意味があるのか
そんな組織がのさばって若者使い捨てを繰り返してるからいつまでたっても日本に
GoogleやAppleのような情報技術をコアとして持ったベンチャー企業が誕生しないし
馬鹿チョンカメラと馬鹿にしていた韓国メーカーには負けるしSonyはiphoneを作れなかったんだろ
ソースコードの読み書きができない人間は全員IT業界から去って欲しい
0949デフォルトの名無しさん2015/05/25(月) 21:09:08.28ID:ctBhOidM
大学で学ぶCだとグラフィックライブラリのようなハード依存なものは教えないだろう。

初心者向け標準関数だけでコンシューマ、ソシャゲーやってる連中に
面白いって思えるソフトを作るだけの知識教えるのは無理だろ。
0950デフォルトの名無しさん2015/05/25(月) 21:15:02.35ID:HDvkfTxN
プログラミングの入り口のことなら昔から状況は変わっていない
0951デフォルトの名無しさん2015/05/25(月) 21:18:00.38ID:gWMMo+ag
25年くらい昔に会社のUNIX機でXライブラリで倉庫番作って作業フォルダに置いといたら人気がですぎた
0952デフォルトの名無しさん2015/05/25(月) 21:33:17.57ID:yiCcpHLL
>>944
そんなわけないだろうよ
俺もハード屋だw
0953デフォルトの名無しさん2015/05/25(月) 21:38:20.05ID:Xg462pbc
おい、ここは入門編だろ?
0954デフォルトの名無しさん2015/05/25(月) 21:39:46.21ID:YV6zsHLJ
最初の面白さというとこでは、
WindowsでC#入れてフォームに部品をペタペタ貼って
ちょっとコードを書いて動かしてみるとか
0955デフォルトの名無しさん2015/05/25(月) 21:50:41.92ID:7RCaTK7c
>>951
スズキさん?
0956デフォルトの名無しさん2015/05/25(月) 21:51:01.04ID:WeAPSjGI
教えて
http://peace.2ch.net/test/read.cgi/tech/1432558144/
0957デフォルトの名無しさん2015/05/25(月) 22:15:38.72ID:o6nCxH6o
ソケット通信でグループでにょっきゲーム作って遊んだときは無駄に盛り上がった
ncursesでブロック崩し作るのは定番で面白くて作り甲斐があった
やっぱゲーム的なものが作れると面白くなるよね
0958デフォルトの名無しさん2015/05/25(月) 22:18:29.45ID:Xk6vQ0dI
実際にリアル電車が自分のプログラムで動いたときは感動した。そういえば。
0959デフォルトの名無しさん2015/05/25(月) 22:37:16.64ID:qbsfNozj
おっと
>>952
自分自身は楽しかったよ。メカが動くの大好きだしねw

自分が書いてるのは初学者(特にプログラミング=OS上で動くもの)で
考えてる人達があまりに多いのでそういう人にとっては
文字が動くっていうのはあまりにつまらなく感じると思うってことね。
0960デフォルトの名無しさん2015/05/26(火) 00:16:05.19ID:jJpgaPYe
>>922
cとgdbは好きだったけど、業界のゼネコン体質の構造が受けつけない
隣の研究室のアホが大手に就職していって仕事を投げてくるのかと思うとね
0961デフォルトの名無しさん2015/05/26(火) 06:53:29.85ID:ScwGU6r4
電卓の画面サイズでもええんやで
0962デフォルトの名無しさん2015/05/26(火) 11:26:42.63ID:WpucxMlI
ダイアログ1で入力した分を別のダイアログ2にある表の中に表示させるプログラムってどんな風に書けばいい?
0963デフォルトの名無しさん2015/05/26(火) 11:39:54.60ID:rpWtOGec
ダイアログってC言語の標準機能じゃないだろう
0964デフォルトの名無しさん2015/05/26(火) 11:41:18.00ID:WpucxMlI
ごめん聞くとこ間違えた
0965デフォルトの名無しさん2015/05/26(火) 13:58:18.93ID:8EkoRHcS
プログラミング自体が面白いって人と
プログラムで面白いものを作りたいって人では
やっぱり間隔が違うんだろうね

俺は電卓で構文解析とか脳汁出たけど、今さら電卓wwwって
人も多いだろうねぇ
0966デフォルトの名無しさん2015/05/26(火) 14:25:21.64ID:jNteKZGj
2000桁の電卓とか作ってみようと思ったことはあった。
直ぐに別のやりたいことが出来て構想だけで終わったけど。
0967デフォルトの名無しさん2015/05/26(火) 14:56:36.22ID:eiMDqtUU
GUIとかどうでもいいところが大変そう
0968デフォルトの名無しさん2015/05/26(火) 17:26:58.75ID:vEbKL195
ちょっとfloat test[441000]の配列をnewしたいんだが、
普通に確保しようとすると失敗するんです

ほんで、
float *test1;
float *test2;
・・・・
float *test100;


test1 = new float[4410];
test2 = new float[4410];
・・・
test100 = new float[4410];

と書けばできるんだが、配列が分割されるから以降のプログラムが肥大してあんまやりたくない
なにか良い方法無いですかね。やっぱ諦めてこうするしかない?
0969デフォルトの名無しさん2015/05/26(火) 17:31:17.77ID:vtILvpXj
環境は?
0970デフォルトの名無しさん2015/05/26(火) 17:33:30.18ID:vEbKL195
VS Community2013、windows7 64bitです
0971デフォルトの名無しさん2015/05/26(火) 17:34:52.39ID:vtILvpXj
new だと C++ じゃないかな。
とりあえず
float * test;
test = new float[441000];
はエラーでないけどな。
0972デフォルトの名無しさん2015/05/26(火) 17:40:11.45ID:PNafWbTb
>>968
分割したのは関係ない。
float test[10][44100]でもたぶん無理。
動的確保かどうかだろう。
0973片山博文MZ ◆T6xkBnTXz7B0 2015/05/26(火) 17:41:38.97ID:4TU/edTg
struct BUFF {
typedef float *pfloat;
pfloat m_a[100];
BUFF() {
for (int i = 0; i < 100; i++) m_a[i] = new float[4410];
}
float& get(int i) {
return m_a[i / 4410][i % 4410];
}
const float& get(int i) const {
return m_a[i / 4410][i % 4410];
};
};
0974デフォルトの名無しさん2015/05/26(火) 17:46:42.57ID:vtILvpXj
まあローカルに宣言してスタックオーバーフロー食らってんだとは思うが、、、
new で100分割してるから違う可能性もあるのかなと
0975デフォルトの名無しさん2015/05/26(火) 17:48:10.05ID:vEbKL195
作曲ソフト上で起動させるようなソフトだから制限があるのかもしれない・・・
ちょっとこれ>>973やってみますん
0976デフォルトの名無しさん2015/05/26(火) 17:54:32.06ID:BsOGEYPd
0初期化しないとノイズになるよ。callocがいいんじゃない?
0977デフォルトの名無しさん2015/05/26(火) 18:07:19.73ID:vEbKL195
if (test.m_a) 音を出す関数(); でちゃんとメモリ確保できてましたサンクス!これで進めてみるよ

>>976
起動時に数字埋めるんでそこは大丈夫っす



合ってるか分からんがデストラクタも入れさしてもらいました
struct BUFF {
typedef float *pfloat;
pfloat m_a[100];
BUFF() {
for (int i = 0; i < 100; i++) m_a[i] = new float[4410];
}
~BUFF() {                         //デストラクタ
for (int i = 0; i < 100; i++) delete [] m_a[i];       //デストラクタ
}                              //デストラクタ
float& get(int i) {
return m_a[i / 4410][i % 4410];
}
const float& get(int i) const {
return m_a[i / 4410][i % 4410];
};
}test;
0978デフォルトの名無しさん2015/05/26(火) 18:31:37.06ID:PNafWbTb
float test[441000];がダメで、
float * test = new float[441000];だと出来るのは、
C言語が管理するメモリ領域を使い切るかの差だろう。
後者だと、C言語が管理するメモリ領域の使用量は4か8バイト程度で、前者だと4*441000バイト程度だろう。
スタックオーバーフローってのになるんだろ。
コンパイルオプションで回避できるかもしれないが、動的確保したほうが安全。
0979デフォルトの名無しさん2015/05/26(火) 18:34:12.33ID:PNafWbTb
スタックオーバーフロー - Wikipedia

スタックオーバーフローの一番の原因は再帰による無限ループである。

次によくある原因としては、スタック上に巨大な配列を確保しようとすることである。

コールスタックに格納できる情報量には上限があるため、巨大な局所変数はコールスタックに格納するのではなくヒープ領域などを明示的に利用すべきである。

さらに他の原因として、関数呼び出しの階層数が深すぎる場合などがある。

スタックオーバーフローの原因となりうるコーディング技法は比較的限定されており、市販ソフトウェアでこれが発生した場合はそのソフトハウスの開発能力が極めて低い事を自白するようなものである。
0980デフォルトの名無しさん2015/05/26(火) 18:46:29.19ID:+CdXJwci
C言語が管理w
0981デフォルトの名無しさん2015/05/26(火) 18:52:40.85ID:PNafWbTb
C言語編 - メモリスタック
http://www.g-ishihara.com/c_mm_01.htm


2.4 スタックとスタックサイズ (Oracle Solaris Studio 12.2: OpenMP API ユーザーガイド)
https://docs.oracle.com/cd/E19205-01/821-2493/aewcf/index.html



/F (スタック サイズの設定) Visual Studio 2013
https://msdn.microsoft.com/ja-jp/library/tdkhxaks.aspx
0982デフォルトの名無しさん2015/05/26(火) 19:19:10.97ID:jNteKZGj
自動変数のサイズは1MB未満にしとけ。
16bit環境なら32KB未満。
0983デフォルトの名無しさん2015/05/26(火) 19:25:27.45ID:oZ3xuZ4g
あ
0984デフォルトの名無しさん2015/05/26(火) 20:08:07.98ID:80fpKdg+
windowsではスタックが1MBだったな
0985デフォルトの名無しさん2015/05/26(火) 20:15:19.36ID:8y7MUKMu
スタックって逆ポーランド記法するときに使う奴だろ
メモリ管理とか関係ないだろイミフ
0986デフォルトの名無しさん2015/05/26(火) 20:21:53.46ID:w8tnXnby
そのネタじゃ釣れないと思うぞ
0987デフォルトの名無しさん2015/05/26(火) 20:21:59.50ID:m3VarVyq
>>985
流石に無理があると思うぞ
0988デフォルトの名無しさん2015/05/26(火) 21:30:47.55ID:8y7MUKMu
スタック領域を知らない奴が逆ポーランド記法を知っているだろうか
0989デフォルトの名無しさん2015/05/26(火) 21:49:14.65ID:t0aBeo7z
自分で言うのかよ
0990デフォルトの名無しさん2015/05/26(火) 22:26:11.15ID:eukvymZK
>>988
ごみ
0991デフォルトの名無しさん2015/05/26(火) 22:43:44.79ID:oKlXT6AY
一人漫才ワロタ
0992デフォルトの名無しさん2015/05/26(火) 22:46:20.46ID:CMlNyAc+
この間ひとつ前のレスと全く同じ ID の時あって驚いたけど
これどれだけ信用できんの?
0993デフォルトの名無しさん2015/05/26(火) 23:09:22.73ID:rpWtOGec
掲示板毎にIDが用意されます。
掲示板の住民数と被り率は計算可能です。

住人数 自分のIDと別のIPによるIDが被る確率
2: 0.0015%
100: 0.15%
500: 0.76%
1000: 1.51%
5000: 7.34%
10000: 14.15%
45427: 50%オーバー
0994デフォルトの名無しさん2015/05/26(火) 23:15:42.61ID:eiMDqtUU
IDかぶりと自演を判別できないと生命に関わるからな
0995デフォルトの名無しさん2015/05/26(火) 23:30:47.66ID:rpWtOGec
生きて
0996デフォルトの名無しさん2015/05/27(水) 01:16:30.08ID:UP3+WVEg
上りのエスカレーターに乗っていると、
たまに、スカートの女性が前に立っていて、
綺麗な白い素足を見ていると、思わずおちんちんが
おおきくなってしまうんですが、この時のありがとうの気持ちを女性に伝えるには
どうしたらいいでしょうか
0997デフォルトの名無しさん2015/05/27(水) 01:30:46.94ID:nE/MTfnJ
置換するプログラムを書けばいいよ
0998デフォルトの名無しさん2015/05/27(水) 04:59:52.62ID:s8ep1oDe
うめ
0999デフォルトの名無しさん2015/05/27(水) 05:07:41.36ID:5zOFtYYl
埋め原真子
http://www.asahi.com/culture/idol/profile_nmb/images/NMB_B2_5.jpg
1000デフォルトの名無しさん2015/05/27(水) 05:14:12.34ID:25dSe3zU
同じネットカフェ内からアクセスすると、

異なるPCから書き込んでも、同じIDになる
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。