[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 01/29 10:31 / Filesize : 249 KB / Number-of Response : 964
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

はきだめC/C++下級者の質問箱 2



1 名前:デフォルトの名無しさん [2006/08/22(火) 09:21:31 ]
はきだめのスレへようこそ

ここは、C/C++に挫折し、それにもかかわらず、C/C++やらなければならない者達がたむろするスレです。
なお、質問する人は回答はあまり期待しないでください。


前スレ:はきだめC/C++下級者の質問箱
pc8.2ch.net/test/read.cgi/tech/1124256027/

809 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 16:41:17 ]
>>808
class内に置く方法もあるぞ。


810 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 17:02:09 ]
>>809
なるほど。
class Style
{
public:
enum _Style { None, A, B };
private:
_Style value;

public:
Style() : value(None) { }
Style(_Style value) : value(value) { }
Style(const Style &style) : value(style.value) { }

bool operator ==(const Style &style) { return value == style.value; }
bool operator !=(const Style &style) { return value != style.value; }
operator int() { return (int)value; }
};
みたいにすれば Java, C# の列挙型と同じように扱えるわけか。switch にも入るし。
しかも #define とかうまく使えばこれを毎回書かなくても使い回せそうだ。
すばらしい一言アドバイスをありがとう。

・・・もしかして常識ですか?

811 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 19:48:18 ]
残念ながら

812 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 00:40:33 ]
あの、>>808ってどこが非標準なんですか?
名前空間と列挙型が同一の名前を持っていることでしょうか。

813 名前:808 mailto:sage [2008/06/16(月) 00:05:50 ]
>>812
VC++ では

>コンパイラの警告 (レベル 1) C4482
>エラー メッセージ
>非標準の拡張機能が使用されています: enum 'enum' が限定名で使用されます

>型の中の列挙型を参照するときは、列挙型の名前を指定する必要はありません。

だと。(型名)::(列挙子名) とするのは非標準らしい。

よく考えたら

#define enum_class(Type) \
class Type\
{\
private :\
int value;\
public :\
Type() : value(0) { }\
Type(int value) : value(value) { }\
operator int() const { return value; }\
operator int &() { return value; }\
enum Tag;\
};\
enum Type::Tag

とかすればほとんど C# ライクな列挙型もどきができるな。
これも非標準だし、列挙型みたいにする意義も薄れてるが。

814 名前:デフォルトの名無しさん [2008/06/16(月) 22:51:16 ]
C/C++のばかたれっ!!

あー すっきり!!

もやっとボール 100000000個くれ!!


815 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:53:38 ]
>>813
それは >808 の namespace を使った例に対して Style::Style::None とした場合の警告じゃないか?
Style::None なら最初の Style は namespace 名だから、その警告には該当しないだろ。

816 名前:デフォルトの名無しさん [2008/06/17(火) 11:02:38 ]
すまぬがちょいと質問。

下記のような構造体の中に構造体の中に構造体が入ってるような形にしてるんだが、
矢印の所でエラーで止まるんだ。
ちなみに「struct FGroup *fGroup」は空のまま。(初期化も何もせず)
ほんまに原因不明なんだぜ・・・
デバッグ出来ない環境だから、エラーの原因は不明なのよおおお

// h
struct FGroup {
char strKey[40];
};
struct AInfoGroup {
struct FGroup* srcfn[10];
};
struct MatchingResultGroup {
struct AInfoGroup* aig[6];
};

// cpp
struct MResultGroup *res;
〜中略 resに色々格納〜
struct AInfoGroup *aiGroup = res->aig[0];
for(int j = 0; j < 9; j++) {
  struct FGroup *fGroup = (*aiGroup).srcfn[j];
  if((*fGroup).strKey != NULL) {
    char tmp[40];
    strcpy(tmp, (*fGroup).strKey);  ←ココでエラー
  }
}

817 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:08:24 ]
>>816
エラーメッセージぐらい貼れ。
人に原因を調べて欲しいならソースを略すな。

