C言語なら俺に聞け! Part 82

このエントリーをはてなブックマークに追加
1v(^o^i)d
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

コンパイラを探しているなら >>2-13 を。
上記を逸した場合の結果は激しく未定義だYO!

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

各種リンクは>>3-20あたり(誰か適当に貼って)

C言語なら俺に聞け! Part 81
http://pc5.2ch.net/test/read.cgi/tech/1085806791/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
2デフォルトの名無しさん:04/06/12 23:04
2
3デフォルトの名無しさん:04/06/12 23:04
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
#pragma z(>>1)
#pragma Z(>>1)
6デフォルトの名無しさん:04/06/12 23:07
#pragma marriage(4,5)
74:04/06/12 23:07
#pragma orz
#pragma AA(_| ̄|○)
9デフォルトの名無しさん:04/06/12 23:12
#pragma akita
データの初期化について質問します。
例えば以下の例が有るとします。
enum Type
{
  taaa,
  tbbb,
  tccc,
  tlast
};
static char lpType[tUnknown];
void main()
{
  lpType[taaa] = "aaa";
  lpType[tbbb] = "bbb";
  lpType[tccc] = "ccc";
  printf(lpType[tbbb]);
}
これはこれで上手く行ってる訳ですが何となく美しくない。
そこでこれをlpTypeを宣言した時に初期化したいわけですが
何らかの方法って無いでしょうか。
要は
static char lpType[tUnknown] = {
  [taaa] = "aaa",
  [tbbb] = "bbb",
  [tccc] = "ccc",
};
見たいな事が出来ないかなぁと思うわけですが。
あっと一部元ソースのまま残ってました。
正しくは以下です。
>static char lpType[tUnknown];
static char lpType[tlast];
13デフォルトの名無しさん:04/06/12 23:43
>>11
その上の例でエラーや警告が出ないのか?
14デフォルトの名無しさん:04/06/12 23:47
> static char lpType[tUnknown];
> lpType[taaa] = "aaa";

警告は処理系依存だが、これで警告を出さないコンパイラは嫌だ。
1514:04/06/12 23:48
s/tUnknown/tlast/
どうもスミマセン、*が抜けてますね。
本当の正しくは
static char* lpType[tlast];
です。
1714:04/06/12 23:50
>>16
static char *lpType[tlast]={"aaa","bbb","ccc"};
18デフォルトの名無しさん:04/06/12 23:51
import java.applet.*;
import java.awt.*;
import javax.swing.*;
>>16
enum なんか使わずに変けば?
>>17
それだと常に順番は固定じゃないですか。
enum Type
{
  tccc,
  tbbb,
  taaa,
  tlast
};
とかに変えても動くようにしたいわけです。
>>20
どーでもいいけど、C++でいいんじゃね。
22デフォルトの名無しさん:04/06/12 23:54
>>20
あきらめろ
オレにはついていけないよ・・・レベル高すぎ
>>19
ごめんなさい、意味がわからないです。
>>21
C++だとどうやって書けば良いのですか?
>>22
前に、どこかでこんなような事が出来るみたいな事を見たんですが。
C++だったのかもしれません。
>>24
なので、別のC++スレに逝ってください。
26デフォルトの名無しさん:04/06/12 23:58
#define taaa "aaa"
#define tbbb "bbb"
#define tccc "ccc"
#define tlast 3
static char *lpType[tlast]={taaa,tbbb,tccc};

これくらいしかないが、#defineを使うのは嫌なんだろうな。
>>20
C99でいけるよ。
28デフォルトの名無しさん:04/06/13 00:00
>>27
構造体じゃなくて?
>>26
taaaやtbbbに0,1と言った数値も割り振っておきたいので
それだと、ちとまずいです。
>>27
それに付いてもちょっと調べてみます
>>25
ではそちら方で聞きなおしてきます。
有難うございました。
30デフォルトの名無しさん:04/06/13 00:07
printf(lpType[tbbb]);
ああ、こうしていたか。
std::*mapだかstd::setだか、んなもんだろ。
3228:04/06/13 00:08
enum Type
{
  tccc = 2,
  tbbb = 1,
  taaa = 0,
  tlast = 3
};
>>32
それはそうなんだけどenumなものってOKなのかな
35デフォルトの名無しさん:04/06/13 00:14
>>34
gcc3.3.3で-std=c99 -pedanticをつけてコンパイルしても通ったから大丈夫じゃないかな。
>>35
へへぇ。勉強になった。どもです。
37デフォルトの名無しさん:04/06/13 00:18
const intの場合は案の定だめだ。定数でないと言われる。
>>37
確かにコンパイラのいうとおりだけど、いろいろおもろいですね…。
>>32
そうです、これです!
でも通常のCじゃ無理みたいですね。
gccならオプションの変更でいけるようですが。
VCだとどうすれば使えるようになるんだろう。
>>39
はい、C++スレへGO!
>>39
>でも通常のCじゃ無理みたいですね。
C99は普通のCじゃないのか...
>>41
C99完全準拠の処理系ってある?
見かけない。
44デフォルトの名無しさん:04/06/13 01:16
45デフォルトの名無しさん:04/06/13 01:29
>>11
awkかPerlを使えばできる。
46デフォルトの名無しさん:04/06/13 01:34
>>42
わたしが去年いたプロジェクトでつくったコンパイラーがそうだ。
(本来はC++コンパイラーなのだが、C99もコンパイルできる)
あまり意味のないレスだな。
48デフォルトの名無しさん:04/06/13 01:35
>>46
頂戴
49デフォルトの名無しさん:04/06/13 08:55
プレーン文字列をsha1へ変換するライブラリありませんか?

{sha}xxxxxxxxxxxxxxxx
sha1ってなんだ?
>>50
ハッシュ化アルゴリズム
53デフォルトの名無しさん:04/06/13 16:31
あのGCAの開発者が。
コンパイラー
とかくところが素人くささ満点
55デフォルトの名無しさん:04/06/13 18:45
>>54

プ
56デフォルトの名無しさん:04/06/13 19:08
>>54
意味がわからない。
5754じゃないんだけど:04/06/13 19:58
コンパイ「ラー」って伸ばすのめったに見とないんだけど
どういうところで使われてんの?