↓これ見ただけでポインタをよく理解していないというのがわかる。
> if((*fGroup).strKey != NULL) {
入門サイトをよく読みなおしたほうがいいかもしれない。



818 名前:デフォルトの名無しさん [2008/06/17(火) 11:18:02 ]
エラーメッセージですか。

MinGW Developer Studio にてソース作成して
VC++にてDLL連携してしているので下記のようにしか表示されません。。。

ハンドルされていない例外はACMatch.exe(MSVCRT.DLL)にあります: 0xC0000005: Access Violation。
例外処理 (初回) は ACMatch.exe (MSVCRT.DLL) にあります: 0xC0000005: Access Violation。
プログラム 'ACMatch.exe' はコード 0 (0x0) で終了しました。

>if((*fGroup).strKey != NULL) {
これは策がもうなくて、ものは試しにでやってみたのを削除し忘れていました。。。

819 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 11:22:13 ]
>>816
>デバッグ出来ない環境だから、エラーの原因は不明なのよおおお
それでプログラミングしようってのが無謀。

820 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:03:38 ]
中略部分を晒すつもりが無いなら、終了。

821 名前:816 [2008/06/17(火) 12:53:33 ]
>>819
無謀なのは承知です。printfにてエラー発生箇所は分かるのですが
原因を特定する為のデバッグのみが出来ない状況ですので
それで納得し、何とかやっております。

>>820
記述通り「struct FGroup」はヘッダでの宣言のみにて
中略部分ではstruct FGroupへの格納どころか、
struct FGroupの要素のstrKeyが一切記述されていなかったので中略していました。
それでも晒した方がよろしいでしょうか?

822 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 12:59:16 ]
>>821
相談したいなら晒したほうがいい。

でも、 strKey に値が設定されて無いなら strcpy でぶっ飛ぶのはあたりまえ。

823 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 13:02:48 ]
>>815
ごめん、確かに (名前空間名)::(列挙子名) は問題ないわ
どっかで Style::Style::None みたいなことしたから警告でたんだろうな
>>808 そのものは非標準ではありませんでした。
(>>813 の「列挙型の前方宣言」は非標準のはず)

824 名前:816 mailto:sage [2008/06/17(火) 13:07:13 ]
C言語はjavaのように自分で初期化しなくても
初期化されいてるとどこかで読んだ記憶があったので、
strcpyにて複写しても大丈夫かと思ってたのですが、、、駄目だったのですか?

825 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 13:11:13 ]
>>824
記憶があるのならどこで読んだか思い出して内容を確認してくれ。
たぶん間違いだから、 Web 上の記事なら晒して欲しい。

C言語で自動初期化(ゼロ初期化)が入るのは非ローカル変数かローカルで static な変数のみ。

826 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 13:36:19 ]
printf分でデバッグウィンドウに情報出力とか可能ですか?



827 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 13:49:18 ]
OutputDebugString関数



828 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 00:49:36 ]
>>816
MResultGroupってMatchingResultGroupのtypedefか?
resに色々格納って言ってるけど、MResultGroupのインスタンスはちゃんと確保されてるのか?
fGroup自体が0(NULLはC++では使わない方が良い)だったりしないか?
今回のエラーには関係ないけど、j < 9 は合ってるのか?j < 10じゃねーか?

829 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 12:44:12 ]
数分前まではちゃんと動いてたのに、
急にこんなエラーを吐き出しました。
開発ソフト:BCC Developer
状況:コンパイラもデバッカもライブラリも誤字脱字共に無い、
エラーの内容:
> C:\borland\bcc55\Bin\make.exe -fDebug\dxtest.mak -B TARGET
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -L..\DxLib -DDEBUG -nDebug -I..\DxLib -c C:\puroguram\dxtest\test.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
c:\puroguram\dxtest\test.cpp:
bcc32 -W -3 -Od -w- -AT -pc -H- -k -b -v -y -L..\DxLib -DDEBUG -eDebug\dxtest.exe Debug\test.obj
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Fatal: Could not open Debug\dxtest.exe (program still running?)
** error 1 ** deleting Debug\dxtest.exe
Build End !! (Elapsed time 0:07.578)

書いた物:
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
LoadGraphScreen( 0 , 0 , "char.png" , TRUE ) ;//画像を表示する関数
WaitKey() ;//何か入力があるまで待つ関数
DxLib_End() ;//終了処理をする関数
return 0 ;
}

830 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 12:52:11 ]
>>829
エラーメッセージをよく読め。アドバイスしてくれてるじゃないか。

831 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 13:19:50 ]
>>830
もう一度よく調べてくる

832 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 13:35:52 ]
program still running?
program still running?
program still running?
program still running?
program still running?

833 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 13:51:11 ]
program still running? 訳(プログラム・動かない・見出し)

って意味であってる?

834 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 13:53:05 ]
つまらん

835 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 14:02:45 ]
ちゃんと辞書を引こう

836 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 14:06:46 ]
program still running? (訳:あなたは気が付いていないけれど プログラムは静かに動き続けているだろう。 私にその健気なプログラムを殺してしまえというのか?)

837 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 17:27:22 ]
はい、もちろん幸福です、親愛なるコンピュータ。



838 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 17:51:51 ]
c++で

for(int n=0;n<1;n++)
func();
for(n=0;n<1;n++)
func();

みたいなfor()の括弧内での変数の宣言のスコープって括弧内とそのforループ内に限定されますよね。
これって昔のバージョンだとforのブロック内でも有効だったりしました?(下のforでも有効だった?)

839 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 18:09:24 ]
>>838
C++ の仕様決定以前に先走り実装されたコンパイラはそうなってたりする。
MS VC++ 6.0 とか。

840 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 18:13:03 ]
C++でC#同様にインテリセンスを働かせる方法ってないですか?
いちいちALT→押すのが面倒です。

841 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 19:44:33 ]
何を使ってるかわからんもん

842 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 20:20:19 ]
プリコンパイル済みヘッダを複数指定することは出来ますか?

843 名前:デフォルトの名無しさん [2008/07/16(水) 15:14:24 ]
#ifdef XXX


#endif
で囲まれた部分がコンパイルされたかをコンパイル時に簡単に知る方法を教えてください


844 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 15:15:06 ]
>>843
#ifdefと#endifの間に#errorと書く

845 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 15:23:22 ]
>>843
XXX_defined とか XXX_undefined ってグローバル変数を定義しておいて
オブジェクの中に該当シンボルが存在するか否かを調べる
もしくは
コンパイラにアセンブラソース吐かして眺めてみる
もしくは
出来上がったオブジェクトファイルの逆アセンブルリストを眺める


846 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 15:24:08 ]
>>845 すまんコンパイル時っての見てなかった。忘れてくれ


847 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 07:56:37 ]
#errorだとそこでコンパイルが終了してしまうかも。
実害のない警告が出るようにしておけばいい。たとえば
#ifdef XXX
#define XXX_DEFINED 0
#define XXX_DEFINED 1
...
#endif



848 名前:デフォルトの名無しさん mailto:sage [2008/07/18(金) 08:45:39 ]
うわー、意味ねーw

849 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 16:42:29 ]
std::tr1::unordered_mapを使わないといけないんですが現在の環境(gcc3)には入っていません。
これはどのライブラリに入っていますか?

850 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 16:49:10 ]
>>849
STLport かな?

851 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 17:27:51 ]
>>850
STLportにありました。ありがとうございます。

852 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 17:30:06 ]
>>849
std::map じゃなくて unordered_map を「使わないといけない」状況って、どんなの?

853 名前:デフォルトの名無しさん mailto:sage [2008/07/20(日) 17:47:57 ]
>>852
ビルドしようとしたソフトがunordered_mapを使っていたからですよ。

854 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 18:42:45 ]
vc++のデバッグの仕方が分からないんだけど
c#のconsole.writelineみたいにvcのデバッガに出力する方法ってないの?
outputdebugstring()とかやっても出てこないんだけど。

855 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 20:52:35 ]
>>854
出てるよ、見てるとこが違うだけだ

856 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 08:24:23 ]
>>854
MFCを使ってるならTRACEマクロ
ATLを使ってるならATLTRACEマクロ
WIN32APIだけならOutputDebugStringをじかに使う。
C++・CLIならC#と同じのが使える。

857 名前:デフォルトの名無しさん [2008/07/24(木) 17:21:59 ]
最近勉強始めた初心者です。すっげー初歩の質問で悪いんですけど、
関数の宣言のとこで、引き値とか戻り値とかそれ自体の説明は
分かるんですけど、その使い分けの所がいまいちピンとこなくて。