なぜかアセンブラーとかアッセンブラーとかはちょくちょく見るけど
コンパイラーとかリンカーってちょっと違和感がある。
5857:04/06/13 20:05
"めったに見とない"ってなんだ orz
2ちゃんでしか見ないって言いたかったのですよ。
>>57
ダイアとダイヤの違い
タイアとタイヤの違い
ファイアとファイヤーの違い
ファイアとファイアーの違い
ファイヤとファイヤーの違い
(ry
60(^-^):04/06/13 20:25
新スレおめでとうございます。
こちらでも、お世話になります。
compiler がコンパイラになろうがコンパイラーになろうが、
同じものを指しているとわかる限りその程度の揺らぎは許容範囲だと思うが。

正確さにこだわるなら原語(ここでは compiler)以外使わない方がいい。
62デフォルトの名無しさん:04/06/13 21:05
>>61
国内での邦訳にもちゃんと規格があるはずだが・・・
コンピレル
>>59 >>61-62
図形の場合は「ダイア」グラム、
宝石の場合は「ダイヤ」モンド、
と国語審議会による標準が決められていたように思われ。

他の長音、促音なども同様に。
>>64
JISか何かで付けないことにしようと決まってるんだっけ?
確か日本語的には付けないといけませんよだった気がするな。
JIS的にはインターネットじゃなくてインタネットなんだっけ?
68デフォルトの名無しさん:04/06/13 21:46
コンソル(実話)
スパユザ(ネタ)
6957:04/06/13 21:50
>>66
なるほど。
要するに 気にすんな ってことか。
全て実話

(プログラムを指して)プラム
(*.basを称して)ベース
レジ
アッセ
ファルス
ワーニング
71デフォルトの名無しさん:04/06/13 22:26
レジはごく当たり前のように使うぞ。
コアしか口にしてねぇ(ノд`)
ワーニングって何かダメなの?
スターワーズ
確かに発音はc:で、日本語で言えば"をー"に近いけど…
でも、辞書とかでカタカナではワーニングで載ってるし。
warn と warp と warm って母音の発音同じなんだね。
ヽ(`Д´)ノ ウワァァァン
78デフォルトの名無しさん:04/06/14 00:10
そもそもこんな細かいことにあーだこーだ言う
風潮がおかしいと思う。これは主張したいところのもの
だねえ。
漏れの周りのプロは、仮名表記するときはほとんどワーニング。
ウォーニングとか書くと厨房臭い。

したがって、当然2chの公式表記はウォーニング。
ォワーニングが一番近いな。
ふと気付いて車の取扱書を見たら、「ウォーニングランプ」と書いてあった。
82デフォルトの名無しさん:04/06/14 00:21
ウォーズマンはカコイイけど
ワーズマンカコワルイ。
83デフォルトの名無しさん:04/06/14 00:26
警告と言っておけ。
(`・ω・´)ウォォォォォォ・・・
ウォー仁具なんて俺のATOKでは変換できません
    /\___/ヽ   ヽ
   /    ::::::::::::::::\ つ
  . |  ,,-‐‐   ‐‐-、 .:::| わ
  |  、_(o)_,:  _(o)_, :::|ぁぁ
.   |    ::<      .::|あぁ
   \  /( [三] )ヽ ::/ああ
   /`ー‐--‐‐―´\ぁあ

にんぐ
C スレっぽくなくなってきた
88デフォルトの名無しさん:04/06/14 01:18
> 漏れの周りのプロは、仮名表記するときはほとんどワーニング。

ださ... > 自称ぷろ
89デフォルトの名無しさん:04/06/14 01:30
会社のイギリス人には、ワーニングで通じます。
ウォーニングって言ったらほわ?って聞き返されました。
90デフォルトの名無しさん:04/06/14 01:39
そりゃおまえの発音が悪いからだろ。
前者のほうは日本語だとおもわれてるにちがいない。
ローマ字読みでいいんだよ。
発音がおかしいって言われたらブリティッシュだからって言えよ。
92デフォルトの名無しさん:04/06/14 01:48
mainはマインだな
countはこうんと
whileとdoとreturnはどうする?
93デフォルトの名無しさん:04/06/14 02:00
「わーにんぐ」と言っても良い。日本では通じる。
でも、カタカナで「ワーニング」とは書かないで。
「デズニーランド」と言ってもいいから、書くときには「ディズニーランド」と書いて。
94デフォルトの名無しさん:04/06/14 02:03
>>92
うひれ どー れとぅるん
95デフォルトの名無しさん:04/06/14 02:03
> 「わーにんぐ」と言っても良い。日本では通じる

ということにしたい!

そうしないと私の立場がない!
96デフォルトの名無しさん:04/06/14 02:05
> 「わーにんぐ」と言っても良い。日本では通じる。
> でも、カタカナで「ワーニング」とは書かないで。

書くときさえちゃんと書けば、言うときは「Star Warz」も「Warming Up」も
「ワー」でいいよね? ;-)
>>96
「わー」だけじゃなく、その前後もちゃんとした発音なら許す。
98デフォルトの名無しさん:04/06/14 02:14
96 名前:あぼ〜ん [あぼ〜ん] :あぼ〜ん
あぼ〜ん
下記のソースを$gcc -pg でコンパイルしても
gmon.outが作成されません。なぜでしょうか。

#include <stdio.h>
int main(void)
{
int i;
for (i = 0; i < 2; i++) {
printf("%d\n", i);
}
return 0;
}
100デフォルトの名無しさん:04/06/14 02:20
雑談スレですかここは
雑談しながら質問者が来るのを待つスレです。
ローマ字読みでいいんだよ。
発音がおかしいって言われたらスパニッシュだからって言えよ。
10461:04/06/14 05:44
>>62
他の原語圏で生まれたものを邦訳した時点で発音や表記に揺らぎが生じるのはしかたない。
・それ(発音や表記の揺らぎ)によって他の意味と取り違える可能性が低い場合は許容したら?
・それ(発音や表記の揺らぎ)が嫌なら原語を使えば?
という「個人的な主張」なんだけど。

規格に対して何の疑問も持たず、
それ(規格)を鵜呑みにすることに慣れている人には理解しにくいかも知れない。
確か GPL は原文のみが有効で訳では厳密には駄目らしいね
ォワーニング
イイ!
ヲーニン[グ]
これで決定
108デフォルトの名無しさん:04/06/14 08:34
>>99
実行しないとね。

>>104
単に規格を知らなくて誤魔化してるだけにしか見えんな。
わざわざ言わなくてもいいのに。

>>105
駄目らしいって…w
109デフォルトの名無しさん:04/06/14 08:43
> 「わー」だけじゃなく、その前後もちゃんとした発音なら許す。

すたーわーず、わーみんぐあっぷ
110デフォルトの名無しさん:04/06/14 08:44
> それ(発音や表記の揺らぎ)によって他の意味と取り違える可能性が低い場合は

ワーディングとまぎわらしい
二重配列へのポインタを関数の引数にするにはどうしたら良いのでしょうか?

void f(int *a[2][3]);
void main(){
 int a[2][3] = ...;

  f(&a);
}
ではエラーになります。
112デフォルトの名無しさん:04/06/14 09:53
void f(int *a[2][]);

変わったことしようとしてるな。
113デフォルトの名無しさん:04/06/14 10:50
例えば,

void function(void){
int a = 0;
printf( "%d\n", a );
}

とするよね.
このとき,函数 function が呼ばれるたびに,
a のために sizeof(a) byte がメモリに確保されるけど,
この a のためのメモリ領域は函数 function が
終わると開放されるんだっけか?

くやしかったら教えろこのやろ!
別に悔しくはないが、開放ではなく解放される。
115デフォルトの名無しさん:04/06/14 11:21
>>113
そうなんだが、お前の思ってるイメージとは多分、違う。
アセンブラに落として読んでみな。
116デフォルトの名無しさん:04/06/14 11:22
函数って書きたいだけちゃうんかと。
117デフォルトの名無しさん:04/06/14 11:32
>>113
レジスタ渡しならメモリが確保されることは無い。
スタック渡しなら、スタックポインタが上下するだけで、
一般的にメモリの確保は行われない。
その他の場合は知らん。
118117:04/06/14 11:40
なんか勘違いして書き込んでしまったな。
まぁ、回答としてはおおむね合ってるからいいか。
なんですぐにスターウォーズなんだろう?
なんで誰もワープ航法には触れないのだろう?
ワープはもう日本語だから。
飯野ケジン
122(^-^):04/06/14 16:54
>>93
そういうのっておもしろいですね (^-^)
キヤノンって書いてキャノンって読むみたいなの < 違うかも
スパゲッティ? スパゲティ? オレスパゲティ
アフロヘヤー
>>123
スパ(σ・∀・)σゲッツ!!
キヤノンなどは、昔、社名などに「ゃゅょ」等を付けられなかったからという理由なので、全く違う。
テレビでキヤノン社員が見た目の関係とか言ってたような・・・
128127:04/06/14 18:02
あった

http://web.canon.jp/about/mark/
キヤノンの「ヤ」の字は、何故大きいのでしょうか?

「ヤ」の字が大きく表記された「キヤノン」が生まれたのは、1947年に、社名を「精機光学工業株式会社」から
「キヤノンカメラ株式会社」と変更したときでした。当時の登記簿や株主総会後に発表される営業報告書、
朝日新聞に掲載した広告など、すべて「ヤ」が大きくなっています。
では、なぜ「キャノン」ではなく「キヤノン」にしたかというと、全体の見た目の文字のバランスを考え、
きれいに見えるようにしたからなのです。
「キャノン」では、「ャ」の上に空白が出来てしまい、穴が空いたように感じてしまうので、それを避けたのです。
130(^-^):04/06/14 18:40
>>126
>>127>>128
本当に物知りさん(^-^)
131デフォルトの名無しさん:04/06/14 19:21
ひでーな、このスレ
>>117に突っ込めねえアフォばっかりかよ
>>131
煽ってないで、突っ込みたいなら、おまえが突っ込めよ。
何、遠慮してるんだよ。
おまえ、いつも自分が言われてるから、誰でもいいから他人にアフォって言ってみたかっただけなんだろ?
>>131
この板で釣りがしたいんならもっと高度なネタを持ってきなさい。
134131:04/06/14 20:22
(・∀・)ニヤニヤ
ニヤニヤするなら金をくれ!!
恐喝かよ…('A`)つI
I ('A`)マンドクセ
ぬ・る・ぽ♥
139131:04/06/15 02:23
もっとよこせ
                _∧_∧_∧_∧_∧_∧_∧_∧_
     デケデケ      |                         |
        ドコドコ   < ぬるぽぬるぽぬるぽぬるぽぬ!!! >
   ☆      ドムドム |_  _  _ _ _ _ _ _ _ _|
        ☆   ダダダダ! ∨  ∨ ∨ ∨ ∨ ∨ ∨ ∨ ∨
  ドシャーン!  ヽ         オラオラッ!!    ♪
         =≡= ∧_∧     ☆
      ♪   / 〃(・∀・ #)    / シャンシャン
    ♪   〆  ┌\と\と.ヾ∈≡∋ゞ
         ||  γ ⌒ヽヽコ ノ  ||
         || ΣΣ  .|:::|∪〓  ||   ♪
        ./|\人 _.ノノ _||_. /|\
            ガッガッガッ
         ドチドチ!
―――――――――――――‐┬┘               =≡=
                        |             __  〆
       ____.____    |             ───  \
     |        | ∧_∧ |   | デケドコうっせーよ  ヌルポ!   \._ =二 ∧_∧
     |        |. ( ・∀・)|   |                 _   |ヽ  \ (・∀・# )/
     |        |⌒     て)  人        _  ―――‐ γ ⌒ヽヽ  ⊂   つ  ∈≡∋
     |        |(  ___三ワ <  >  ―――   ―― ―二   |   |:::| 三ノ ノ ノ  ≡ //
     |        | )  )  |   ∨        ̄ ̄ ̄ ―――‐   人 _ノノ (_ノ、_ノ  _//
        ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄    |   
                        |
―――――――――――――‐┬〆
                        |  \
       ____.____    |   \_      ―――    うっせーの外に出すんじゃねーよゴルァ!!
     |        |      |    |     |ヽ   ―――   ―                  ⊂(´Д`#)
     |        |   ∧_∧     γ ⌒ヽヽ  ――――― ―  ̄ ̄__       人  (⌒)⊂/
     |        | ⊂(・∀・ ;) ̄つ  |   |:::|      ―――――   ――――― <  >彡  ,,ノ
     |        |     ⊂ノ__つ人 _ノノ ∈≡∋   ―――――  ――    . ∨
     |        |      |    |          // ――  ――
        ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄    |   .    _// ―
                        |        /'|
Cスレは低脳が多いな
低脳が記憶できる限界の言語だからか・・・
すみません。質問させて下さい。本に書かれていた演習問題の意味が分かりません(解答なし)。

問題、x[2][3]とy[3][2]の積を求めるプログラムを書け

これって総当りで全ての積を求めろって事なんでしょうか?
それと解を代入しておく変数はどういう形式にすればよいのでしょう?
a[2][3] or  a[3][2]???

書いている事がちょっと分かりづらいかもしれませんが、アドバイスいただけたら嬉しいです。

本 定本明解C言語 入門編
145デフォルトの名無しさん:04/06/15 06:03
>>144
行列か?
>>144
想像するに行列の積ではないかと思うんだが・・
問題文はホントにそれだけか?前に解説とかあるんちゃうか?

ググったら、こんなん出た。
http://www.bohyoh.com/Books/ReikaiA01/index.html
147145:04/06/15 06:06
なわけないか。
xとyの配列がどこかで定義されていないの?
されていれば単にx[2][3]とy[3][2]をかければいいんだけど。
148144:04/06/15 06:57
レスどうもです。
すみませんm(__)m問題文説明不足でした。

恥ずかしいけど行列の積です。
x={1,2,3,4,5,6} y={1,5,5,3,8,1}

単にかけるってのはどういうことなんでしょう?
xのどことyのどこを掛けるのかが分からないんです。
馬鹿みたいな質問と思われるかもしれませんが・・・・。

>>146
解答が本当の意味で別冊って(T_T)
買うべきなんだろうか…。
149デフォルトの名無しさん:04/06/15 07:04
っていうか「行列の積」ぐらい中学生で習うだろうが。
ぶるじょあな中学生ですね
151デフォルトの名無しさん:04/06/15 07:41
>>149を晒しage
>>148
プログラムが判らないのではなく、行列の積が判らないのなら板違い。

もしリアル中学生なら少し難しいかも知れんが、
ttp://homepage3.nifty.com/law_of_causality/math/mx13.htm
ttp://www007.upp.so-net.ne.jp/masema/matrix.html
このあたり。読んで判らなければ数学板へ逝け

/* おまけ */
 int i,j,k;
 int x[2][3]={1,2,3,4,5,6}, y[3][2]={1,5,5,3,8,1}, ans[2][2];

 for (i=0; i<2; i++)
  for (j=0; j<2; j++) {
   ans[i][j]=0;
   for (k=0; k<3; k++)
    ans[i][j] += x[i][k] * y[k][j];
  }
153144:04/06/15 08:26
>>152
丁寧な解説まで入れて下さりありがとうございます♪
忘れていた記憶もよみがえり、しっかり理解出来ました!!本当に感謝。
また、スレ違いとも考えず失礼しました。

こんなことならもっと数学勉強しとけば良かったです。学生の頃は数学の使い道
なんて思い当たらなかったのに・・・・(パソコンもあんま普及してなかった)。
ちなみに中学生じゃありません。26、一応社会人(今日は代休)。
プログラミングの勉強を始めてまだ1週間・・・早くも挫折するとこだった。

ってかこの歳になって始めるのはやっぱ無謀なんでしょうかね?
書いてある事を理解するのもだんだんと遅くなってきてる・・・。
書いてあることが理解できないのは君のやる気がねーだけだろw
自分で挫折しそう、なんていってる時点でもうだめ。辞めなさい、会社もw
歳など関係ない。
お前が無能なだけ。
>>153
早く結婚して子供作れ
少子化を防ぐことがお前にできる唯一の貢献
バカな親のもとに生まれる子供は不幸だぞ。
>>157
いや、むしろ親がそこそこエリートだったり、商売で成功しているほうが、子供に悲劇が待っている。
親は馬鹿でも貧乏でも、子供は清く育つもんだ。
おまえも、はやく結婚して子供作れ。
そして我に年金を!
160デフォルトの名無しさん:04/06/15 14:45
Cというか、数学的問題だと思うのですが・・・

上限値 U 、下限値 L 、サンプリング N からなる sin波 の値を求めたいのですが、
うまくできません。

short i;
float radius = 0.0
for( i=0; i<100; i++ ){
radius += 0.1;
sin_value = sin( radius );
printf( "%f\n", sin_value );
}
上記だと -1〜1の範囲になってしまいます。解決方法を教えてください。
>上限値 U 、下限値 L 、サンプリング N

>-1〜1の範囲

もまえのプルグルム
のそれぞれ何に対応してるのか知らしめろ
どうみてもUとLが考慮されてないからそれでいいんじゃね?
>>162
すみません、、そのUとLの考慮の仕方を教えて頂けますか?
164デフォルトの名無しさん:04/06/15 15:05
>>160
radius += 0.1;
sin_value = sin( radius );

これは

sin_value=sin(0.1*i);

にした方がよい。
>>163
それって、sin波との関係もくそもないだろ?
5から100 までの乱数を得たいという場合を
考えれば、自ずとわかるんじゃね?
>>163
sin() の結果が -1〜+1 で、それを振幅 (U-L) にするんだから
  sin_value = (sin(i*0.1) + 1) / 2 * (U - L) + L;
でいいんじゃね?
i*0.1に N が考慮されてないのは良いのか?って問題は残るが。

で、サンプリングて何さ?一周期をN分割しろって話?
あーあ、書いちゃったよ。
168デフォルトの名無しさん:04/06/15 19:35
platformはVisualC++です
構造体をコピーする関数はありますか?
Linuxでは bcopy(servhost->h_addr, (char *)&server.sin_addr, servhost->h_length);
上記で問題ないですが win なので bcopy に変わる関数が欲しいです
169131:04/06/15 19:42
>>168
代入できるよ?
170デフォルトの名無しさん:04/06/15 19:43
くっそー
またコテっちまった
俺ヴァカ
171デフォルトの名無しさん:04/06/15 19:57
すいません、VBからCに入ってまだ1ヶ月の初心者です。。
VBではオーバーフローするとエラーが出ていたんですが、
うちのCではエラーが出ません。。
Cでは一般的にオーバーフローでエラーは出ないものなのでしょうか・・・
友達に課題(?)を出されて頑張っているのですが、
もしも自分の持っているコンパイラだけ特殊だったら・・と冷や冷やしています。
初歩的な質問で申し訳ありませんが、どうかお願いしますm(_ _)m
>>171
標準では出ないよ。
オーバーフローしてバッファが壊れたかどうかを検出したりするツールもあるにはある。
フリーで低機能なものと商用でバカ高いものが。
Cではオーバーフローエラーはでないのが普通。

unsined char x; x = 255; x+=1;

174デフォルトの名無しさん:04/06/15 20:17
>>171

>標準では出ないよ。
>でないのが普通。

どちらも間違い。
標準ではundefined behavior(未定義の動作)であり、
エラーが出る保証どころか地球が爆発しない保証すらないのが「仕様です」。

ちなみに、符号付整数はオーバーフローしたら未定義の動作、
符号なし整数にはオーバーフローの概念自体が存在しない。
>>174
で、「標準では(エラーは)出ないのが普通」のどこが間違ってるの?
>エラーが出る保証どころか地球が爆発しない保証すらない
>176 は >175 宛だ
178デフォルトの名無しさん:04/06/15 20:28
>>175
ニホンゴワカリマスカ?

エラーが出る保証も出ない保証もないのが「標準」。
「未定義」については、それがどういう意味かをきちんと理解することが肝心。
要するにエラーは出ないんでしょ?
>>179
ニホンゴワカリマスカ?
いるんだよな、174みたいなキチガイ。
182デフォルトの名無しさん:04/06/15 21:20
>>181
キチガイはお前と規格に書いてある
CとC++とVCの違いを簡単に教えて下さい
も〜っとC
C#
定義なんかとりあえず横に置いといていーんだよ。
>>171が釣りでなく本当の初心者なら、
Cは実行効率を求めているのでそういう実装に
なってないってだけ答えとけばいい。
187デフォルトの名無しさん:04/06/15 22:05
>>186
必死だなw
7分か
189デフォルトの名無しさん:04/06/15 22:11
警告が出ることはあっても、エラーにはならないな。
190171です:04/06/15 22:41
すいません、本当に初心者でした・・・。。
ちょっとややこしいことになってしまいましてm(_ _)m
どうもご回答有難うございました
191デフォルトの名無しさん:04/06/15 22:45
>>190
初心者が「ベテラン」に気を使うハメに・・・
逆だよな、逆w
C言語でサウンドカードのマスターボリュームを設定するとしたら
どの辺をつかったらいいですか?関数とか。
int set_master_volume(int v);
194デフォルトの名無しさん:04/06/16 00:07
C言語で、CSVのテキストファイルを読んで集計する、awkみたいなツールを作ろうとしてるんですけど、
ファイルの読み書きのサンプルはありますが、CSVをフィールドに分けるようなサンプルが全く見あたら
ないのは気のせいですか?
>>193
どうもありがとうございます。
あとネット探したらサンプル+解説を見つけました。
MixerOpen()関数とかを使うみたいです。ありがとうございました。。
>>194perlとか使った方が楽だし
>>194
悪名高いstrtokでいいじゃん
>>174
おい、これ忘れてるぞ
         ↓
                 ┌─┐
                 |も.|
                 |う |
                 │来│
                 │ね│
                 │え .|
                 │よ .|
      バカ    ゴルァ  │ !!.│
                 └─┤    プンプン
    ヽ(`Д´)ノ ヽ(`Д´)ノ  (`Д´)ノ    ( `Д)
    | ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U
〜 〜  ̄◎ ̄  . ̄◎ ̄   ̄◎ ̄   ◎−>┘◎


199デフォルトの名無しさん:04/06/16 03:01
あるプログラムで**ptrていうのは見かけましたが、*二つってどういう意味ですか?
200デフォルトの名無しさん:04/06/16 03:02
>>199
ポインタのポインタ。
>>199
ポインタのポインタ。
それで分からなかったら、これ嫁。
http://pc5.2ch.net/test/read.cgi/tech/1084956293/
>>172 の「標準」は「一般的には / 普通は」と言う意味で、
>>174 の「標準」は「C言語の規格で定めた」と言う意味、
だと思った。
203デフォルトの名無しさん:04/06/16 07:01
よっぽど悔しかったんだなw
204デフォルトの名無しさん:04/06/16 08:31
int rx=5;
と定義して「&rx」と書くとrxが存在するメモリ上のアドレスを示すんですよね?
これをアドレスの直接指定って言うんですよね?

int *prx=5;
と定義して「prx」 と書くとprxが存在するメモリ上のアドレスではなく、prxが指しているアドレス(5が存在するアドレス)を
示すんですよね?
「**prx」と書くとprxが存在するメモリ上のアドレスを示す(ポインタのアドレス)んですよね?

間違っていたらご指摘ヨロ
205204:04/06/16 08:34
ごめんなさい。一行抜けてました。正しくは以下です。

int *prx=5;
と定義して「prx」 と書くとprxが存在するメモリ上のアドレスではなく、prxが指しているアドレス(5が存在するアドレス)を
示すんですよね?
この変数のことをアドレスの間接指定、つまりポインタと言うのですよね?
「**prx」と書くとprxが存在するメモリ上のアドレスを示す(ポインタのアドレス)んですよね?
206デフォルトの名無しさん:04/06/16 08:44
>>205
宣言の時の*と、間接演算子の*は微妙に違う。
宣言時の*は、その変数がポインタである事を表し、
間接演算子*はそのポインタの先にあるものを表す。

rxのくだりは合ってと思うよ。
**prxはちょっと違うな。
普段はポインタのポインタなんて、可変長の多次元配列使うときしかやらないけど、
それなら他のデータ構造の方が効率がいいと思うし。
207デフォルトの名無しさん:04/06/16 08:45
>>204
> これをアドレスの直接指定って言うんですよね?

言わない。

> 5が存在するアドレス

違う。いわばそれこそがアドレスの直接指定(5はint *にキャストすべき)。

> 「**prx」と書くとprxが存在するメモリ上のアドレスを示す(ポインタのアドレス)んですよね?

全然違う。
208204:04/06/16 08:57
すみませんでした勉強しなおしてきますorz
>>204
アセンブラのimmediate addressやindirect addressと
ごっちゃになってるみたいだな。
210デフォルトの名無しさん:04/06/16 08:59
>>208
スレ違いになるかもだが、C言語ポインタ完全制覇って本読んでみることをお勧めする。
オレはその本読んで分かった。
211デフォルトの名無しさん:04/06/16 09:14
例えば,ファイル名 hoge.bin の
ファイルサイズのみが欲しい場合,
以下のような方法より速い,もしくは簡単な方法ってある?

char c;
unsigned long i, filesize;
FILE* pfile;
pfile = fopen( "hoge.bin", "r" );
for( i = 0 ; c = fgetc(pfile) != -1; i++);
fclose(pfile);
filesize = i;
212デフォルトの名無しさん:04/06/16 09:38
>>211
pfile = fopen( "hoge.bin", "rb" );
fseek(pfile,0,SEEK_END);
filesize=ftell(pfile);
213デフォルトの名無しさん:04/06/16 10:12
仮引数における配列の宣言について

void func(int a[])

仮引数の宣言では、配列の要素数は書いても、書かなくてもいいんですよね。ではどうして
多次元配列では以下のように最外周でない配列には要素数を書かなければならないんですか?

void func(int a[][100])

214デフォルトの名無しさん:04/06/16 10:18
> ではどうして
が意味不明。

> void func(int a[])

これだって「省けるのは最外周」だけだろ?
215デフォルトの名無しさん:04/06/16 10:19
unisgned int同士の減算って、intに格上げされますか?
unsigned int a, b;で、たとえばそれが16bitだったとき、
bが40000で、aが1だったら、
a - b はいくつになるでしょう?
たとえば long int c; でそれが32bitだったら、
c = a - b;でcには何がはいるのが正しいですか?
216デフォルトの名無しさん:04/06/16 10:24
>>213
要素ひとつ分の大きさが分からないと駄目だから。

>>215
unsigned intからintに格上げ!?
>>213
コンパイラの気持ちになって考えてみよう
218デフォルトの名無しさん:04/06/16 10:55
> unsigned intからintに格上げ!?

どっちが格上ですか?
219デフォルトの名無しさん:04/06/16 11:50
>>213
ttp://www.kouno.jp/home/c_faq/c6.html#0
ここを死ぬほど嫁。
220202:04/06/16 11:56
>>203
俺は174じゃないよ。
そう解釈すればどっちも意味は通るなと思っただけ。

一語一義にこだわる理由がわからない。
一語一義なら考えなくても(知識だけで)いいから。
自分の辞書に載ってない意味は間違いということにしてしまった方が楽だから。
>>211
sys/stat.h が使えるならstat使ったほうがいいんじゃないの?
>>220
174==203 だから、相手にしないほうがイイYo
>>206
>宣言時の*は、その変数がポインタであることを表し

漏れとは捉え方が違うな。
漏れは「int *p;」なら、
'p'がポインタ、という解釈ではなく、
'*p'がint型、という読み方をするよ。
藻前さんは「int* p;」って書く派なのかな?

#だから漏れはfunctionポインタがキモくて仕方ない。
けど、初心者にとっては>>206の説明のほうがわかりやすいと思う。
「int型の *p」 というのと、「int型ポインターの p」というのでは後者
のほうが理解しやすいんじゃないかい?
構造体のポインタのポインタがワカラナイ・・・
struct hoge **data
構造体へのポインタへのポインタ
>>226
自分でちゃんと書いておきながらなにがわからないん?
それを晒さないと、>>227 のような回答しかないぞ。
ポインタ周りわかんなかったらメモリダンプで参照デリってけば楽勝
>>229
やり方キボンヌ
(*(data++))->構造体のメンバ;
もっとレベルの低い質問受けてくれるスレありませんかね
スレ違いでなければこのスレでどーぞ。
234232:04/06/16 19:46
returnしたい値が2つ以上ある場合どういう手順を踏めばいいでしょうか?
235デフォルトの名無しさん:04/06/16 19:47
>>220
弁解は逆効果・・・
おまえ面白いなw
236デフォルトの名無しさん:04/06/16 19:49
>>234
ポインタ引数とか構造体で返すとかグローバル変数とか
推奨する/しないは別として
>>234
構造体で返す。
ポインターを渡して、その中に返す。
お好きな方をどうぞ。
ポインタのポインタの使い方といえば、ポインタ自体の値を関数で書き換えたいときか、
2次元配列もどきを作るとか構造体のポインタを配列にしたとき位だな。
C言語で可変長の文字列配列を使う方法を教えて下さい。
240232:04/06/16 21:04
>>236-237
ポインタ引数で返すのは
hoge(&i,&j);
みたいな感じでアドレスを渡せばいいんだと思うのですが
構造体の場合は構造体へのポインタを渡すということでしょうか?
>>240
いや、構造体をそのまま返す。
>>239
char *p = (char*)malloc(7743);
サイズ変えたい場合はrealloc。
これ以上のサポートは期待するな。
243デフォルトの名無しさん:04/06/16 21:19
>>240
・ポインタ渡し
・配列渡し(前項に含まれる)
・値返し
・外部変数

やりようはいろいろ
繰り返すが推奨する/しない以前の問題な
複数のフラグをまとめる場合、みなさんはどういう方法をとりますか?

enum{ a = 1;
b = 2;
c = 4;
};

int flags;
flags |= a;

とかやりますか?それともビットフィールドを使いますか?
好みの問題ですかね。
245デフォルトの名無しさん:04/06/16 21:22
>>244
ビット単位の演算
「複数のフラグ」が16個とか32個とかに限定されるのがイヤだけどね

フラグで条件分岐しようかって場面でもうちっとよく考える
246244:04/06/16 21:38
そうれすか。
移植性とか考えた場合はビットフィールドなんですかね。
まぁいまどきint型ならだいたい4バイトなんでしょうけど。
あと、複数のフラグの中に、状態が4パターン必要で2ビットを
使うものがまざってたりすると・・・この4パターンのどのパターン
が立っているかを判別する場合、ビット単位演算だと右シフトして
マスクしてっていう必要がでてくるのかな?
247デフォルトの名無しさん:04/06/16 21:50
>>246
switch((flags & 6) >> 1) { case 0: case 1: case 2: case 3: ; } ってか?
switch(flags & 6) { case 0: case 2: case 4: case 6: ; } と一緒だろうがよw
ビットフィールドの格納順序って処理系依存じゃなかったっけ?
249244:04/06/16 21:57
ですよね(w。
250244:04/06/16 21:59
>>248
そうなんすか・・・。でも名前つけるし、普通に使う分には
意識する必要ってあるんですかね。
251デフォルトの名無しさん:04/06/16 22:02
>>250
あんたの方が正しい
処理系依存と処理系定義を混同すると間違えるんだよ
>>246
途中に複数ビットを扱うパターンがあるならビットフィールドの方が楽だね。
どっちみち、LSBから配置されるかMSBから配置されるか、エンディアンの問題含めて
可搬性は乏しいけど私はビット演算を一々コーディングするよりいいと思う。
内部で完結することが確実な場合にはいいんだけど、
外部とやり取りする可能性がある場合にはenumなり
#defineなりを使ったほうが無難。
254244:04/06/16 22:26
なるほろ。
今やってるのが、膨大な件数のデータがあって、それをファイルに
書き出したりするんで、とにかくデータサイズを縮小したいがために
ON・OFFフラグや4パターンフラグや1〜18の数値をとるものやら
いろんなものをint型などに収めようとしてたもんで、論理演算だと
数値とりだしたりするのに、シフトとかしたりして四苦八苦して
たのですが、素直にビットフィールド使えばいい気がしてきました。

アドバイスどうも!
処理系定義と、処理系依存の違いについてまとまってるページある?
ぐぐってもいまいちヒットしなかったんで。
>>244
まともなコンパイラなら、ビットフィールド使っても自分でビット演算しても
最適化で実質同じコードを吐いてくるしね。
#寧ろマスクミスや符号拡張のミスがない分人間より賢かったりして。
257デフォルトの名無しさん:04/06/17 00:19
>>256による定義の推定
まともでないコンパイラ: 自分のヘボをフォローしてくれない処理系

あっれー? なんでこんなにデカいんだろー おそいしー バグ再現しないしー
ぽくちんわかんなーい ねーねー外注にしよーよー
258デフォルトの名無しさん:04/06/17 00:22
外注なら日本語おかしくても最適化してくれるんだろw
>>242
ありがとうございました。
やりたいことはできました。
なんだ? ビットフィールドを使いこなせない恨みを撒き散らしているage厨が涌いてるなぁ。
261デフォルトの名無しさん:04/06/17 08:36
> ON・OFFフラグや4パターンフラグや1〜18の数値をとるものやら
> いろんなものをint型などに収めようとしてたもんで、論理演算だと
> 数値とりだしたりするのに、シフトとかしたりして四苦八苦して
> たのですが、素直にビットフィールド使えばいい気がしてきました。

この部分だけ読めばまさにその通りだが、その前の

> 膨大な件数のデータがあって、それをファイルに
> 書き出したりするんで、とにかくデータサイズを縮小したいがために

ここ読んで、「あ、こいつハマるな」という予感が ;)
べつにビットフィールドにかぎらず、構造体をファイルに書いたり読んだりすれば
格納内のメンバーの格納のしかたが処理系依存だいう点でめんどうになる。
もちろん構造体じゃなくても、intをファイルにバイナリーで書いたらそのバイト順から
して処理系依存ではあるが、
ふつうの数値<<構造体<<bitフィールドの順にだんだん「処理系の差ではまる」のに気づく
確率が高い。まあ、逆に言えば差異をつい気にしないで書いちゃったのに早めに気づくので
よいとも言えるが。
262デフォルトの名無しさん:04/06/17 08:38
わたしは、メモリー内だけはふつうにbitフィールドで使いまわし、
ファイルとの読み書きの部分だけ、シフトしたりこねくりまわしてる。
そうすれば、気をつける箇所が読む/書くの2関数だけになるので、かなり楽。
263デフォルトの名無しさん:04/06/17 09:31
例えば,

unsigned char c = 100;
unsigned long i;
i = (unsigned long) c;

としても i の値は 100 にならず,変な値になるよね.
i が 100 になるようにするにはどんなキャストすればいいの?
i は 100になると思うが。。。
265263:04/06/17 09:47
>>264

うんたしかにそうだった.
で,

unsigned char c = 100;
unsigned long* p;
p = (unsigned long*) &c;

このとき,*p が 100 になることを期待したいんだが,
ならない.
なんでか,おしえて
なるわけないだろ。
>>265
キミはこのあたりのスレで滝に打たれてきなさい。

http://pc5.2ch.net/test/read.cgi/tech/1084956293/
268デフォルトの名無しさん:04/06/17 10:37
swap(s)
char **s;
{
printf("\t%s\n",*s);
*s[1] = 'e';
printf("\t%s\n",*s);
}
main()
{
char *s = "tako";
printf("\t%s\n",s);
swap(&s);
printf("\t%s\n",s);

}

参照渡しでswap()内で文字列を書き換える
上記のようなプログラムを組んだのですが
うまく動きません。
どうすればよいですか?
269デフォルトの名無しさん:04/06/17 10:47
>>268
書き換えちゃだめ
(*s)[1] = 'e'
   ・
   ・
char buff[16],*p;
p = strcpy(buff, "tako");
>>265
&cの次のアドレス(&c + 1)に何が入っているのか
そして、ビッグエンディアンなのかリトルエンディアンなのか、
わかったら答えられる。
272271:04/06/17 12:10
ちょっと違った
longなので &c + 1,&c + 2,&c + 3のアドレスの内容
>>268
もうひとつ。
>*s[1] = 'e';
(*s)[1] ではないかと。
274273:04/06/17 12:15
あっ、ガイシュツだー!
逝ってきまーす♪
>>265
unsigned char c;
こうすると c はアドレス &c から sizeof(unsigned char) のオブジェクトを指し、
そのオブジェクトは unsigned char として解釈されるという意味。

unsigned long *p = (unsigned long *)&c;
こうすると *p はアドレス &c から sizeof(unsigned long) のオブジェクトを指し、
そのオブジェクトは unsigned long として解釈されるという意味。

つまりキャストを経たことで解釈対象のオブジェクトの大きさが変化している。
アドレス p + sizeof(unsiged char) からアドレス p + sizeof(unsigned long) の直前までは何が入っているかわからない。

ここで言うオブジェクトはメモリブロックと読み変えてもいい。
276デフォルトの名無しさん:04/06/17 14:39
「質問」
ユーザに文字列の入力を求めます。
その場合、入力される文字列の長さは不定ですよね。
このとき、入力された文字列の長さに合わせて変数を確保することは可能ですか?
277デフォルトの名無しさん:04/06/17 14:41
>>276
mallocである程度大きくとっておいて、入力途中で足りなくなったらreallocで増やす。
278デフォルトの名無しさん:04/06/17 14:47
>>277
早速レスありがとうございます!
いまから試行します。
279デフォルトの名無しさん:04/06/17 18:43
>>254
switch((flags & 6) >> 1) { case 0: case 1: case 2: case 3: ; } ってか?
switch(flags & 6) { case 0: case 2: case 4: case 6: ; } と一緒だろうがよw

ビットフィールドは前者な
アセンブラ読めねえ奴が言う最適化は100%例外なくハッタリ
たまたま当たってもあくまで偶然、そいつに管理能力があるわけじゃない
初歩的ですが、構造体単位のファイルへの読み書きですが、
処理系が一緒なら同じ構成の構造体は、パディングの位置も
一致しているのですよね?あとビットフィールドも。
コンパイル時のフラグによって変わる処理系があったような気もしないではないが、
基本的には一緒。
282デフォルトの名無しさん:04/06/17 19:52
教えてください。。。
socket通信をするプログラムA.exe(データをsocketで受け取り、
処理をして指定のファイルを作る)を作って、これをWINXP上で
「サービスとアプリケーション」に追加させ、PCを起動するたびに
裏で起動させようとしたのですが、なぜか起動しないのです。
A.exeを単体で起動すると動くのですが、サービスとして
起動させると立ち上がらないのです。
(色々調べたのですが、解決法が載ってなくて・・・)

なんか原因がわかる方がいましたら、教えてください。
ちなみにA.exeは、コンソールアプリのC++.NETでOSはXPです。
おたずねします.
---------------------------
int myinit(int N, AI[])
{
int i;
srand(time(NULL));
for (i=0;1<N; i++){
AI[i]=rand() %N;
}
--------------------------
という,AI[i]にN個の値をぶち込むという関数なのですが,
コンパイルすると,最初の行について「)が必要」とコンパイルエラーに
なってしまいます.ちゃんと)入っているし,何度も消して打ち
直したりしたのですが,毎回怒られます.何が問題なんでしょうか.
分かる方おられましたらどうぞよろしく.
myinit(int N, int AI[])
>>281
そうですか、レスどうもです。
286283:04/06/17 20:56
>>284
だめぽですた(;´д`)
int myinit(int N, AI[])

この行以前をよく見てみ。
288283:04/06/17 21:09
>>287
#includeの行しかありませんが…
289デフォルトの名無しさん:04/06/17 21:09
>>286
キミは向いていないから、
もうやめたほうがいいよ。
その方が将来的には幸福だよ。
キミ自身も、周りの人間もね。

閉じてねぇじゃねーかボケなす
291デフォルトの名無しさん:04/06/17 21:13
#define N (
292283:04/06/17 21:17
>>289
宿題なのでやめるわけにもいかず困ってるんです
インデントがないから気持ち悪いよね。
おかげで}がなくても気づきにくくなってる。
>>292
自分で書いたソースとエラーメッセージを全部そのまま
コピペすべし。
295283:04/06/17 21:22
>>293
インデント入ってたはずなんだけど…もう一回書いてみます.
最後の}は単にコピペのし損ないです.失礼しました
-----------------------
int myinit(int N,int AI[])
{
int i;
srand(time(NULL));
for (i=0;1<N; i++){
AI[i]=rand() %N;
}
}
---------------------
#undef AI
>>295
  連続した半角スペースは削除されるので、
  全角スペースにちかんしないといけない。
298デフォルトの名無しさん:04/06/17 21:37
>>297
元気か山本君
299デフォルトの名無しさん:04/06/17 21:51
値返せよ
>>297
    &nbsp;の文字参照を使う方法もある
>for (i=0;1<N; i++){
"1<N"ってお前……
つーか283は
ぼるじょあがC/C++の宿題を片づけますYO! 24代目
ttp://pc5.2ch.net/test/read.cgi/tech/1086612317/
に行った方が良くないか?
>>292
学校をやめればいいじゃないか。
例えば文字配列char buf[256]; を用意します。
標準入力から入力したファイル名を入力してその名前をbufに格納したいです。
(その後に出てくる関数に、引数としてファイル名を渡したいので)

fgets(buf, sizeof(buf), stdin);
だと上手くいかないのですが
scanf("%s", &buf);
だと上手くいきます。

fgetsではうまくいかない理由と、scanfを使わずに上の動作を行いたいときはどうすれば良いか
教えて下さい。
fgets():最後の改行ごとバッファに入ってしまうため、ぢゃないかな?
まずはどのようにうまくいかないのか

ここからだ
そりゃあまぁ、>>305の通りになって、ファイルが見つからないだろうさ。
char buf[256], *p;
if(NULL != (p = strchr(fgets(buf, sizeof(buf), stdin), '\n'))) *p = '\0';
309デフォルトの名無しさん:04/06/18 04:35
>>308
きもい
310デフォルトの名無しさん:04/06/18 04:35
c初心者です。質問します。


/* 二つのポインタを交換 */
#include <stdio.h>

main(){
int a=1,b=2,*s1,*s2,**x=&s1,**y=&s2,*tmp;
s1=&a;
s2=&b;


printf("*s1=%d\n",*s1);
printf("*s2=%d\n",*s2);

tmp=*x;
*x=*y;
*y=tmp;

puts("ポインタs1とs2を交換しました。");

printf("*s1=%d\n",*s1);
printf("*s2=%d\n",*s2);

}

**x=&s1がいまひとつわかりません。
どなたか、絵で説明してくれませんか。
311デフォルトの名無しさん:04/06/18 04:38
>>310
絵で説明してほしかったらこっちにゆけ
http://pc5.2ch.net/test/read.cgi/tech/1083765346/
312デフォルトの名無しさん:04/06/18 05:23
>>311
絵書けないから考え方のヒント。

int a=1;
int *b=&a;
と書いたら、
*b=&a;
じゃなくて
b=&a;
という解釈になる。

**x=&s1;
なんて代入はやってない
あえて書くなら
int** x;
x=&s1;
313デフォルトの名無しさん:04/06/18 05:41
>>312
> int a=1,b=2,*s1,*s2,  **x=&s1  ,**y=&s2,*tmp;
314!312:04/06/18 05:43
>>313晒しage
int a=1,b=2,*s1,*s2,  **x=&s1  ,**y=&s2,*tmp;
            ~~~     ~~~
316313:04/06/18 06:06
>>312が「なんて代入はやってない」というからやっているところを示しただけだが。
ちなみに代入じゃなくて初期化だが、>>310は代入とは一言も言っていない。
317デフォルトの名無しさん:04/06/18 06:15
もしかして俺、ネタにマジレスしてるのか?

int *x, **y=b, z=3;
と書くのは
int *x;
int **y;
int z;
y=b;
z=3;
と書くのと一緒だ。
何でと言われても困る。偉い人がそうすると決めた。
あと、int* x;と int *x;と int * x;は全部同じ意味。

さっきの例は、遠回しに
int a=1,*s1,**x;
s1=&a;
x=&s1;
と書いてるのと同じ。
>>316
バカ?言っていることが矛盾してますが
319デフォルトの名無しさん:04/06/18 06:21
>>317=>>311か?
そんなレスをする意図がまったくもって不明なんだが。
ついでにいうと、やっているのにやっていないとレスするところも。
>>319=>>312
その程度のことでムキになってると(ry
321319:04/06/18 06:28
>>317=>>311
↑これは間違い。>>319=>>312だ。
322321:04/06/18 06:29
うわ・・・さらに間違えたし。
>>317=>>312だ。
つーかもういいや。
>>312>>310をきちんと読んでいないだけだろう。
324C初心者:04/06/18 07:39
すいません。
putcharって何なんですか?
まだ習ってないんです。
#define putchar(c) putc(c, stdout)


**x=&s1;
なんて代入はやってない
やっていないのあとに「が」を忘れているからおかしい文章になっているのでは・・・
>>328
放置汁
>>310
> **x=&s1がいまひとつわかりません。
ポインタへのポインタ **x がポインタ *s1 のアドレスを参照しているだけでは?
>>330
死んでくれ
332デフォルトの名無しさん:04/06/18 13:59
>>331
なんで?
参照という言葉が気に入らないだけかな。
代入だろ
初期化だ。
また初期化厨か...
** しちゃってるんだから x は主語にならないだろ
何が気に入らないって、
int a=1,b=2,*s1,*s2,**x=&s1,**y=&s2,*tmp;
を1行に書いているところだ。1行にまとめるメリットなんてないし、
みづらいし、初心者が勘違いしやすいし。
もう、アフォか馬鹿かと(ry
>>338
諦めろ。初心者に勘違いするなというには
C の仕様は糞過ぎる。
340デフォルトの名無しさん:04/06/18 15:12
int i,j;くらいは一行にしてほしいが、こういくつも並べられると嫌だな。
あとポインタとそうでないものは別にした方がいいね。
>>338
漏れもそうお思ったな。
なんでもかんでも1行に書くのは悪い癖だ。
いわゆるBasic上がりの厨にしか見えない。

int a=1,b=2;
int *s1,*s2,*tmp;
int **x,**y;

s1 = &a;
s2 = &b;

x = &s1;
y = &s2;

こう書けば素直に理解できないか?
342デフォルトの名無しさん:04/06/18 15:18
>>341
ポインタの初期化はしちゃってもいいと思うけど、型ごとに分けるのは同意。
今更だけど、intとint *、それにint **は違う型なのにごちゃ混ぜにして変数を定義できる仕様は糞だなぁ。
書けるという手段があるのはCの特徴でもあるしなぁ・・・。

っていうか、理解してないからごっちゃに書いてしまう。
理解しようとおもったら、違う物はわけて書いてみるとか
工夫しないと、意味はわからなくても、int int * int ** は
見た目違うんだからさ。
344デフォルトの名無しさん:04/06/18 15:37
1. すべての命令を1 クロックで実行できるマイクロプロセッサがあるとする。クロック
が1 GHz とすれば1 秒間に何命令実行できるか。
2. ふたつの画像をスーパーインポーズ合成するには、(i) 両画像の同じ位置の画素値の
読みだし、(ii) 整数の加算および除算を各1 回、(iii) 計算結果をメモリに格納、の操
作を各画素について行う必要がある。1. と同じマイクロプロセッサで100 万画素の
画像を処理する場合にデータロード-演算-ストアに要する正身の時間を計算で求めな
さい。
これの2に答えてください。
板違いでしょうけどおねがいします。
その上スレ違いだ
アセンブラの方にいけばマシだったのになぁ
ところで>>310はここまでのアフォなやりとりから得るものはあったのか?
>>344
ネタ
スーパーインポーズ合成する命令セットを持っていると仮定していいなら、
1[ms]だね。
344は"パソコン一般"からやってきたマルチ。
ロード、ストアはインデックス値を自動で更新するとみていいんだよな?
あーしかし2画像あるわけだから(ry
char str[] = "ABCDE";

ってのは配列の個数宣言しなくてもできるようですが
適切な配列数を自動的に用意してくれると考えていいんでしょうか?
>>351
考えていいんです。
最後に '\0' が付く (従って str は 6 バイト) 事を忘れなければ。
353デフォルトの名無しさん:04/06/18 20:15
>>351
仮にsizeof str==5だと思っていたとして、キミは何を意図してそれを書いたんだ?

ぼるじょあの宿題スレで意味わからんツッコミをしたやつが
居たから混乱したんだろう。
355デフォルトの名無しさん:04/06/18 21:33
BCCで質問があるんですが

#include <stdio.h>
#include <stdlib.h>

main()
{
printf("Hello\n");
}

こんなソースをコンパイルした場合に、
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
と出ているんですが、何が原因でしょうか。
初めてBCCを使うんで、何とか初期設定が終わって、コンパイルできるか試したんですが…
356デフォルトの名無しさん:04/06/18 21:36
357355:04/06/18 21:41
>>356
スレ違いでしたか。
すみませんでした。あちらで聞きます。
358デフォルトの名無しさん:04/06/18 23:35
struct object {int x;int y;int rad};

int judgeA(object obj1,object obj2){
int res
if((fabs(obj1.x-obj2.x)<obj1.rad+obj2.rad) && (fabs(obj1.y-obj2.y)<obj1.rad+obj2.rad)){
res=TRUE;
} else {
res=FALSE;
}

こんな感じであたり判定を作ろうとしたのですが、
judgeA関数でobjectを使えないとか言うエラーが出てきて上手くいきません。
正しくはどうすればいいのか教えて下さい。
359デフォルトの名無しさん:04/06/18 23:37
>>358
objectなんて型はないから。
objectの前にstructをつけろ。
>>358
typedef struct {int x;int y;int rad} object;
"int rad" ってせみころんいらんのかえ?
"int res" ってせみころんいらんのかえ?
363デフォルトの名無しさん:04/06/18 23:45
>>361
いる。
364デフォルトの名無しさん:04/06/18 23:45
(^_^;;;;;;;;;;;;;;;;;;;
すいません。
教えてください。

関数へのポインタってどういう風に役に立つんでしょうか?
ポインタなんて使わずに直接その関数を呼び出せばいいと思うのですが・・
>>365
Strategy パターンや、Stateパターンが、実装できます。
>>365
qsort()について調べれば分かります。
すみません、
適当な文字列を文字コードにして吐き出したいんです。

変換前:2ch
変換後:080391(適当)
そうですか。がんばってください。
気分によって違う関数を呼びたい時もあるだろ。
>>365
そうだねw
こんなこというとアレだが、どんな本でもいいからCの本読んだら、
関数のポインタが載ってて、そこに使用例書いてあるだろう・・・。
>>368
char c = 'a';
printf("%c, %d\n", c, c);
>>372
そういう基本的な本に書いてある例なら、「直接関数呼び出せばいいんじゃないの?」
としか思えないのです。

私は初心者なのでよく分からないのですが、Strategy パターンや、Stateパターン、
qsort()について調べれば分かるってことですかね。

375デフォルトの名無しさん:04/06/19 00:31
簡単なゲームを作ってるんですが、自作関数をfor文の中に書くか
外に書くかで悩んでます。
自作関数の中にfor文を書くとbreakが使えるのですが、for文の中に自作関数
を書くと自作関数からreturnを得て、その数値をifで判定してbreakってなるんですけど
どっちがいいんでしょうか?
イベントドリブンなプログラミングだと、システムから呼ばれるためのコールバック関数を登録しなきゃならなくなるけどそういう時関数をポインタで登録することが出来る。
まぁ、困らないうちは無理に使わなくて良いんだけどな。
>>373
ありがとうございます。

for (i=0;ch[i] !='\0';i++){
printf("%x",ch[i]);
}

結果:326368616e6e656c

これを変数に渡すにはどうすればいいのでしょうか?
sprintf
>>375
状況による。そのループが何のためのループなのか。
>>376
作っているレベルが低いってこともあるのですが、今まで困ったことはないです。
でも、使わないと出来ないことってあるんですね。
今度調べてみます。
381デフォルトの名無しさん:04/06/19 00:45
>>375
おまえ、今とっても大事な分岐点にいる。
構造化とは何か、いちばん根っこを問われてる。

なぜ、breakが必要になった?
なぜ、途中returnでフラグを返す必要が出た?

自分で考えないと、教条主義じゃ意味ないが
1つだけヒントを言っておく。

その関数、アフォ対応に凝りすぎてないか?
>おまえ、今とっても大事な分岐点にいる。
なんかワロタ。でもある意味同意。
>>377
>>378が言うようにsprintf()を使う。
char buf[128] = "";
for (i = 0; ch[i] != '\0'; i++)
 sprintf(buf + strlen(buf), "%x", ch[i]);
>>383
ありがとーーー!!!!
これで6時間悩んでた_| ̄|○
385デフォルトの名無しさん:04/06/19 01:56
#include<stdio.h>
int main(void)
{
    signed short a=0xFFFF;

    a=a>>1;
      :
      :(省略)
      :

テストプログラムを作っていました。
これをコンパイルすると、

『定数値が切り捨てられました。』
『'const int' から 'short' へ切り詰めます』

と言う二つの警告が出るのです。
オーバーフローが起きてるはずはないと思うんですが。
なぜでしか?
386デフォルトの名無しさん:04/06/19 01:59
>>385
1はint
だからa>>1のaはintに格上げされて計算される。
それをa=のところでshort intの変数に入れようとするから・・・ね?

あと関係ないけど、charでないかぎりsignedはいらない。
387386:04/06/19 02:00
それらしく書いたけど、なんの根拠もなしに書いちゃった。
だから間違っているかも。
388デフォルトの名無しさん:04/06/19 02:07
>>386さん
いや、マジでありがとうございます!
他の掲示板でも聞いて回ってたんですが、なんかやっと納得できる答えに
めぐりあえた感じです。
書き込んでなかったけど、同じ方法intでやったら警告でないんですよ!
ほんとすっきりしました!
どうもです!m(._.)m
>>385
0xffffはsigned shortに収まらないので、そういうメッセージがでたんでしょ。
aに何を入れたかったんだろう?
>>386-388
おいおい・・・
391386:04/06/19 02:09
const
↑そうか。constだから初期化の時点での警告か。

やっぱり見当違いだった(恥
392385:04/06/19 02:14
むむむ・・・
まずconstがなんぞやから勉強してきます。 _| ̄|○
でもまー、>>385の内容ではshortが2バイト以下だともワカランしな。
オーバーフローが起きてるはずはないと思う根拠くらい示してくれないとまともな答えは出んな。
>>391-392
おいおい・・・
395375:04/06/19 02:17
試行錯誤しています。

プログラミングは答えを見つけるのが大切なのではなく、決められた答えに対して
いかに問題を作るかというのが大切なんだと思いました。

動くことが「答え」ならば、どういうアプローチで動かすかが「問題」になります。
答えは一つですが、問題は何十通り何百通りもありその中でベストな問題を
選択することがプログラミングのような気がしてきました。

なんか、悟ったようなこと書いてすんません。
396386:04/06/19 02:20
>>394
ん?今度はおかしなことは言っていないはずだけど?
ここで言っているconst intって0xFFFFの(型の)ことでしょ?
397デフォルトの名無しさん:04/06/19 02:23
Cで作った黒いDOS窓の
プログラムの処理スピードを調べるには
どうしたらいいですかね? やっぱ無いですか?

ifという条件文が入るとどれだけスピードが落ちるのか
とか結構気になります。
398デフォルトの名無しさん:04/06/19 02:24
>>397
clock
>>396
constかどうかは今回の問題点じゃないでしょ。
385の環境がなんだかわからないが、まず間違いなくshortが16ビットなんだと思う。
で、おそらくこの環境でsigned short が扱えるのは-32768から-32767。
に対して0xffffは65535だろ。オーバーフローしてるじゃん。
>>399
ちっ、typoしちまった。
-32768 から 32767 ね。
windowsマシンならこの範囲だろう。
401デフォルトの名無しさん:04/06/19 02:30
>>399さん
前聞いたときもそれと同じ回答が返ってきましたが、
0xffffは-1だと思ってたんですが。
あと、自分の環境ではshortは16ビットだと思います。
402デフォルトの名無しさん:04/06/19 02:31
>>398
clock_t clock( void ); (´▽` )!!
どうもです。
>>397
time
GetTickCount
QueryPerformanceCounter
rdtsc
404386:04/06/19 02:34
>>399
constかどうかが問題とは言っていないよ。
コンパイラはconst intと言っているのだから、問題はa=a>>1のところではなく、signed short a=0xFFFFのところだね。と。
省略しているが、下のコードでは怒られるのか?

#include<stdio.h>
int main(void)
{
    signed short a=0xFFFF;

    a=a>>1;
    return 0;
}
406デフォルトの名無しさん:04/06/19 02:38
>>405
はい、今確認しましたが、上記と同じ警告が出ます。
-1を入れたかったらsigned short a=-1で良いのでは?
>>401
>0xffffは-1だと思ってたんですが。

コンパイラはそうは思ってくれなかったわけだ。
-1を入れたいなら-1と書こう。

>>405
警告が出るかどうかはコンパイラやコンパイルオプション次第でしょ。
409デフォルトの名無しさん:04/06/19 02:41
>>405
それはそうなんですが、「どうしてかな〜」と
とても気になっていたものでして(;´Д‘)
因みにコンパイラはなんですか?
>>395
今更んなこと言わなくても、昔の人の名言が全て。

「プログラム = アルゴリズム + データ構造」
Visual C++ と言えばわかって頂けるでしょうか?
どこをどう調べればいいやら、あんまよくわかりません。 (´・ω・‘)
413デフォルトの名無しさん:04/06/19 02:56
VC++6.0SP5で/W4をつけて>>405をコンパイルしたらこうでた。

a.c(4) : warning C4305: 'initializing' : 'const int ' から 'short ' へ切り詰
めます。
a.c(6) : warning C4244: '=' : 'int ' から 'short ' に変換しました。データが失わ
れているかもしれません。
unsigned short a=0xFFFF;
に変えて怒られなければ、>>399の見解であってるんじゃねーの?
共用体って存在価値あるの?
ある
>>415
低級言語的な使い方では存在価値がある。
418デフォルトの名無しさん:04/06/19 07:49
じゃあ負の数を16進数で書いてみろよ!
>>418
-0x01
>>419
プププ君みたいな低脳こないほうがいいよ
正しくは0x-01だ
>>401
仮に君の環境が16bitだたとするある。
そうだとしても、
符号無し整数を符号付き整数に変換して
なおかつその符号無し整数の値が符号付き整数で表せない範囲
だた場合、結果は処理系定義になるある。
だから、-1 の代わりに 0xFFFF などと書くのは止めれ。

422421:04/06/19 09:00
ちなみに、逆の場合、つまるとろこ、
-1 を 符号無しに変換した場合、
16bit 環境なら、0xffff に成ると期待して良いあるよ。
たとえ君の環境での負数の表現が2の補数で無かったとしてもね。
423デフォルトの名無しさん:04/06/19 09:01
なんかすごくツマラン展開だな
課題:C native で全く新しいデータ構造を5年以内に創造しなさい
さらにつまらん
426デフォルトの名無しさん:04/06/19 09:17
6個の整数を読み込んで、それらの最大値と最小値の差を出力する プログラムを
作成せよ。
入力した整数は int 型配列 nums に代入すること。また最大値と最小値の 差は、int 型
の配列 vc の最初の no 個の要素の最大値と
最小値の差を 返す関数 widtharray(int vc[], int no) を作成して計算せよ。 即ち、
main 関数の中での widtharray の呼び出しは、
widtharray(nums, 6) で行う。
427デフォルトの名無しさん:04/06/19 09:17
>>422
それは変じゃないか?

元の式の値が変換後の型で表現できない場合の結果が未定義なら
(unsigned)-1 はギルティやん
符号なしでフェンスが欲しいときは~0uちゃうのか

それから、この流れでUSHRT_MAXが出てこないのはネタか?
428デフォルトの名無しさん:04/06/19 09:23
>>420
うわぁぁん騙された。
>>427
だうと
~0はビットを反転するから、bit表現がオール1
になる。その数値としての値はモロに負数の表現方法に
依存することになり、処理系依存。
signed -1 => unsigned の変換は modulo 2^(ビット数)
で行われるから、2進数でオール1になる。ビット表現は
その処理系で適切なものが選択されるからそれがオール1になる
保証は全く無い。
431デフォルトの名無しさん:04/06/19 09:53
>>430
~とuの評価順序は?
432デフォルトの名無しさん:04/06/19 09:55
>>430
ビット表現が「その処理系で適切なものが選択される」のに
modulo 2^(ビット数)と決めてかかれるのか?
>>432
規格書にはそう書いてるよ。
434デフォルトの名無しさん:04/06/19 10:08
>>433
よく読めよ、言ってること矛盾してるだろ
435デフォルトの名無しさん:04/06/19 10:13
>>433
おまえさんの言う「ビット表現」とは、符号ビットのことか、それともデータビットのことか
一方は未規定、他方は(ピー)表現と書いてあるが
おまえさんの話はそのへんをはっきり言ってない
436デフォルトの名無しさん:04/06/19 10:31
規格書では、~, >>, << は
物理的なビット表現をいじると明示的に書いている。
一方、整数 (integral type) は物理的なビット表現
(負数の表現方法を含む)については全て処理系依存
だとしている。
ちなみに、さっき「2^bit数」と書いたけど、正確には
「符号無し整数で表される最大の数+1」を
君達が分かりやすいように書き換えたのだがそれが
誤解を与えたことは移管に思う。
437436:04/06/19 10:35
符号無し整数は、規格書では、
数学的に
「符号無し整数で表される最大の数+1」を法とする剰余系
で定義されている。
符号付き整数を符号無し整数に変換するときも
この数学的な意味に沿って変換が行われる、と定義されている。
438デフォルトの名無しさん:04/06/19 10:37
>>436
うだうだ言いだす前に「ビット表現」とは何のことを言っているのか、はっきりさせてからにしろ
「処理系依存」とは処理系定義か未規定か未定義か、いずれにしても「全て」じゃねえぞ
最後の4行は意味不明
439デフォルトの名無しさん:04/06/19 10:40
それから~とuの結合規則について放置したままだよな
符合なしの話に符号付きが出てくること自体おかしいと
まだ気づかないのか?
440初心者Lv0:04/06/19 10:47
プログラム実行すると実行画面みたいのがでてすぐ消えちゃうんですが
どうしたらよいでしょうか?
自分でもいろいろ試してみたいのですが設定とかは変える必要ってあるのですか?
441デフォルトの名無しさん:04/06/19 10:47
>>440
[F5]ではなく[Shift]+[F5]
442デフォルトの名無しさん:04/06/19 10:52
おい436、おぢさんはこれから用事があって出かけにゃならん
慌てなくていいからじっくり考えとけ

夕方くらいには戻る予定だ
ここはネタの燃費がいいインターネットですね
444初心者Lv1:04/06/19 11:31
>>441
できました!ありがとうございます、ちょっと感動^^
自分は[Shift]+[F5] ではなく[Ctrl]+[F5]だったのですがソフトの違いか何かですか?
445デフォルトの名無しさん:04/06/19 13:07
カッコの位置なんだけど、

    while( true ) {

こんな風に1行にまとめる人と、

    while( true )
    {

2行にする人いるだろ?
前者の方がオレは好きなんだけど、try は

    try {

こう書くと変な感じがするから、統一性を持たせたいなら

    try
    {

    while( true )
    {

とすべきだよな。
みんな、どうよゴルァ。
>>445
「変な感じがする」ってのは主観なのでなんとも。
ともあれコーディング規約ネタは専用のスレが二つぐらいあったので
そっちでやって欲しい気が
while
( 1 )
{

}
マジレスするとネスト内は ) { でネスト外は {
それだとネスト外というのは関数だけということに
なってしまうが。。。(name space内だと関数も
ネスト内のような扱いなのか?)
>>449
とりあえずここはCスレなのでnamespaceは無い
だから隔離スレでやれっつうの
452449:04/06/19 13:26
orz
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=117&fi=no

上のプログラムの、以下の部分がよくわかりません。一行ずつ解説して頂けませんか?

if( *word ){ /*コメントを入れてください*/
*last_word++=word;        /*コメントを入れてください*/
for(;*word;++word) *word=tolower(*word); /*コメントを入れてください*/
if( last_word == word_list+sizeof(word_list) ) break; /*コメントを入れてください*/
}
454デフォルトの名無しさん:04/06/19 15:33
> カッコの位置なんだけど、
>     while( true ) {
> こんな風に1行にまとめる人と、
>     while( true )
>     {

それ以前に、
空白あけろ
空白あけるな
空白あけるな

中括弧以前の問題!
455デフォルトの名無しさん:04/06/19 15:37
こんにちは。早速ですが。

Visual BasicのSendKeysみたいな事をLinux+C言語でやりたいんです。

つまり「標準入力(キーボード)で特定のデータを入力した」
ような事を行わせたいのです。

どうしたらいいのか見当がつきません。
ヒントでもいいからお恵み下さい。
456デフォルトの名無しさん:04/06/19 15:41
if (*p != '\0') {
  for (*last++ = p; *p != '\0'; p++)
    *p = tolower(*p);
  if (last == wlist + sizeof(wlist))
    break;
}
457デフォルトの名無しさん:04/06/19 16:41
>>445
べきも糞もねえんだよ
勝手な俺理論でコーディング基準を破るな
キョーレツくだらねえことで無駄な喧嘩を売り歩くな
                     ~~~~~
わかるか? わかんねーから「べき」とか言ってるんだろうな

そんなのは伺いをたてることであって
こっちから押し付けに行くことじゃない
458デフォルトの名無しさん:04/06/19 16:41
なーんてまぬけなことを言ってるやつがいるから
2chなんだろうなあ。
459デフォルトの名無しさん:04/06/19 16:42
16bitで、

2の補数方式で、-1が0xffffだったら、
1の補数方式では、0xffffは-1じゃなくて-0なんじゃないの? -1が0xfffeで
460デフォルトの名無しさん:04/06/19 16:48
i =6;
while
(
 --i
)
{
 putchar("H ELLO"[i]);
};
453のソースは何気に酷い気がするんですけど
俺の頭が悪いんですかね
462デフォルトの名無しさん:04/06/19 16:58
> };

このセミコロンはなんだ!
463デフォルトの名無しさん:04/06/19 17:01
>>459
ありうるね
464デフォルトの名無しさん:04/06/19 17:04
あのー463みたいに「しったかぶり」の返事がほしいんじゃないんですが...

「ありうる」かどうかではなくて、「そういう定義だろ?」っていう意味です。
前後を見てないが

if( *word ){ /*WORDが0でなければ*/
*last_word++=word; /*last_wordが指し示す先にwordを代入したあと、last_wordをインクリメント*/
for(;*word;++word) *word=tolower(*word); /*wordが0になるまで小文字に変換する*/
if( last_word == word_list+sizeof(word_list) ) break; /*last_wordがword_listの終端ならループを抜ける*/
}
466デフォルトの名無しさん:04/06/19 17:06
i = 6
while (--i > 0)
  putchar("H ELLO"[i]);

改良するなら

for (i = 5; i >= 0; i--)
  putchar("H ELLO"[i]);



ちなみに、iが0になったときは実行されないのでは?
467デフォルトの名無しさん:04/06/19 17:11
>>464
具体的な処理系の例を挙げないとSFの域を出てないだろ
>>455
標準入力でいいのなら、パイプ開いてテキスト流しこむ。
GUI(X)でのイベントの送り方は忘れた。
469デフォルトの名無しさん:04/06/19 17:12
>>467
あ、こいつやっぱりわかってないな ;-)

ちゃんと「2の補数形式で」ってかいてあるのに、どうやらそれの意味が理解できないらしい。
やーい
470デフォルトの名無しさん:04/06/19 17:13
>>469
やーい 
     ~~~~~~~~~~~~~
     台詞がないねw

具体例が出ない以上しかたないよな
わーい
472デフォルトの名無しさん:04/06/19 17:15
あほくせ
469まで読んだ。
痛さ度は7:3で469のが痛かった。

470まで読んだ。
痛さ度は8:2で470の方が痛くなった。
1の補数表現は、全てのビットを反転する = 符号を反転する、が定義。
0x0000 = +0 なら 0xffff = -0 で、0x0001 が +1 なら 0xfffe = -1 となる。

そういうシステムが、現在使用されているかどうかは不問。
Cでは、存在するものとして扱わなければならないということだけだ。
475デフォルトの名無しさん:04/06/19 18:03
> そういうシステムが、現在使用されているかどうかは不問。

けっこうあるよん。

> Cでは、存在するものとして扱わなければならないということだけだ。

昔はもともとそういう実装でもいける言語仕様だったわけですが、
一時期は「そんなものはない」ってことにしてしまいたかったけど、
1980年以来たくさん流入したFortranユーザーたちの使う処理系も
考えると、どけちゃえなかったのよねー > 1の補数マシン

476デフォルトの名無しさん:04/06/19 18:07
じゃあ、422の書いてる。

> ちなみに、逆の場合、つまるとろこ、
> -1 を 符号無しに変換した場合、
> 16bit 環境なら、0xffff に成ると期待して良いあるよ。
> たとえ君の環境での負数の表現が2の補数で無かったとしてもね。

は、まったくのウソじゃん。
477デフォルトの名無しさん:04/06/19 18:08
あ、わかった!

422 == 463 == 467 == 470 かー



かっこわるすぎー
478デフォルトの名無しさん:04/06/19 18:49
>>477
>422 == 463 == 467 == 470

A == B == C == D
これがTRUEになるABCDの組み合わせを述べよ。
479デフォルトの名無しさん:04/06/19 21:25
良いあるよ。
480デフォルトの名無しさん:04/06/19 23:15
>>479
良いある算数
だろ、もうちっとヒネれよ
481427:04/06/19 23:25
で、結局
(unsigned)-1
は正しいのかよ?

早く答えろよ
符号なしの-1なんぞ言い出したのは、オマエかー!
483デフォルトの名無しさん:04/06/19 23:32
>>482
中傷しかできないアフォはこの板から出てけ
>>483
内容を確認せずに言ってしまった。スマソ。
ちなみにどこが中傷かは皆目見当がつかんが。
>>465
詳しく教えて下さってありがとうございました。
486デフォルトの名無しさん:04/06/19 23:48
>>484
符合なしの-1なんぞ言い出したのが誰だか確認しろ
>>486
確認したよ。ごめんねー。
488デフォルトの名無しさん:04/06/19 23:55
なんだ、ただの煽りに成り下がったか。つまらん。
490デフォルトの名無しさん:04/06/19 23:57
つまんねーのはオマエだ
技術的な話ができねえ奴は消えろ
491デフォルトの名無しさん:04/06/19 23:59
>>489
昨日HSPスレで暴れてた馬鹿だろ?
http://age.tubo.80.kg/age01/img-box/img20040620002231.html

Cを使う者として俺らはお前を認めない。消えろ。
492デフォルトの名無しさん:04/06/20 00:01
よっぽど悔しかったんだなw
493デフォルトの名無しさん:04/06/20 00:03
HSPさえ使えないヘタレだったとはね。
Cなんて何にも理解してないんじゃないの?
                 ┌─┐
                 |も.|
                 |う |
                 │来│
                 │ね│
                 │え .|
                 │よ .|
      バカ    ゴルァ  │ !!.│
                 └─┤    プンプン
    ヽ(`Д´)ノ ヽ(`Д´)ノ  (`Д´)ノ    ( `Д)
    | ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U
〜 〜  ̄◎ ̄  . ̄◎ ̄   ̄◎ ̄   ◎−>┘◎
495デフォルトの名無しさん:04/06/20 00:06
>>493
理解してるかどうか試せないのかw
なんかおもろいな。
497デフォルトの名無しさん:04/06/20 00:09
HSP煽ってる時点でry
498デフォルトの名無しさん:04/06/20 00:09
>>497
「で」か「を」かどっちだ? 肝心なところを省略するな
499デフォルトの名無しさん:04/06/20 00:12
煽ってる時点で終わりだな。
比較対象にしようとすることが間違いで言語の適性とかそんなことは考えない。
「虎の威を借る狐」に過ぎない。
500デフォルトの名無しさん:04/06/20 00:13
>>499
比較ってどんな比較だよ
ソース示せないアフォはこの板から出てけ
501デフォルトの名無しさん:04/06/20 00:13
s/ソース/コード例/
502デフォルトの名無しさん:04/06/20 00:14
391 :デフォルトの名無しさん :04/06/15 21:44

>>384
アセンブラができることを自慢するな。そんなもん必須だボケ。

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

433 :デフォルトの名無しさん :04/06/15 22:04

>実は何もできません。都合が悪くなると逃げます。
>* 言 う だ け な ら 誰 で も *

これ言いたかっただけだろ。もう中学生レベル。
俺はアセンブラはZ80とXアセンブラしか知らん。
つーか俺に指図すんな凡夫。


こんな奴がC一つとっても出来ると思うか?
こんなのはCどころかVBさえ危ういんじゃないの?
503デフォルトの名無しさん:04/06/20 00:15
>>502
>こんな奴がC一つとっても出来ると思うか?
>こんなのはCどころかVBさえ危ういんじゃないの?

実証ができず推測しかできないアフォはこの板から出てけ
test
505デフォルトの名無しさん:04/06/20 00:18
「静的に」と「動的に」メモリを確保する、の違いがわかりません。
どういう意味ですか?
506デフォルトの名無しさん:04/06/20 00:20
sprintf関数とgets関数の意味がよくわからないので教えてください。
507デフォルトの名無しさん:04/06/20 00:21
Cは確かにとりあえず何でもできる。実行速度も速い。ただ簡単かといえば・・・
HSPは遅いし低機能だけどGUIは弄りやすいし簡単なことは一通りできてしまう。
何を比較するのか?機能?簡単さ?比べ物になんないだろ。
極端に言えばエクセルとワードを比較するようなもんだぞ。
同じアプリだからといって優劣はつけられないだろ。優れた点もあるし劣った点もある。
その比較対象を絞れば(ex: 表計算能力とか)そりゃできるだろうよ。
でもそれは本当に正しい比較なのか?ワードで表計算するのか?
そんな簡単なことも知らない奴はプログラムするべきじゃないな。
身近な例を出せばCとC++を比較してどっちがいいって話だ。
508デフォルトの名無しさん:04/06/20 00:24
>>503
推測?そんな馬鹿な。

アセンブラができることを自慢するな。そんなもん必須だボケ。
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
俺はアセンブラはZ80とXアセンブラしか知らん。

アセンブラ必須って言っておいて普通Cで使うであろうアセンブラは8086だろ。
そんな論法的にも「できません。」って言ってるような奴にできたらすごいな。ああすごいよ。
509デフォルトの名無しさん:04/06/20 00:25
>>508
スレ違い

こちらへどうぞ
http://pc5.2ch.net/test/read.cgi/tech/1085915001/
510デフォルトの名無しさん:04/06/20 00:27
>>509
インラインアセンブラの話ね。一応書いとくと。
511デフォルトの名無しさん:04/06/20 00:28
>>510
板違い

マ板へどうぞ
512デフォルトの名無しさん:04/06/20 00:31
ここはC厨だらけのスレですね。

http://age.tubo.80.kg/age01/img-box/img20040620002231.html
>>487だけど、なんでこんなに荒れてんの?
514デフォルトの名無しさん:04/06/20 00:34
>>506
どこまでわかっているかを言ってみ
不足分の補充か、誤りの訂正から始めようや
515デフォルトの名無しさん:04/06/20 00:34
ここは空気の流れが厨なイソターネットですね。
アセンブラなんて簡単じゃん。Cからコンパイラで吐かせてもいいし
アセンブラは言語仕様がシンプルなんで対応表を基にして書けばいいし
とにかくCコードのコアはアセンブラで記述するのはデファクトだろう
517デフォルトの名無しさん:04/06/20 00:37
518デフォルトの名無しさん:04/06/20 00:38
>>516
古典の先公になれ。同じこというから。
>>518
それをいうならそもそもCも(ry
520デフォルトの名無しさん:04/06/20 00:40
>>519
狭すぎ
521デフォルトの名無しさん:04/06/20 00:41
簡単とか言うってことはきっと助動詞の表なんてすらすら出てくるんだろうな。
ああすごいな。見習いたいなw

C言語は本で独習しましたが何か?
次の質問どーぞ↓
C nativeで全く新しいデータ構造を5年以内n
524デフォルトの名無しさん:04/06/20 00:45
Cコンパイラってどこにありますか?
525デフォルトの名無しさん:04/06/20 00:46
>>524
自分で見つけられないなら買え
>>524
欲しいの?
おまえら生理だろ?
528デフォルトの名無しさん:04/06/20 00:47
>>524
用語がわかんねえんだろ
翻訳環境のことだよ
GNU
>>505
コンパイル・リンク時に確保されるのが「静的」
実行時に確保されるのが「動的」
GNUのソースなどでよくみかける
^L はどういう意味なのでしょうか。

例えばemacs21.3ではemacs-21.3/src/emacs.c の288行目、393行目などで
見かけます。

どなたかよろしくおねがいします。
改ページコードだよ。
533531:04/06/20 02:30
即レスありがとうございます。
これを頼りにいろいろ調べます。
534デフォルトの名無しさん:04/06/20 02:39
c初心者です。メモリの動的割り当て、メモリの開放のための関数malloc,freeについて質問します。プログラムを組んでみました。次のソースをみてください。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct node{
char name[10];
struct node *ptr;
}

main(){
struct node *root=NULL;
printf("%s\n",root->name);
root=(struct node *) malloc (sizeof(struct node));
printf("%s\n",root->name);
strcpy(root->name, "a");
printf("%s\n",root->name);
free(root);
printf("%s\n",root->name);
}
実行結果は
(null)
[@
a
[@
となります。自分はfreeというのはmallocをする前の状態にもどすための関数、だと理解していますが、実行結果を見てみるとどうも違いますね。mallocをする前の状態に戻す、つまり、実行結果を
(null)
[@
a
(null)
となるようにしたいのですが、どうすればいいのでしょうか?どなたか教えてください、お願いします。
535デフォルトの名無しさん:04/06/20 03:02
534は
struct node *root=NULL;
printf("%s\n",root->name);
の時点でsegmentation faultになると思います。
rootの指すstruct node領域がないからです。
メモリ確保したらもともと何かの数字がはいってない?
でもメモリ解放したら前と値変わるのでわ?
>534
free()は単純にメモリを解放する関数。
ただ、解放した分使用可能なメモリが増えるかといえば、
一概にそうとはいえない(環境による)。
ちなみにfree()した領域にアクセスしてはいけない。

free(p);としても、pの持つ値は絶対に変わらない。
何故、絶対に変わらないのか分からないなら、
それはポインタに対する理解が足りていない証拠。
538デフォルトの名無しさん:04/06/20 04:41
#define Free(p) (free(p),(p)=0)
こういうマクロを使っている人がいるかもね。あとfcloseなんかも。
539デフォルトの名無しさん:04/06/20 04:44
元がvoidだから、
#define Free(p) ((void)(free(p),(p)=0))
こうした方がいいかな。
そのマクロの値は常に0になるべ。正しくはこうでしょ。
#define Free(p) (free(p), (void)(p) = 0)
いたたた、540訂正。
#define Free(p) (free(p), (void)(p = 0))
p = malloc(sizeof(*p) * 2);
p = &x;
++p = &y;


Free(--p);
>>541
それでもいいけど、>>539はカンマの両側を括弧でくくっているから、free(p),(p)=0の戻り値(?)をvoidにキャストしていて大丈夫だよ。
>>543
うわわ、ほんとだ。ごめん。(void)free(p)に見えてた。
545542:04/06/20 05:13
間違えた。
p = malloc(sizeof(*p) * 2);
*p = x;
*++p = y;


Free(--p);

こんなことすると、悲しい。
546デフォルトの名無しさん:04/06/20 05:43
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct node {
  char name[10];
  struct node *ptr;
} NODE;
typedef struct node NODE;

main()
{
  NODE *root = NULL;

  if ((root = (NODE *)malloc(sizeof(NODE)) != NULL) {
    printf("%s\n", root->name);
    strcpy(root->name, "a");
    printf("%s\n", root->name);
    free(root);
    printf("%s\n", root->name);
  }
}
547デフォルトの名無しさん:04/06/20 05:46
お、safari使いだ。
548デフォルトの名無しさん:04/06/20 05:48
> #define Free(p) (free(p),(p)=0)
> こういうマクロを使っている人がいるかもね。

実際やってるやついる。というか、マクロにさえせずに毎回、NULLいれてるのよ。
ようするに、無効になったポインターをまちがって使わないようにってことみたいだけど、
そんなことをするってのは、ようするに、コードのロジックを把握できてないのよね。

もともとは大人数で分担してやるきたないソースにときどきみられるやりかたなんだけど、
じゃあ、ふつうの代入文で、使わなくなった変数にわざわざ0いれて回るのかよ!ってことだ。
549デフォルトの名無しさん:04/06/20 05:49
> お、safari使いだ。

Safariとはかぎらないね。うちのLinuxのブラウザーでもバックスラッシュが書けない。

Safariは昔は書けなかったけど、いまはかけるってきいたけど?
550デフォルトの名無しさん:04/06/20 05:52
てすてす
printf("hello, world\n");
551デフォルトの名無しさん:04/06/20 05:52
>>549
そうなのか。
~を〜、\を\と書く人はSafari使いだけだと思っていた。
552デフォルトの名無しさん:04/06/20 05:53
てすてす (Safariから、その2)
printf("hello, world\n");
553デフォルトの名無しさん:04/06/20 05:54
てすてす (Safariから、その3)
printf("hello, world\n");
554デフォルトの名無しさん:04/06/20 05:58
>>546
> } NODE;

NODEはいらないんじゃない?
555デフォルトの名無しさん:04/06/20 10:06
Linuxのソースコードを見ていて、
driver/block/elevator.cなるファイルに
inline関数が沢山定義されいるのですが、
インライン関数を.Cにて定義する意味が分りません。
なぜヘッダーにて宣言しないのでしょうか?
556デフォルトの名無しさん:04/06/20 10:28
>>555
staticの代わりじゃね?
>>556
こういうコーディングスタイルってどうなんでしょうか?
サブルーチンを定義したいだけなら、マクロを使うべきという
気がするんですが、こういう考えは古いんですかね。
あ、あと上記のファイルにて定義されている関数、
例えばelv_rq_merge_ok()というものがあるんですが、
これはsttic関数ではありません。そして、
この関数に対して、他の*.cから呼び出してるような
記述があります。inline関数が外部から呼び出せる?
んー、よくわかりません。
>>548
二重開放のごたごたから逃れることはできる。
ちなみに、
> じゃあ、ふつうの代入文で、使わなくなった変数にわざわざ0いれて回るのかよ!ってことだ。
に関しては、変数の使いまわしをしない限り後で参照しても特に問題無いことが多い。
560デフォルトの名無しさん:04/06/20 11:07
>>559
>二重開放のごたごた
>変数の使いまわしをしない限り後で参照

これらを邦訳すると「ヘボ」。


>から逃れることはできる。

逃げるより根治が必要。


>問題無いことが多い。

人的に深刻な問題である。
根治が必要。
そこかしこでメモリ取得/解放ルーチンを書く方が問題じゃないですか?
562デフォルトの名無しさん:04/06/20 11:13
>>561
void* malloc2(...);
void* malloc3(...);
void* malloc4(...);

誰がこんなことすんだよw
自分は大丈夫だと思ってても、
後で呼ばれるかもしれないからなぁ。
564デフォルトの名無しさん:04/06/20 11:21
どんどん意味不明になっていく
根の腐った論理(?)は動かすたびに崩れてく
そんなきれいごとが通じるなら苦労しません
>>521
大方の意見には賛成だが
「助動詞の表なんてすらすら出てくる」のは当たり前なので皮肉になってないよ
>>562
そこで汎用的なメモリ操作ルーチン作ってどうするよ。
そうじゃなくて、データ構造に応じてある一箇所でまとめて
取得・解放しろよってこと。
>>567
malloc/freeのラッパを書いてるに過ぎない。
>>548
スコープ切っときゃいいのにね
そうすりゃ後から間違って参照されるということはありえない
それができないってことは、構造化ができてないってことなんだろうね
>>567
typedef struct _Hoge { ... } Hoge;
Hoge *pHoge = hoge_alloc(...);
hoge_free(pHoge);
とか、そういうこと?
571デフォルトの名無しさん:04/06/20 12:17
> NODEはいらないんじゃない?

たぶん、最初にtagなしのtypedefをしようとして、自分自身へのポインターを含むことに
気づいて、やめて、で、消し忘れた、のでは?
572デフォルトの名無しさん:04/06/20 12:17
>>559
じぶんでいってて、その矛盾に気づかないのか?
573デフォルトの名無しさん:04/06/20 12:21
\0
\0
printf("hello, world\n");
printf("hello, world\n");
#include <stdio.h>
#include <stdlib.h>
void * malloc(size_t size);
int global;
main()
{ int a;
printf("mainにおける(malloc)のアドレス: %p\n", &malloc);
printf("mainにおける(global)のアドレス: %p\n", &global);
printf("mainにおける(a)のアドレス: %p\n", &a);
printf("関数(main)のアドレス: %p\n", &main);
}

このプログラムを実行した結果
mainにおける(malloc)のアドレス: 20830
mainにおける(global)のアドレス: 2093c
mainにおける(a)のアドレス: ffbefc34
関数(main)のアドレス: 10614
を見てなにがわかるか考察せよ。

って出たんですがどうやって書けばいいんですか?
575デフォルトの名無しさん:04/06/20 13:38
>>574
答え。 何もわからない

サンプルとして失格。
これで何かがわかったら教授より上だ。
mallocとglobalはデータ領域にある。
aはスタック上
mainはテキスト領域にある
ということを言わせたいんじゃないの?
>>574
俺がわかったこと
 ・アドレスの位置がわかった
 ・main関数の後にmalloc, global, aが配置されている

この課題はメモリ上の位置関係を考察しなさいってことですかね?
578デフォルトの名無しさん:04/06/20 13:48
>>574
「4行表示されたことがわかった。」
>>578
ヽ(`Д´)/それだ!
>>574
「出題者の知能の程度が分かった」
581デフォルトの名無しさん:04/06/20 13:57
>>580
ヽ(`Д´)/それだ!
pointer, mm の分からない人がいるスレはここですか(;´Д`)ハァハァ
>>574
もうちょっと突っ込んで考察してみると

アドレスの配置順は、
・malloc引数でsize_tを指定している事、malloc.hではなくstdlib.hをincludeしている事から、
 ANSIに準拠した環境である
・main 、malloc、global、aの順である
・printf中に日本語文字列を使用可能な事から、最低限日本語を扱えるコンパイラを使用している
・各アドレスは4byte毎に整列されているので、おそらく32bit環境である
・mainのアドレスとmallocのアドレス、globalのアドレス値から、
 mallocはTEXTセクションの比較的後ろの方に配置されている
・断言はきないが、mainとmallocのアドレス差から、staticリンクと
 dynamicリンクが予想されるので、仮想記憶を備えた環境で動作させている
・これだけのプログラムにも関わらず128kbyte以上のサイズを消費している事から、
 標準でリンクされるコードの多い、比較的大きめのOS上で実行された
・aのアドレスからスタックの配置からOSをある程度絞り込める
・2chで宿題の答えを聞こうとする>>574の程度の低さ
・ここが宿題スレでない事も判らない>>574のあふぉさ加減

まだ有るかもしれんが、このくらい
最後の二つは最重要ポイントだね。
585デフォルトの名無しさん:04/06/20 15:05
>>583
ANSIがアドレスの配置順をどう規定しているんだ?
日本語文字列とやらのコード系を確認せずに何が断定できたんだ?
整列規則がどうかしたって? 実行環境がPCでそーゆーこと言うと赤っ恥かくぞ。
アドレス差からバインディングタイプを推定することは全く不可能。隣接させることさえ可能だ。
128KByteというキリの良さから連想できたことが冗談みたいに少なすぎ。

失格サンプルを出題した教授だって腐っても学者のはしくれ、
おまえさんに対する学問に対する素養を採点させると・・・
ここはC厨だらけのイソターネットですね
read C99
588デフォルトの名無しさん:04/06/20 15:21
>>574
1: malloc == *malloc
2: malloc == &malloc

どっちもTRUEになるの?
589デフォルトの名無しさん:04/06/20 15:25
>>588
void *(*malloc)(size_t) = 0;
galtu = malloc(1);
590デフォルトの名無しさん:04/06/20 19:50
初歩的な質問だと思いますが、ちょっと詰まってしまったのでお願いします。

float や double の変数のゼロ判定はどうやってらったらよいのですか?
0による除算を避けるために判定を書きたいのですが。
float f;
....

if (f == 0.0) ...
>>591
あ、それで委員ですか。
浮動少数の == 判定は御法度だと思ってました。
もしかして0.0 の時だけ特別ですか?
NULL
>>592
有効桁数内の整数に丸め誤差は無い。
>>557
Linuxがどういうコンパイラを使うことを前提としているか垣間見えるじゃないか。
>>590
0ぴったりじゃなくても、極端に0に近い数だとやはり0除算扱いになる。
だから自分で有効桁数を決めて、絶対値がそれ以内かどうか調べるべし。
(゚∀゚)renice!
>>590
double x
あれこれ
if (x == 0)
浮動小数点数っ0除算したらダメなんか?
600デフォルトの名無しさん:04/06/20 21:49
・除算結果がオーバーフロー
・厳密に0と評価できる
・除数がイプシロンを下回る

まあ色々考えられる罠
不動小数点数って0除算したら正か負の無限大になるんと違うんか?
602デフォルトの名無しさん:04/06/20 22:07
ルールブックは効力の範囲を理解して読むことが大事な準備
0で割る計算,0除算,割り算の意味
http://www.uja.jp/contents/math/divbyzero.html
>>601
他に、0÷0というのがある
そういえば、BCCでfastmath.hをインクルードして0除算するとハングアップする。
端折り過ぎ。
>>603
実数と float/double は違うから。
実数では0除算しちゃだめだけど、
C言語の float/double の場合、処理系依存?
たいていは0除算の結果は∞。
0/0 は NaN。
実際にはIEEE 754な処理系が多いけど、C言語的には処理系依存ということ?
int main() {
/* リストの先頭保存用 */
List start = NULL;
/* リストを初期化 */
start = Initialize();
push(start, 1);
return 0;
}

void push(List *p, int num) {
List *data; List *next;
if(p->next != NULL) {
next = p->next;
data = add_list(p, num);
data->next = next;
p->next = data;
} else {
add_list(p, num);
}
}

List *add_list(List * head, int num) {
List *p;
p = (List *)malloc(sizeof(List));
/* 変数に代入したり、nextを代入したりする */
return p;
}

このような自己参照構造体を利用したスタックを操作するプログラムを作りました。
今のところ正常に動作していますが、関数が呼び出された後メモリが解放される筈なので、
pushは問題があるような気がします。たまたま、運良く動いているだけでしょうか?
609デフォルトの名無しさん:04/06/21 02:04
>>608
free関数の呼び出しが見あたらないが。
610608:04/06/21 02:35
>>609
上に書いた分はスタックに入れる関数なので、freeは載っていません。

611デフォルトの名無しさん:04/06/21 03:05
>>608
p,num,data,nextは解放されるが、それが問題になるようにはみえない。そのアドレスを返しているわけでもないし。
ネタか?
612608:04/06/21 03:22
書き方が悪かったようです。申し訳ありませんでした。

関数内で宣言した変数は関数の処理が終わり次第自動的に解放されますが、
今回のように関数内で新たな構造体を作成して処理するような場合でも
関数での処理が終わったら解放されてしまうか?ということです。

start→NULL
push関数を呼び出して後ろに構造体を連結する
start→構造体1→NULL
     ↑この構造体1が関数の処理が終了後解放されてしまうのではないか?

こんな感じです。
>>612
例えば add_listでは
変数pは開放される。
mallocした領域は開放されない。
add_listが返すmallocの返値はadd_listの外でも有効。
>>608 は、ポインタについて理解していないッぽ。
ポインタはジョジョでいうスタンド。
これに異論はないだろう。
616デフォルトの名無しさん:04/06/21 10:08
>>612
mallocも関数だと分かっていれば解放されるかどうか分かるはずだ。
>>616
妥当にして簡潔な説明だ
これでなるほどと思うかどうかで >>612 のセンスが問われる
allocaみたいなのもあるけどね。
619616:04/06/21 15:48
>>618
まあな。
ラロッカ
VC7でのenumerationについてお聞きしたいのですが、
enum test {hoge, moge, huge};という列挙体をenum test tmp;としたときの列挙型変数tmpは
普通のint型の変数とは何が違うのでしょうか?
試しにtmp = 4としても問題なく表示出来てしまい
enum test tmp;の代わりにint tmp;を置き換えてみても何一つ問題なく動きました。
これは処理系依存だと言うことなのでしょうか?
VCは使ってないので具体的な情報は書けないが、
http://www.kouno.jp/home/c_faq/c2.html#0
などが参考になる。
>>622
早速読んでみたいと思います。
ありがとうございました。
624612:04/06/21 18:49
612です。
616さんのレスで涙がでました。Cの教本片手に首吊ってきます……。ありがとう。
625デフォルトの名無しさん:04/06/21 21:56
すいません、お尋ねしたいんですが、
プログラム中で

#define SINSUU 2

という部分があるんですが、
なぜかそこで訳のわからない警告が出たんです。

WARNING C4005: 'SINSUU':マクロが再定義されました。
SINSUUの前の定義を再確認してください

というメッセージで、#define SINSUU 2 はどこを見ても一つしかありません。
そこで、

#ifndef SINSUU
#define SINSUU 4
#endif

こうしたら何とか警告は出なくなったんですが、
この対処でよかったんでしょうか?
ファイル分割をしているわけではなかったんですが、
何がいけなかったのか全くわかりません。

使用環境は Visual C++ 6.0 です。
この問題で考えられる原因に、心当たりがある方いらっしゃいませんか?
二重インクルードしていたんだろ。
.h ファイルはインクルードガードしとけ。
627デフォルトの名無しさん:04/06/21 22:15
>>626
おぉ、ありがとうございます。
まさにそのとおり、変更後2回目のコンパイルでこの警告が出ます。
あまり大した問題で無いとわかり、安心しました。

して、その設定はどこですればいいのでしか?
628デフォルトの名無しさん:04/06/21 22:17
>>627
コンパイラに添付されてるヘッダを何本か開いてみろ、共通点があるはずだ
1度でもインクルードされたかどうかのフラグを立てているわけだが
629デフォルトの名無しさん:04/06/21 22:19
なるほど、勉強になりました。
どうもです。
630デフォルトの名無しさん:04/06/21 22:21
自作ヘッダには多重インクルードガードしとくのが安心だよな。
stdio.h をみてみると、

#ifndef __STDIO_H
#define __STDIO_H


#endif

ってなってる。
631デフォルトの名無しさん:04/06/21 22:47
> 二重インクルードしていたんだろ。

この推察はおそらく合ってるが、
そこで

> .h ファイルはインクルードガードしとけ。

こうするのはおおぼけ。
632やれやれ:04/06/21 22:48
このスレってFAQと宗教論争以外なんかネタないの?
633デフォルトの名無しさん:04/06/21 22:50
> 自作ヘッダには多重インクルードガードしとくのが安心だよな。

逆だよ ぼけ。

標準ヘッダーみたいなものはともかく、自分でつくったファイルでやるやつはぼけ
やらないとエラーがでるようになっちゃうようなやつはおおぼけ
>>632
よくある質問だからFAQなんだろ
635デフォルトの名無しさん:04/06/21 22:51
> あまり大した問題で無いとわかり、安心しました。

かなり問題だよ ぼけ

自分で、どれがどうインクルードしているのか把握してないわけだろ?
636デフォルトの名無しさん:04/06/21 22:52
> これは処理系依存だと言うことなのでしょうか?

コンパイラーが、警告をだし「てもよい」
637デフォルトの名無しさん:04/06/21 22:52
>>633
プ

標準ヘッダなみにしっかりしたの作れよ
638デフォルトの名無しさん:04/06/21 22:53
fclose(stdin) とか、fclose(stdout)
は、やっても問題ありませんか?
問題ないです。
ただ、再度標準入出力へのポインタを取得するのは処理系依存です。
640デフォルトの名無しさん:04/06/21 22:57
>>639
>処理系依存です。

俺用語で言われてもわからん
規格用語に翻訳してくれ
俺が答えてやろう。問題ない。終わり。
642デフォルトの名無しさん:04/06/21 23:00
> 標準ヘッダなみにしっかりしたの作れよ

意味が逆だろ?
標準ヘッダーとちがって、自分で「把握しておくべき」なので、
2重インクルード防止の仕掛けはしては「いけない」のだ > 自作ヘッダー
つまらん
644デフォルトの名無しさん:04/06/21 23:03
>>642
自分が何を使っているかは把握すべきだね
その「何」にも責任範囲があって
そこに立ち入るのは「キャー」なんだよ
645デフォルトの名無しさん:04/06/21 23:03
質問です。某処理系で、以下のマクロ(シフトJISの1バイトめを判定)を、
#define iskanji(c)(0x81 <= (c) && (c) <= 0x9f || 0xe0 <= (c) && (c) <= 0xfc)

より伝統的な以下のに書き換えたのですが、
#define iskanji(c) ((unsigned int)((c) ^ 0x20) - 0xa1 < 0x3c)

数倍以上速くなりました。

そこで、以下の「シフトJISの2バイトめとしてありうる値かどうか」を判断するマクロを
#define foo(c)(0x40 <= (c) && (c) <= 0x7e || 0x80 <= (c) && (c) <= 0xfc)
同様にもっと速いコードに書き換えられないでしょうか?



テーブル使え
647デフォルトの名無しさん:04/06/21 23:06
> そこに立ち入るのは「キャー」なんだよ

ふつうcharって読むだろ。キャーとはいわん
648デフォルトの名無しさん:04/06/21 23:06
あ、メモリーも節約したいです(組み込み系なので) > テーブル使え

ここに居ると頭悪くなりそう・・・
650デフォルトの名無しさん:04/06/21 23:08
>>647
つきあってやんねー
ばいばい
なら4で割ってテーブルサイズを32バイトに縮小
64か・・・
653デフォルトの名無しさん:04/06/21 23:20
表ひかないでそこそこ速くする方法ない?
アセンブラで記述する
おいおいアセンブラでやれば速くなるとでも思ってるのか?
656デフォルトの名無しさん:04/06/21 23:56
>>655
DC X'83
>>633
いちいちそんなん気にしてられるか。
658デフォルトの名無しさん:04/06/22 00:24
>>648
ハードで実装すればいいのでは?
>>657
ttp://nssearch.hp.infoseek.co.jp/clang/1084749585.html
とりあえずここの>>1に書いてあるNGワード、登録しとけ。
(0x40<=(c) && (c)<=0xfc && (c)!=0x7f)
661デフォルトの名無しさん:04/06/22 03:15
char a[3][3];
で宣言して
a++;
ってしたらアドレスが3つすすんだんだけど常識?
662デフォルトの名無しさん:04/06/22 06:10
> いちいちそんなん気にしてられるか。

ようするに把握したくないってことですね?
そんなコードがろくなもんであるわけがない。
663デフォルトの名無しさん:04/06/22 06:11
>>661

char a[4][5]; だといくつすすむかわかるよね?
664最強 ◆lJJjsLsZzw :04/06/22 06:12
>>663
1つ。間違いない。
665デフォルトの名無しさん:04/06/22 06:13
>>660
比較が3つだけになりちょっと速くんるのですが、20%ぐらいしか速くなりませんでした。
数倍速くしたいのです。(で、表をひかずに実現したい)
釣りから釣りへと...。
>>663
5
a[1][0] - a[0][0]
#define foo(c)((BYTE)(c-0x40) <= (0x7e-0x40)) || BYTE(c-0x80) <= 0xfc-0x80 )
669デフォルトの名無しさん:04/06/22 07:51
それだと判定できないのでは?
670デフォルトの名無しさん:04/06/22 07:55
もし
#define foo(c) ((unsigned int)((c) - 0x40) <= 0x3e || (unsigned int)((c) - 0x80) <= 0x7d)
だとしても、比較2回に、論理演算1回あるので、速くはならんだろう。
671デフォルトの名無しさん:04/06/22 08:52
>>665
ハードウェアを取り替えてください。
推奨NGワード「ボケ」「ぼけ」「空白あけろ」「空白あけるな」
>>665
>#define iskanji(c) ((unsigned int)((c) ^ 0x20) - 0xa1 < 0x3c)
ってマクロのキモは
「0x81〜0x9f と 0xe0〜0xfc の2つの領域を ^0x20 で一つにまとめる」って
ところにあるんで、同じようには出来ないんじゃないか?

  #define foo(c)((unsigned)(c) - 0x40 <= 0xbc && (c) != 0x7f)

つか、速くなるかどうかはアーキテクチャにブリブリ依存してる希ガス。
むしろ、組み込み系で日本語文字コードを扱う事自体が信じられない訳だが…
>>674
ハァ?無知は黙ってたら?
>>662
把握しても嬉しいこと無いし。
677デフォルトの名無しさん:04/06/22 20:52
>>633
情報隠蔽って考え方に乗り遅れた老朽部品だな
つーか30年前でさえこんな概念はガイシュツに過ぎなかったわけだがw
釣られ過ぎ
std::cout << "Hello World!\n";

今日覚えたよ!!
680デフォルトの名無しさん:04/06/22 22:48
681デフォルトの名無しさん:04/06/22 23:04
よく __cdecl とか __stdcall とか見るけど、これらは具体的に
何をするんですか?
shared object を作るコンパイラ/リンカにヒントを与えるとか
聞きますが具体的な意味がわかりません。
まずググれよ
関数を呼び出すときの規約。
引数を左右どちらから渡すとか、
引数を受け渡しに使った変数領域を
呼び出し側、関数側のどちらがクリア
するのかetcのとりきめ。
Win32APIは__stdcall(標準呼出 standard call の略)、
c言語のデフォルトは__cdecl(c default call の略)、
になっている。他にもスタックを解さずにレジスタ経由で
呼び出す__fastcall(文字通り早い、そのかわり処理系
依存になる)とかがある。MSDNをもっていたら詳しく
書いてあるけど、ググッても結構ヒットするはず。
684630:04/06/22 23:15
>>633
性格の悪いヤツだなー。しかも視野が狭いと見える。
チームで大きいアプリ作る場合、多重インクルードガードしとくのが安心だろう。
もし釣りだとしても低質すぎ。
>>684
釣られるなよ。
「安心」じゃない、「絶対」だろ。
a.hに依存する b.h と c.h って、有りうるだろ?
プログラムはじめたばっかの洩れには、多重インクルードガード(って名前なの?)って
「いりそうなインクルードファイル全部書いとけっ」
ってことになってしまって、不要なのまで入ってしまいそうなんだけど・・。

「不要な物の1つや2つ、インクルードファイルの依存で躓くよりいい」
ってことでしか?
>>685
ヘッダの中で他のヘッダをincludeしてたりする場合もあるんで、
人間がinclude順をあれこれ気にするよりは、
機械的に二重 include防止しといた方がいいという話。

普通に書いてれば、必要ないヘッダファイル includeしてても影響は無いし。
(気持ち悪いんで、大抵は必要最小限のものにしぼるけど)
688デフォルトの名無しさん:04/06/23 00:16
includeだのプロトタイプだのは結局コンパイラを1パスにするための妥協なんだよ
多少の不便を乗り越えて本来の意味に沿うように使いこなすのは
機械相手の仕事を選んだ不幸な(本人は幸福?)人々の宿命と割り切れや
689687:04/06/23 00:19
すまん。番号間違えた。
>>686へのレスだ。
IEEE754の浮動小数点数同士の加減乗除のプログラムを教えてください
入力は二つです。10進数で入力しますy。それを2進に変換して浮動小数点数にして、演算をします。。
出力結果も10進で表示します。
マルチの >690 さんに質問。自分が書いている内容を理解できてますか?
>>690
入力文字列をatofで doubleあたりに変換したものを使って演算すれば上記の
条件は満たせるような気がするが。
693デフォルトの名無しさん:04/06/23 02:27
いまどき組み込み系でもUTF-8ですよ。SJISなんかどうってことないぐらい。
しかもSJIS<->UTF-8ってのは巨大な表をひかなきゃいけないのですが、
そんなのも平気ではいってるぐらいです > いまどきのくみこみけい
694デフォルトの名無しさん:04/06/23 02:29
> 性格の悪いヤツだなー。しかも視野が狭いと見える。
> チームで大きいアプリ作る場合、多重インクルードガードしとくのが安心だろう。

いいや、逆にそんなことをするチームってのはろくなもんじゃない。
695デフォルトの名無しさん:04/06/23 02:30
> ヘッダの中で他のヘッダをincludeしてたりする場合もあるんで、
> 人間がinclude順をあれこれ気にするよりは、
> 機械的に二重 include防止しといた方がいいという話。

だから、それがすでにだめだめ
つぅか酌み混みで2バイト使うなよな…
ここの人は「*」をスターと読んだら突っ込み入りますか?
また「&」をアンドと読んだら?
たまに「管理が繁雑になるから」という理由でヘッダ中での includeが禁止されてるプロジェクトもあるよな。
699デフォルトの名無しさん:04/06/23 02:52
それのほうがまだまし
*はアスタリスク
&はアンパーサ
^はサーカムフレックス

これであってる?
701デフォルトの名無しさん:04/06/23 07:14
& → アンパサンド → アンド・パース・アンド → アンドはそれ自体でアンドを表す

アンドと読んでも問題ない。
むしろアンパサンドと読むと
'A' をエーパーセーと読むみたいな感じ。
アスタリスクはXに横棒。
縦棒じゃない。
FAQだな。しかも検索すりゃ山ほど出てくるのに。
&(アンパンサンド)
腹減った。
705デフォルトの名無しさん:04/06/23 07:22
('A')まんどくせー
>>694-695
何がどうダメダメなのか書けよ。
どうせダメだからダメとか子供みたいなこと言うんだろうなぁ。


>>694-695 ↓
    〃〃∩  _, ,_
     ⊂⌒( `Д´) < ヤダヤダ!インクルードガードしちゃヤダ!
       `ヽ_つ ⊂ノ
              ジタバタ
自作ヘッダ同士であまり複雑に依存関係があるのはどうかと思うよ。
708デフォルトの名無しさん:04/06/23 10:22
> 何がどうダメダメなのか書けよ

なにこどもみたいなこといってるんだ...なんでいけないのかさえわからないようなやつは
だめだめにきまってるだろ ぼけ
709デフォルトの名無しさん:04/06/23 10:23
>>707
だね。
多重インクルードのカード処理が必要ってことは、すでに依存関係を把握できてない
ってことだし。
直接発生する実害が書けないなら芯でいいよ
ユーザに依存関係意識させんなよ
>>711
それは標準インクルードに関してだろ?
自分で作成したインクルード依存関係くらい
ちゃんと把握して作成しなきゃダメダメだろ!?
っていってるんじゃねぇのんか?
直接発生する実害が書けないなら芯でいいよ
>>712
明日の自分は他人
アンチインクルードガードは

/* defs.h */
/* すべてのマクロを定義 */
...

/* funcs.h */
/* すべての関数のプロトタイプ宣言 */
...

とかやってそうでキモイ
>>712
チームで開発するときも、それ言うんですか?
「俺の hoge.h は内部で a.h とプロジェクト共通の def.h を使ってる。
 ガードしてないから自分で気を付けろ!」って?

hoge.h 使おうと思ってた人は、自分の書いたソースから
a.h と def.h を外さないといけなくなるわけですね?

で、ある時 hoge.h に更に別のヘッダを加えた場合、
「b.h も使う事にした。お前ら b.h は外せ」って言うんですね?

まー好きにしてもらっていいですけどね。
>>715
気のせいです。
ガードしていようといまいと、莫迦はそういう使い方をします。
>>716
プロジェクト参加したてのときそういう目にあったことがある。
先輩に「インクルードガードしてください」って言ったら
「何それ」
って言われた。

オレ: 「#ifndef... /* 中略 */ ってやつです」
先輩: 「何の意味があるの?」

数日後に一部のヘッダファイルがインクルードガードされてた。
自分は大丈夫でも、バカは絶対いるんだからガードしとけ。
720デフォルトの名無しさん:04/06/23 11:30
やっていないと馬鹿にされるから一応やっている。
721デフォルトの名無しさん:04/06/23 11:33
>>716
得意な料理はスパゲティですか?(プ
>>716
こういうヤツに限って
goto絶対使うなとか不要とか
自慢げに言ってそうだよな(w
>>721
ヒキコモリ自称プログラマは気楽でいいですね。
100人以上とかで開発したことなんてないでしょうから。
100人以上とかで開発したことなんてないでしょうから。
725デフォルトの名無しさん:04/06/23 12:01
>>723
自分達が無計画なのを棚にあげるのですね?
解るよ、設計ミスしてるとつらいよねw
安置は技術的な話を一行も書いてないのになんで放置できないんだお前らは。
>>721
妄想が禿しいようですね。
ヘッダはモジュール (クラスと言い換えてもいいですが) 毎に
分けるのがふつうじゃないですか?
というか、今そんな話はしてないんですが。

>>722
妄想が禿しいようですね。
gotoを使ってはいけない、というのは莫迦の台詞ですよ。
というか、今そんな話はしてないんですが。
100人以上とかで開発したことなんてないでしょうから。
友達100人できるかな、とかそういったレヴェルでしょうか。
>>726
みんな暇なんだよ。
仕事しろ!(上司)
仕事くれ!(無職にちゃんねらー)
違う会社の上司に言われてもな
近所の婆に注意されてもな
735緊急アンケート:04/06/23 12:28
Q.プロジェクトのメンバにしたくないプログラマは?

・アンチインクルードガード  1人
・2ちゃんねら          1人
さあ。
ディスクが節約できる。
おまいら冷静に考えてみれ。
自分で依存関係管理してガードせずに書こうが、
ガードしてお気軽しようが、どっちでもいいじゃねぇか。
議論(とても議論とはいえないが)することもねぇ、
好きにしろってことだ。
740デフォルトの名無しさん:04/06/23 13:05
すいません質問です。
関数を
-------------------------
fanc(x,y)
int x;
char y;
{
int i,j;
・・・・・・
-------------------------
って書く時、
fanc()を事前に宣言しておきたいんですが
どうやって書けばよいですか?
あと、うちではCygwin使うと
この書き方しか受付けないんですが
Unix上だとこうしか書けないんでしょうか?
返り値の設定のしかたもいまいち分からないので
書きづらくて困ってます。
よろしくお願いします。
>>740
int func(int x, char y);
つかまともな本買え
742デフォルトの名無しさん:04/06/23 13:09
ネタとしかおもえん。
萌え萌えウニックスでム板住人のオススメって何?
ネタだろ。今時古い形式でコードを書く利点なんてないし。
>>740は骨董ソースのメンテを押し付けられたド素人新入社員
うわっ古い思い出やなー
747740:04/06/23 13:32
すいませんネタじゃないんですが
どこらへんがネタっぽいんでしょうか・・・?
あと、うちではCygwin使うと
この書き方しか受付けないんですが
関数名がfancなとことかも釣りなんだろ。
そんな餌で(
>>740
ANSI Cなコンパイラ使えよ。
コンパイラによってはANSI Cオプションがいる。
751デフォルトの名無しさん:04/06/23 15:02
#include<stdio.h>
#include<stdlib.h>
void main(void){
char *str;
str=malloc(sizeof(char)*20);
scanf("%s",str);
printf("%s",str);
free(str);
}
参考書のサンプルプログラムをDLしてコンパイルしたら型がなんとかって
エラーがでます。
本事態がまちがってるのに、どこをどうなおしたいいかわかりません
もしかして、この本つくったやつしょぼいの?
ぜひどこをなおしたらいいかおしえてください
cygwin の gcc が ANSI スタイルを受け付けないはずないよなー
>>751
ここはC言語スレでお前が買ったのはCの参考書なのに
拡張子.cppとかにしてたりするんじゃないかとか。

mainの戻り値の型なんて餌に俺さまがクマー
クマの元ネタってなんなの?
先日、谷尻かおり氏のC言語によるはじめてのプログラミングレッスン1.
という本を購入したので、C言語を勉強しようと思っているのですが
コンパイラは何がオススメですか?
755はプログラムに関してはずぶの素人で、使用するマシンのOSはXPです。
アドバイスいただければ幸い。
> コンパイラを探しているなら >>2-13 を。
>>754
ダディクールの元ネタ探してたとき、クマーのことも
いっしょに書かれてたページがあったんで貼っとく。

http://www.google.co.jp/search?q=cache:gwonY-qou7QJ:www5a.biglobe.ne.jp/~shinotan/sonRO.htm+%E3%83%80%E3%83%87%E3%82%A3%E3%83%BC%E3%82%AF%E3%83%BC%E3%83%AB&hl=ja
>>757 サンクス
でもできれば、「そんな餌で俺様がクマー」だっけ?
それのルーツも知りたいが・・・板&スレ違いだった。スマソ・・・
759デフォルトの名無しさん:04/06/23 16:41
このスレ疑心暗鬼が激しいですね。
#include "stdio.h"

int main(){

int i;
for(i=0;i<5;i++) printf("unko\n");
printf("\0x1b [2J");

return 0;
}

エスケープコードってXPじゃ使えなくなってるの?
98だとちゃんと↑の実行すると画面が消えてくれるんだけど・・・.
"XP エスケープシーケンス"とかで検索かけてみ。
762デフォルトの名無しさん:04/06/23 18:20
わらわら出てきたけど解決できないっす
よくあるのがCONFIG.NTに

device=%SystemRoot%\system32\ANSI.SYS
dosonly

ってのを追加させて再起動したけど効果現れず・・・.
同じ症状で解決する人と解決しない人がいるみたいだけど
なんか他に解決方法あるぽ?
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
>>762
コンソールAPIを呼び出すとNT, 9xの両方で動くけど、だるいかもしれない。
http://www.kumei.jp/c_lang/intro/no_58.htm
http://msdn.microsoft.com/library/en-us/dllproc/base/console_functions.asp
765デフォルトの名無しさん:04/06/23 18:40
>>764
あーいやーそうもゴリゴリくるとちょいと困ってしまいます.
cout出すのWinじゃないのよね.
Winはシステムから送られてくるデータを表示するだけなのねん

何が言いたいかってーとあるマイコンがあります.
その中のプログラム中にcoutを書くとtelnetで繋がれたコマンドプロンプト上に
文字列が排出されると・・・.そこでエスケー(ry使うとかっこいいんじゃね?と
思ってやってるわけだが.うーむこまった.ちなみにマイコンはRISCでこれが
非常に(オイラが)混乱している原因
TeraTermとかは色出せた気がするけど。
ああ、でもclearが効いたかどうかはわからんな。
768760:04/06/23 19:00
なんかやめときます.
これ以上はシステム公開せにゃならんっぽいし
スレ汚しスマソ
C言語の問題じゃないじゃん。
770デフォルトの名無しさん:04/06/23 19:54
>>687
二重インクルードガードも必要だが
不要インクルードガードも本当は欲しいところ

俺は>>695とは二重インクルードガードについて主張が対立しているが

>人間がinclude順をあれこれ気にするよりは、
>機械的に二重 include防止しといた方がいいという話。

こういう情報隠蔽とアフォ隠匿の混同については>>695と同意見だ
しつけーな
772デフォルトの名無しさん:04/06/23 19:59
>>760
うそつけ。
98でそれやってないだろ?
773デフォルトの名無しさん:04/06/23 20:06
TeraTermならVT100とかなんたらをエミュレートしてるから
ESC[2Jでもなんでも対応してるだろ?
だから出力先をTeraTermにすればいいんじゃないの?
774デフォルトの名無しさん:04/06/23 20:21
bが全角と言うオチとみた!
775デフォルトの名無しさん:04/06/23 20:54
現在、Windowsで既存のDLLのラッパーDLLを作っています。
手を加える必要の無い関数についてはfunction forwarding(?)
で元の関数に転送してやる事が出来るそうですが、このやり方が
わかりません。
誰かご存知の方はいませんか?
>>775
スレ違いです。邪魔。
777デフォルトの名無しさん:04/06/23 21:05
777GET
>>776
お前の方が邪魔。このスレから消えてください
まぁスレ違いだけどな。
779775:04/06/23 21:16
すみませんでした。
VisualC++系のスレならいいんでしょうかねえ・・
>>779
だめ
781775:04/06/23 21:24
_| ̄|○
782デフォルトの名無しさん:04/06/23 21:51
PC一般で聞いてきてこちらへ誘導してくれたので、お願い致します・・・
Borland C++ Compiler をDLし、インストしました。が、bcc32を認識
してくれないのです。
ttp://www.setsunan.ac.jp/~center/kyositu/freec/borland.html
一応自分でもできるとは思ったんですが、念には念を押してここのサイト様
のとおりにやってみたところ、認識してくれませんでした。
OSはXPです。環境変数もパスも間違ってはいない(と思ってる)のですが・・。
他に必要な情報あったらご指摘お願いします。早くC言語勉強したいよぅ
783デフォルトの名無しさん:04/06/23 21:52
> チームで開発するときも、それ言うんですか?

当然です。最初から「収拾つかない事態」になるようなまねをするやつは
チームで開発する資格ない。
まあ、おまえみたいなやつは、うちのチームいれないからいいが。
認識ってなんだ。エラーメッセージは?
785デフォルトの名無しさん:04/06/23 21:53
> 「俺の hoge.h は内部で a.h とプロジェクト共通の def.h を使ってる。

それがすでにだめ。
786デフォルトの名無しさん:04/06/23 21:54
>>760

"\0x1b [2J"

'\0', 'x', '1', 'b', ' ', '[', '2', 'J', '\0'

ちょと面白いね。
printfでは何も出力しないわけだね。

787デフォルトの名無しさん:04/06/23 21:56
低水準出力関数(openなど)と、高水準出力関数(fopenなど)は、
主にどのような違いがあり、どのような場面で使い分ければいいのでしょうか?
788デフォルトの名無しさん:04/06/23 21:56
>>784 あう 書き方が悪かったですね 申し訳ない
'bcc32'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはパッチ ファイルとして認識されていません。
って出るんです。ということは、Pathが問題なのかな?と思い、一応確認
してみたところ、ちゃんと書いてある通りにしてありますし・・・。
789デフォルトの名無しさん:04/06/23 21:59
>>782
「インスト」って、一般的には
「インストラクション」の略だよね。
インストカード、とか。
で、bccをインストしたの?
どうやって?
良スレの予感
791デフォルトの名無しさん:04/06/23 22:01
>>789
> 「インスト」って、一般的には
> 「インストラクション」の略だよね。

はつみみです。
×インスト
○インスコ
793デフォルトの名無しさん:04/06/23 22:01
うちのプロジェクトはコーダーだけで100人超です。
間接要員や管理要員もいれれば200人近くです。
うちのユニットはインクルードガードさせてません。(むしろ「しないように」ルール化)

ヘッダーファイルはべたに(1次に)*.cからだけインクルードされます。
依存関係があるものは、依存するものを先にインクルードすればよいだけです。
依存関係を書き出し(aはbとcに依存、bはdとeに依存...のように)、
それを『とぽろじかるそーと』するだけでinclude順は簡単に決まります。

以前、ひどいユニットのインクルード順をきめてあげようと、そこの
ソースのinclude依存関係をtsortコマンドに食わせたら「循環参照があります」エラー ...
すごい。
勝手にソース書き換えるのか。
すげー職場だな。
795デフォルトの名無しさん:04/06/23 22:04
>>787
使い分ける必要はない。
お前は標準ライブラリの方(高水準出力関数)だけを使え。
それとfopenのどこが出力関数だよ?
796デフォルトの名無しさん:04/06/23 22:04
そんなこんなで、うちのunitは、一番複雑な部分にもかかわらず,
バグ発生率は一番低く、同一拠点では、全員がちゃんと20:00前に帰れる唯一のunitです。
>>788
思いっきりパス通ってないよ。
とりあえず
c:\YourPath\bcc32.exe
とかフルパス指定で起動するかやってみたら。
それで成功したらシステムエディットボックスの内容メモ帳にコピペして間違いを探す。
798デフォルトの名無しさん:04/06/23 22:05
> scanf("%s",str);
> printf("%s",str);
> free(str);
> }
> 参考書のサンプルプログラムを

scanf....つかうなよぼけ。っていうかー
その前にまずその「参考書」の名前を言え!
本の名前を言えば、
おしえてやるよ!
799782:04/06/23 22:05
インストールはインスコと言うのですか・・・。成る程ひとつ勉強
させていただきました。インストールの事でございます。
ちなみに、うちのPCは兄貴と兼用で、兄貴はPerl?を勉強してる
のですが、それもコマンドプロンプト使いますよね?それとは
関係ないのかなーとか・・・。
800デフォルトの名無しさん:04/06/23 22:06
>>787
fopenは高水準でも低水準でもない。
ISOで規定された唯一のファイル処理系だ。

あなたの言う「低水準関数」とやらは、おそらく(故意に白々しい言い方)
その特定の実行環境で定義されているローカルなものだろう。

ISO規格で抽象化されている機能だけで足りることはfopen、
そうでない処理系独自の機能が必要なら「低水準関数」と
使い分ければよい。
>>788

DOSKEY BCC32="DEL *.*"
このコマンドを実行すれば使えるようになるよ。

>>796
ヘッダのインクルードごときでバグが出たり出なかったりというすごい
状態なら、一から設計しなおしたほうがいいと思う。
803デフォルトの名無しさん:04/06/23 22:07
>scanf....つかうなよぼけ。っていうかー

おまえが氏ね
804デフォルトの名無しさん:04/06/23 22:08
int main()
{
  int i;
  for (i = 0; i < 5; i++)
    printf("unko\n");
  printf("\x1b[2J");
  return 0;
}

こう書き直して、nnansi.sysでちゃんとうまくいったよ。

ようはちゃんと空白あけないからいけない!
805デフォルトの名無しさん:04/06/23 22:09
>>740
extern fanc();
806デフォルトの名無しさん:04/06/23 22:11
> ヘッダのインクルードごときでバグが出たり出なかったりという

なんてぼけなこと言うやつがバグいれるんだな。実際。
807デフォルトの名無しさん:04/06/23 22:12
>>803

やーい > scanf大好きぼけ
>>799
インスコール(Inscall)ですよ。
809デフォルトの名無しさん:04/06/23 22:13
いま、ちょうど、じょんすこのCDを聞いてます。
810デフォルトの名無しさん:04/06/23 22:14
>>807
おまえ頭おかしそうだな
関数に好きも嫌いもねえよ
仕様に着目して使えるときは使ってる
それだけだ
811デフォルトの名無しさん:04/06/23 22:15
> 関数に好きも嫌いもねえよ

とかいいつつscanfのことをいわれるといてもたってもいられない症候群では? ;)
「お、おれのscanfをばかにするな!」

依存症だね。
812デフォルトの名無しさん:04/06/23 22:16
「scanfを使うなって言うな!」
「それじゃあおれの使える関数2つのうち50%を否定されてしまい、おれの存在価値がなくなる!」
という心配であばれてるんでしょ? ;) > scanfを悪くいわれるとこまるやつ ;-)
>>811
状況を把握できずに、つねに原則論で動く傾向があるということは分かった。
814デフォルトの名無しさん:04/06/23 22:18
ぜんぜん脈絡がないセリフを貼り付けても無駄。
815デフォルトの名無しさん:04/06/23 22:19
>>813
いくら図星をいわれて反論ができないからといって、
「これを言えば反撃になる」と思い込んでいる万能のセリフをこぴぺしても意味ないよ!
816デフォルトの名無しさん:04/06/23 22:20
あ、先に言われてた...
で、なんでscanf使っちゃいけないの?
vfscanfもだめ?
とりあえず楽だからね。
別パーサ用意する必要ないし。
それで十分な状況ならいいんじゃないの?
819デフォルトの名無しさん:04/06/23 22:21
女性向きのCコンパイラーのおすすめを教えてください。
820デフォルトの名無しさん:04/06/23 22:21
> 別パーサ用意する必要ないし

っていうか、scanfのパーサー不便じゃろが!
sscanfのほうがちょっとはましだが、それでもやっぱりだめ。
821デフォルトの名無しさん:04/06/23 22:22
>>812
は? 誰か困ったのか??
おまえ本当にちょっと精神科で診てもらえ
>>820
だから「それで十分な状況」って書いてるじゃん。
常にscanf系使えと言ってるわけじゃないよ。
scanf使うなっていうやつはまあ普通
sscanf使うなっていうやつはアフォ
824デフォルトの名無しさん:04/06/23 22:26
>>823
アフォ自身の判断基準を教えてくれてありがとう
何の役にも立たんがw
>>823
なんで?
826782:04/06/23 22:27
ぬお!なんだか突然pcc32で起動しはじめました。
なんだかよう分からんのですけど・・・orz
とりあえず様子見してみます。ありがとうございまして。
827787:04/06/23 22:43
>>795
>>800
ありがとうございました。低水準入出力関数の間違いでした(汗。
入門書の場合、低水準入出力関数しか書いていない時があるのですけど、
やはり高水準入出力関数を使った方がいいのですね!
>>827
んなこたぁない
829デフォルトの名無しさん:04/06/23 22:46
>>827
>入門書の場合、低水準入出力関数しか書いていない時があるのですけど、

本当か? 釣りか?
低水準入出力関数しか書いてない入門書には
UNIXとかへんな名前がついていました。
VCの事もかいてないし、古くて役にたたないんでしょうか?
831デフォルトの名無しさん:04/06/23 22:53
釣りか
ばいばい
釣り確定しますた
>>830
今のあなたよりも価値はある本ですよ。
834787:04/06/23 22:53
えっと……椋田 みのる(←漢字がわからなかった)さんの「はじめてのC」を買って見たのですが、
明らかにコードが初心者向けじゃありませんよね?簡潔に書いてあり、
良書だとは思うのですけど、みなさんはどう思っているのでしょうか?
>>830
役に立たないですね。
836デフォルトの名無しさん:04/06/23 22:55
>>834
つまんね
本ではなくお前が
>>793
超ネタくさいなあ。
カプセル化の反対を地でいってるのね。

途中のヘッダファイルの変更で新たに依存が発生した場合
大量のモジュールをいじらなきゃならなくなるね。
工数計算は必要以上にでかくなり、また
そのコストを避けようとする力が働き、コードが硬直化しやすそうだ。
838デフォルトの名無しさん:04/06/23 23:00
>>837
>超ネタくさいなあ。

超禿同
839838:04/06/23 23:02
よって>>837の3行目以後(レスアンカも数える)もネタ臭い
つーか(・∀・)ジサクジエーン
840デフォルトの名無しさん:04/06/23 23:05
> 途中のヘッダファイルの変更で新たに依存が発生した場合

それがそもそもだめ
841デフォルトの名無しさん:04/06/23 23:06
さて、洗い物して風呂入って寝るとしようか
明日は大事な勝負の日
>>840
一度作ったものは改良もできないのか
843デフォルトの名無しさん
> 一度作ったものは改良もできないのか

改良する気があるなら、いじるファイルが何百なってでもやるべし。
そもそもそんなにあとでいじらなきゃいけなくなるってことは
設計ミスなわけだから。
逆に、あとでそれだけ変更がでるようなことを最初によく考えずに実装するのがぼけ
それをごまかすために、ヘッダーのなかでインクルードするんだったら ぼけ