例えばint main(void)とintとかその辺自体は分かるんですけど、
返り値が無いならvoidとかの説明で、じゃあなんで
このときはvoid使わないんだとか、自分が一からプログラム組むと仮定して考えた場合、
その辺の区分けと言うか、使い分けが明瞭に納得がいかなくて。
いろんな解説読み漁ったんですけど、はっきり分かんなくて。



858 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 17:57:48 ]
>>857
引数は渡すもの、戻り値は返すもの。
渡すパラメータがなければ引数はvoid、返す結果がなければ戻り値はvoid、両方何もなければ両方void。

自分で1からプログラムを組む場合、関数がどのようなパラメータを取ってどのような結果を返すかは、自分の都合と独断と偏見で勝手に決める。
例えば・・・ファイルに文字列を書き込む関数を作ることにしたとすると、その関数にはたぶんファイル名と書き込む文字列を指定する必要があるだろう。
ファイル名が固定なら、書き込む文字列だけ指定すればいいかもしれない。
結果は特に何も要らないかもしれないし、書き込みに成功したか失敗したか知りたいかもしれない。
それは自分が (別の人が使う関数なら、その人が) どういった機能を必要としているかによって決める。

フルバージョンならたぶんこんな感じ
int write_text_to_file(const char *filename, const char *text);
成功/失敗といった結果は別に要らないと思ったなら、戻り値はvoidにして
void write_text_to_file(const char *filename, const char *text);
ファイル名は固定なので特に指定する必要はないと考えるなら、その部分は削って
void write_text_to_file(const char *text);
実は文字列も固定なんだ、って場合は、何も指定するものがないので
void write_text_to_file(void);

859 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 01:22:48 ]
自分は引数voidの関数は滅多に作らないな。
グローバル変数使えば引数で渡さなくてもいいけど、
何をする関数なのかわかりにくくなるし。

860 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 02:23:01 ]
渡す情報が要らないからvoidなんですよ。

861 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 08:54:19 ]
そうそう、time()なんて愚の骨頂ですよ。

862 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 09:38:10 ]
渡すものがなかったら、かわいい君に寄せる想いを僕調の曲にして渡せばいいじゃない。


863 名前:デフォルトの名無しさん mailto:sage [2008/07/26(土) 11:15:13 ]
>>862
華麗にスルーされる訳ですね。わかります。

864 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 12:19:58 ]
cin を使った入力ってメモリからあふれる位いっぱい入力した場合
バッファアンダーランとかになったりするの?

865 名前:デフォルトの名無しさん mailto:sage [2008/07/28(月) 12:47:37 ]
なりません。そもそも、バッファアンダーランなんて現象自体、データストレージに関するものです。

866 名前:デフォルトの名無しさん [2008/08/03(日) 13:30:11 ]
Access Violationが出ているのですが、
 これはそのプロセスが確保していないメモリ空間から読み込もうと
したときに出るのですが?

867 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 13:38:36 ]
確保してない領域に書き込もうとしたときも出るし
確保されてても読み取り専用領域に書き込もうとしたときも出る



868 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 17:05:21 ]
>>866
そんなもん、環境によって違います。そもそも出ない環境だってたくさんあります。

869 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 17:07:36 ]
いつのまにかスタック領域がプログラムやデータを侵蝕して暴走を引き起こしていたあの頃を思い出します。
comファイルって、プログラムと同一セグメント内にスタック領域を確保するから、
プログラムとデータが大きいとすぐに侵蝕しちゃうんだよね。

870 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 10:51:08 ]
gccを使いたいんだけど、どれをインストールすればいいの?
日本語バージョンてないの?

871 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 10:58:38 ]
>>870
Linuxならデフォルトで入ってる
WindowsならMinGWをインストールする
Macなら知らない

872 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 10:59:39 ]
BSD/Solarisなどの*nix系なら標準で入ってる可能性が高い。

873 名前:870 mailto:sage [2008/08/04(月) 11:04:59 ]
レスどうもです。
OSを書き忘れてましたが、WinXPです。
GCCにはいろいろ亜種があるということかな?
どれが標準てこともないの?

874 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 11:13:40 ]
>>873
MinGWはあくまでgccを簡単にインストールするためのパッケージ。
gccであることに変わりはない。
gccのバージョン違いはたくさんあるね。3.4とか4.1とか。

875 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 11:18:14 ]
>>873
擬似Unix環境ごとインストールするならcygwinという選択もある。

876 名前:870 mailto:sage [2008/08/04(月) 11:38:46 ]
重ね重ね、どうもです。
MSYSなるものもありますね。
プログラミング目的ならMinGWとMSYSでいいのかな。

877 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 11:50:12 ]
これでMinGWとMSYSで作るものが単純なテキスト処理だったり数値処理だったりしたら大笑いだな。



878 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 13:13:21 ]
MSYSって日本語表示できないんだけど、どうにかならない?

879 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 16:36:01 ]
rxvt の引数を変えて、日本語フォントにすればいいのでは

880 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 20:48:53 ]
>>879
さんくす、やってみるよ。

881 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 21:21:24 ]
経過報告
MSゴシックだとうまく表示されなかった。
ぐぐってみてTerminal-14にしてみたけど、やっぱりうまく表示されなかた。

試したコマンド: ls /c/winnt
MSYS 1.0.10
rxvt 2.7.2

export LANG=ja_JP.Shift_jis とかやってもダメだった。
どうも根本的に何かを間違えてるのかなあ。
ま、いっか。

882 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 22:27:35 ]
>>881
-fn "MS ゴシック"-12

ls --show-control-chars /c/winnt

確認したら、LF改行コードのファイル~/.profile に
alias ls='ls --show-control-chars' を追加しておく

883 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 12:56:29 ]
>>882
ありがとう。
でも、俺の環境じゃ
ls --show-control-chars /c/winnt だと半角カナ混じりで化けた。

こんな具合いに: "ほげほげ.txt" → "・ル・ー・・ル・ー・.txt"

御協力感謝。


884 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 01:47:00 ]
rxvt使わないで、コマンドプロンプト上でmsys使うと良いよ。
cygtermみたいなのがmsysにあるともっといいんだけど。

885 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 02:30:38 ]
OS:Windows、コンパイラー:VC2005です。
CPUのクロック数を変化させる、もっとも簡単なコードを教えてください。

886 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:18:33 ]
int main(void){ while(1) {} }

対応CPUならこれでクロック上がる

887 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 00:59:32 ]
>>886
そうか、その手があったか!



888 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 09:27:45 ]
感動した

889 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 09:33:46 ]
クロックが上がるっつーか、CPUが音を上げそうだな。

890 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 12:49:00 ]
最近のだとスレッドで何本かまわさないとね

891 名前:デフォルトの名無しさん mailto:sage [2008/08/08(金) 12:53:51 ]
最近のは他のコアが休んでるときはクロックあがるんだぜ

892 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 00:58:43 ]
なるほど!コロンブスのたまごですね。
クロックダウンのコード聞いたのですが・・・

893 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 03:01:06 ]
#include <stdio.h>
void main(void) { char i[256]; FILE* fp=fopen("C:\con\con","rb"); fread(&i, 1, 256, fp); fclose(fp); }

対応OSならこれでクロック下がる

894 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 21:27:50 ]
C++で
char* を バイト配列に変換するにはどうすればよいのでしょうか。
ちなみにchar*の中身は日本語文字列です。

895 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 21:44:54 ]
char*の中身はすでにバイト配列です
変換する必要はありません

896 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 22:46:39 ]
>>895
char配列とbyte配列はちがうような、、、

897 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 22:52:54 ]
charは1バイトの整数
charの配列は1バイト整数の配列すなわちバイト配列
何が違うというのか



898 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 22:54:40 ]
byteなんて型はないから
大概charをtypedefしたものなんじゃない?

899 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 23:12:14 ]
一応言っておくが、もしC#やJavaからやってきたというのなら、
それらの言語のcharに相当するC++の型はwchar_tだ。
wchar_t配列と(それらの言語でのバイト配列に相当する)char配列との変換には
mbstowcs, wcstombs関数がまあまあ手軽に使える。
もちろんwchar_tの入出力で間に変換が噛まされるのはC++でも同じだ。

900 名前:デフォルトの名無しさん [2008/08/13(水) 23:56:04 ]
C言語のマクロについて質問です、詳しい方助言ください。

__mulk(4) と記述することで、
"movl 4(%ebx),%eax \n"
という文字列( " "も含む)を吐き出すマクロを作りたいのですが、
次のように考えた結果これはうまくいきませんでした。

#define LTR(STR) #STR
#define COMMA ,

#define __mulk(A) LTR(movl A ## (%ebx) ## COMMA ## %%eax \n)

カンマをそのまま書いてしまうとマクロ__mulkが2つの引数を持っていると解釈されてしまうようです。

この回避方法はあるのでしょうか?環境はLinux,gcc 4.3.1です。

901 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 00:10:54 ]
#define __mulk(A) "movl " #A "(%ebx),%eax \n"

902 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 01:19:16 ]
>>901
なるほど・・・すばらしい。
どうもありがとうございました。

903 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 11:49:38 ]
プログラム実行時に引数を何も入力しなかった場合に、デフォルト引数を使いたいのですが、
どうもnullが入ってしまっていて、デフォルト引数が使えません。

どうすれば、デフォルト引数を使えるようになるか、教えていただけませんでしょうか。。。

int main (int argc,char *argv[])
{

  abc(argv[1]);
・・・・・


void abc(char *str = "STRING")
{

・・・

904 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 11:59:59 ]
>>903
これではだめ?
if (argc >= 2)
  abc(argv[1]);
else
  abc();


905 名前:903 mailto:sage [2008/08/14(木) 12:07:56 ]
>>904

早速の回答ありがとうございます。
すいません。書くのを忘れてました。。。
main文は他の誰かが書くとかで、できたら関数(abc)の中で処理したいのですがいい方法ありませんでしょうか。

906 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 12:15:52 ]
void abc(char *str)
{
if (str == NULL) str = "STRING";
...
}

907 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 12:17:48 ]
デフォルト引数にこだわる意味がわからん



908 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 12:26:00 ]
標準C/C++に準拠したコンパイラなら argv[argc] == NULL だから>>906で大丈夫だな

909 名前:903 mailto:sage [2008/08/14(木) 13:05:15 ]
>>906,908

無事できました!ありがとうございます。

>>907

C++のデフォルト引数が便利そうだったので、使ってみたかっただけでした。。。すいません


910 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 13:09:08 ]
デフォルト引数は、NULLのとき代わりに、という意味ではないよ
引数を渡さなかったときに使われるもの
argv[1]を渡せばargv[1]が渡る

911 名前:903 mailto:sage [2008/08/14(木) 13:12:19 ]
なるほど、、そういう意味だったのですね
いろいろとありがとうございました。

912 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 15:09:44 ]
コンストラクタやコピーコンストラクタでメモリの確保に失敗したら
どうすればいいですか?例外をなげたほうがいいのか、
成功か失敗のフラグをクラス内部でもつのか、作成及び複製専用の
関数を用意したほうがいいのかよくわかりません。
できれば、コンストラクタで失敗したならそのインスタンスは無効であることを
戻り値で返せればいいんですが無理ですよね。

913 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 15:44:26 ]
自分で投げなくてもnewに失敗したら勝手にstd::bad_alloc投げると思うけど

914 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 16:34:20 ]
unicodeって文字コード統一する目的で作られたんでしょ?
なんでいくつも形式が存在するの?

915 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 16:36:32 ]
>>914
1文字に4バイトも食うからそりゃ敬遠するでしょ

916 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 16:40:55 ]
>>914
キャラクタセットとエンコーディングは区別しろよ

917 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 17:37:50 ]
UnicodeとUTF-8の違いは?
pc11.2ch.net/test/read.cgi/tech/1177930957/



918 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 02:44:25 ]
if(A&&B&&C){...}

if(A){
 if(B){
  if(C){...}
 }
}

これだったらどっちが高速なのですか?

919 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 02:47:05 ]
なんでそんなに高速性を気にする?

920 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 02:48:39 ]
完全に興味本位です。


921 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 02:59:55 ]
>>918
生成されるコードを見るしかない。
コンパイラによって違うかもしれない。

だが多分ショートサーキットを考慮すれば同じコードを吐くだろう。

922 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 03:11:44 ]
なるほど。
ありがとうございます。非常に勉強になりました。

923 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 08:19:33 ]
コンテナに入れたデータを一定の時間間隔で処理するために
コールバッククラスのインスタンスでイテレータを保持するようにしたんだけど、
これってどう思う?

for (Hoge::iterator i = hoge.begin(); i != hoge.end(); ++i)
みたいな、その場のループで使い捨てする用途しか今まで見たことがなくて、ちょっと不安。

要素が増えも減りもしないことが分かっている場合は、ポインタと同じ感覚でいいのかな?

924 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 09:20:29 ]
>>923
どういうときにイテレータが無効になるかをきちんと把握して、
(ちなみにこれはコンテナの種類によって異なる)
自分も他人もそういうコードを書かないという確信があるならそれでいいんじゃない?

普通にコンテナのポインタなり参照なりを保持させればいいと思うけど、
それじゃ無理なわけ?

925 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 19:49:44 ]
>>924
コンテナの要素をどこまで処理したか覚えておきたいんだ。
wavのストリーム再生をイメージしてもらえれば近いかな。
コンテナのポインタなり参照なりを保持するとして、どうすればいいのか分からないです。

926 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 20:47:48 ]
>>925
コンテナの中身が書き換わらないならイテレータは無効にならない

927 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 01:09:12 ]
>>926
じゃぁ今回はイテレータ保持のままでいいか。どうもありがとう。
もっと色んなソース読んでみないとなぁ。自分のしていることが一般的なのか分からなくて不安。



928 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:02:11 ]
Cのif文について質問です

if(a>0xffffffff){ 命令; }

とするとコンパイラが 条件が常に真 と警告を吐きますが
普通に動作します

また  -1(0xffffffff) を -2(0xfffffffe) に変えるとその警告は無くなります

変数 a はunsigned int型です

なぜこの警告は出るのでしょうか。

929 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:42:01 ]
>>928 条件が常に真だからだよ。

930 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:49:46 ]
>>929
でも普通にその条件式が動作するのは何でなんだぜ?

931 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:54:36 ]
>>930
常に真だから

932 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:54:52 ]
>>930
条件式の結果が真であることは誤動作じゃないだろ。

933 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:54:53 ]
>>1読まなかった俺を許してくれ

934 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:56:45 ]
常に偽という気がする。
>>928
おまえんとこのunsigned intの範囲が0から0xffffffffなんだろう。
a>0xffffffffという条件はaがどんな値でも成り立たない。
だからのその命令;は絶対に実行されない。
だったら初めからifなんて書くなよ無駄だからというのがその警告だ。

0xfffffffeにすると、aが0xffffffffの場合だけそこが実行されるという
意味のあるif文が出来上がるので、警告にならない。

あと、0xffffffffは-1ではない、4294967295だ。0xfffffffeも同様に4294967294。

935 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 01:58:41 ]
>>934
ガチですまん
俺ホント馬鹿
吊ってくる

936 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 02:03:01 ]
無駄だからというより、なんか間違っていないかって注意を促す意味合いのほうがおっきい気がしてきた。

937 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 02:22:25 ]
>>934
ばーか。コンパイラが「常に真」と言ってるんだよ。なにが「常に偽という気がする」だよ。



938 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 02:28:18 ]
>>937
いやだってa>0xffffffffが常に偽になる場合は容易に思い付いたけど、
常に真になる状態は考え付かなかったから。
常に真でも偽でも同じメッセージを使い回しているだけだろうと思うことにした。

939 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 02:33:03 ]
sizeof(unsigned int)よりもsizeof(unsigned long int)の方が大きい環境なら、常に真になるんだけどね。

940 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 03:03:50 ]
なかなか面白いジョークだな

941 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 04:21:35 ]
>>928 とりあえずコンパイラとバージョン教えて。試してみたいから。

942 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 07:40:50 ]
フォントが小さいので 常に夏 に見えて仕方ない
イヤなスレだなぁ・・・と思ったらイヤなのは俺だった

943 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 16:17:34 ]
VCなんですが、例外処理 (初回) は test2.exe にあります:
0xC0000005: Access Violation。とでます。
ループの回数を減らせば通るのですが、ループ数を減らさずに
実行するにはどうすればよいでしょうか?
iのループは60、jのループは1500程度です。

for(i=0; i < font->Tnum; i++){
// 1ブロックのフォント収録数
fontnum = font->Block[i].End - font->Block[i].Start;
fputs("const char data[] = {\r\n\t", fp);
for(j = 0; j < fontnum * 24; j++){ // 1ブロックのフォント分繰り返す */
dt = *p++;
fputs("0x", fp);
sprintf(tmp, "%02x", dt);
tmp[2] = 0;
fputs(tmp, fp);
fputs(", ", fp);
ct++;
if(ct == 8){ // 改行
fputs("\r\n\t", fp);
ct = 0;
}
}
fputs("}\r\n\t", fp);
}

944 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 16:58:13 ]
>>943
デバッグすればいいよ・・・・・・・・・・・・・・・・・・

945 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 22:30:00 ]
ソース生成しているのか。くだらんなぁ。それはさておき、こりゃ酷い。
--
fputs("0x", fp);
sprintf(tmp, "%02x", dt);
tmp[2] = 0;
fputs(tmp, fp);
fputs(", ", fp);
--
fprintf(fp, "0x%02x, ", dt)で事が足りるだろうに。処で、tmpはどう宣言されているんだ?

946 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 13:01:48 ]
c++使ってるといちいち型変換がめんどくさいんだけど
一番簡単な方法はboostの変換ライブラリ使う事?
他にいい方法があれば教えてください。

947 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 14:53:32 ]
sendmessageでwm_copydataが送れないんですけど、
何かプロジェクトの設定とかが必要だったりします?
他のメッセージは送れるんですがこれはデータのコピーとかやってるのでその辺でこけてるのかなあと。



948 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 15:25:26 ]
GetLastErrorで原因調べた?

949 名前:947 mailto:sage [2008/08/29(金) 15:25:28 ]
sendmessageなのにスレッドループで捕まえようとしてました
解決しました


950 名前:デフォルトの名無しさん [2008/08/30(土) 07:51:33 ]
オブジェクトのメソッドの呼び出し規約ってどうなるんですか?


951 名前:デフォルトの名無しさん [2008/08/31(日) 12:07:46 ]
>>950
とりあえずぐぐろう

952 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 12:18:42 ]
>>945
>>943ほどの低レベルなコードを書く奴ならどうせchar*tmp;と宣言していると予想

953 名前:デフォルトの名無しさん [2008/09/01(月) 08:01:13 ]
printfなどでの書式指定で、たとえば0.123の場合、
最初の0をつけずに、.123の様になるようにするには
どのように指定したらよいのでしょうか

954 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 08:41:46 ]
"%.3f"

955 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 10:23:10 ]
文字列を入力するときの例は、配列を使うものしか見たこと無いのですが、 
文字列を入力する場合は、常に配列を使わなければならないのでしょうか。 

たとえば、宣言は、 char st[100]; とかの例を見たりしますが、 
char st; だけじゃ不都合があるのでしょうか。文字が一文字しか入らないとか。。。 
 


956 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 11:15:33 ]
文字列 = 文字の配列
と思えばとりあえずなんとかなる

957 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 11:53:00 ]
>>955
Cには文字列形がないので、文字型の配列などに格納する必要がある。
文字型変数であるchar stには、当然ながら一文字しか入らない。



958 名前:デフォルトの名無しさん [2008/09/01(月) 21:53:28 ]
どなたかこの低脳野郎に知恵を授けてください・・・。実はいまC言語を学んでいるのですが
C言語はソフト開発が出来るのでしょうか?(窓の杜にあるようなやつ)
回答お願いします。

959 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 21:57:30 ]
低脳にもほどがある

960 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 22:11:12 ]
>>958
アインシュタインは紙と鉛筆で相対性理論を完成させたかもしれないが、俺にはできない。
たしかに偉大な先人達はCで作ったソフトを窓の杜に投稿したかもしれないが、
その軌跡を今の私たちが無理してなぞる必要は無いと思わないか。

ということで、もっと楽ちんな言語使おうぜ。
C++とか。

961 名前:デフォルトの名無しさん [2008/09/01(月) 22:48:25 ]
>>960
ありがとうございます。偉大な人とはいえ結局は人ですからがんばって見ます。


962 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 23:27:03 ]
がんばって何を見るというのだろう……

963 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 23:52:14 ]
そりゃあ、おい、青少年ががんばって見るといえばアレしかないだろ。
まぁ俺からのアドバイスとしては薄目にしても効果はないということだ。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<249KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef