OpenWatcom C++
■ このスレッドは過去ログ倉庫に格納されています
IDE やプロファイラまでついてくるフリー最強の C++ コンパイラ Watcom C++ について語りませう。 一応、こちらから入手できます。 難点はちょっと大きい事(45MB)です。 http://www.openwatcom.org/ Watcomerなら #pragma で埋め込んでください。 こうして #pragma pack(4) struct __m128 { float m128_f32[4]; }; こうやって extern "C" __m128 _mm_add_ps(__m128 &a, __m128 &b); こうやると #pragma aux _mm_add_ps = \ ".686 " \ ".XMM " \ "movaps xmm0,[eax] " \ "movaps xmm1,[edx]" \ "addps xmm0,xmm1" \ "movaps [esi],xmm0" \ parm [eax] [edx] …movapsでこけるな とりあえずmovups使うとして、アライメントの調整どうするんだ? #pragma pack(16) ってやったら通った けど微妙に気持ち悪いな unsigned char *p1 = malloc( sizeof(struct __m128) + 15); unsigned char *p2 = malloc( sizeof(struct __m128) + 15); struct __m128 *x1 = p1 & 0xfffffff0; struct __m128 *x2 = p2 & 0xfffffff0; _mm_add_ps( &x1,&x2 ); free( p1 ); free( p2 ); bad_allocクラスがあるんだから投げてくれてもいいのになあ C99にあるけど未実装の数学関数をfortranのライブラリから適当に持ってくる場当たりハック stringのoperator<<とoperator>>まだー? // wcl386 whattime.cpp #define FILE_NAME "whattime.txt" #include <fstream.h> #include <iomanip.h> #include <strstrea.h> #include <string.hpp> #include <time.h> int main() { ostrstream os; strstreambuf *b = os.rdbuf(); time_t timer = time(NULL); struct tm *p = localtime(&timer); os << " " << setfill('0') << setw(2) << p->tm_hour; os << ":" << setfill('0') << setw(2) << p->tm_min; os << ":" << setfill('0') << setw(2) << p->tm_sec << ends; String hours_minutes_seconds( os.str() ); b->freeze(0); ofstream file; file.open(FILE_NAME, ios::app); file << hours_minutes_seconds; file.close(); return 0; } /* whattime type whattime.txt */ C:\work>whattime C:\work>type whattime.txt 06:48:35 C:\work>whattime C:\work>type whattime.txt 06:48:35 06:48:56 C:\work>whattime C:\work>whattime C:\work>whattime C:\work>type whattime.txt 06:48:35 06:48:56 06:49:04 06:49:06 06:49:11 C:\work> みんな喜べ 色々用意ができれば今年の終わりに2.0出せるかもってよ ソースはニュースグループ Digital Mars C/C++ Compiler Version 8.56 がひっそりと出てる ttp://www.digitalmars.com/download/freecompiler.html いつの間にかDigital MarsのスレがDAT落ちしてる… 去年大量糞スレ立て荒らしがあった 例の件の証拠隠滅と思われ nanを比較してtrueが帰ってきてちょっとあせったけど そもそもC++98だとnanの比較が未定義だったぜ sgiのSTLの最新版がrope以外殆んどそのまま使えそうな予感 エラーでたところのtypename消してコンフィグいじったらコンパイル通った stlport 5.2.1 for dmc,Open Watcom ttp://www.6809.net/tenk/?%E9%9B%91%E8%A8%98%2f2013-05-20 /* wcl386 nonnum.cpp nonnum 5 nonnum - nonnum ^ */ #include <iostream.h> #include <string.hpp> int main(int argc, char *argv[]) { String line("0123456789"); const int line_length = line.length(); if(argc != 2) return 1; int b = line.index(argv[1]); // nonnum 5 if(b != NPOS) { cout << argv[1] << " can be found." << endl; } else { String non_number(argv[1]); if(non_number == "-") { b = line_length; } else { b = 0; } } String lead = line(0, b); String trail = line(b, line_length); cout << trail << endl; // "56789" return 0; } エディタでソースの日本語表示ってフォントを変えれば出来るんだな、つかフォントの変え方が独特すぎる #include <iostream> class StaticInteger { int data; int *pointer; public: StaticInteger(int *p, int d) { pointer = p; data = d; } int acquire() const { return data; } void revise(int *p, int d) { if(p == pointer) data = d; } } *static_integer; void function() { using namespace std; cout << static_integer->acquire() << endl; } static int static_int; int main(void) { StaticInteger si(&static_int, 2345); static_integer = &si; function(); static_integer->revise(&static_int, 8765); function(); return 0; } ファイル名 2.0 だけど正式releaseじゃなくてデイリービルドなのか? 少し試してみたけど1.9 とほとんど変わってなさそうだった。 ヘッダみるとインデントや名前の付け替えは多いけど肝心の修正は少なそうだし stubがへんな日本語になのだが、英語にする方法教えて 環境は Windows XPで、wcl Version 1.8 >これは an OS/2 16-bit 実行可能 です 見栄えがよくなったよ ありがとん >This is an OS/2 16-bit executable プロファイラのつかいかた 例でおしえてください おねがいします コマンドツールでもプロファイラつかえますか? わからんわからん >>767 ヘルプ見て分からないか? デバッグ情報付きでビルドして、サンプラにかけて出たファイルをプロファイラに渡すだけだろ 最適化はかけとけよ #include <iostream.h> #include <string.h> #include <string.hpp> void display(String & s) { cout << "length = " << s.length() << endl; int u = strcspn( s.c_str(), "0123456789"); // Error! cout << "u = " << u << endl; } // つづく int main(int argc, char *argv[]) { const int COUNT = 4096; String id("bcd10023"); int id_length = id.length(); switch(argc) { case 2: if(! strcmp(argv[1], "-e") ) { // Errorになるオプション String s = id(id_length, COUNT); display(s); } else { display(id); } break; default: display(id); break; } return 0; } C:\work>cspan length = 8 u = 3 C:\work>cspan -e length = 0 The instruction at 0x00401412 referenced memory at 0x00000000. The memory could not be read. C:\work>cspan -s length = 8 u = 3 > String s = id(id_length, COUNT); なにこれ C:\WATCOM\docs\cpplib.pdf にも書いてないけど 部分文字列です sub-sequenceは、posからはじまって、len個つづきます The sub-sequence begins at offset pos within the String object and continues for len characters. String::operator ()() Synopsis: #include <string.hpp> public: String String::operator ()( size_t pos, size_t len ) const; Semantics: This form of the operator () public member function extracts a sub-sequence of characters from the String object. A new String object is created that contains the sub-sequence of characters. The sub-sequence begins at offset pos within the String object and continues for len characters. The first character of a String object is at position zero. If pos is greater than or equal to the length of the String object, the result is empty. If len is such that pos + len exceeds the length of the object, the result is the sub-sequence of characters from the String object starting at offset pos and running to the end of the String object. Results: The operator () public member function returns a String object. See Also: String::operator [], operator char, operator char const * String Class 873 cpplib.pdf // substri.cpp #include <iostream.h> #include <string.hpp> int main(int argc, char *argv[]) { const int COUNT = 4096; String id("bcd10023"); int id_length = id.length(); String s = id(id_length, COUNT); cout << "s: length = " << s.length() << endl; cout << s << endl; int count = 3; int begin = 3; String g = id(begin, count); cout << "g: length = " << g.length() << endl; cout << g << endl; return 0; } /* C:\work>substri s: length = 0 g: length = 3 100 */ 追加されそうにないし暇つぶしに書いた 大体動く namespace std{ inline istream& operator>>(istream is, string& str) { if(!is.good())return is; str.erase(); string::size_type sz = is.width(); if(sz==0)sz=str.max_size(); std::cout << is.width() << std::endl; char c; is.get(c); for(string::size_type i=0; !isspace(c) && !is.eof() && (i < sz);i++){ str += c; is.get(c); } is.width(0); return is; }; inline ostream& operator<<(ostream os,const string str) { if(!os.good())return os; os.write(str.data(),str.size()); return os; }; } windows 7,64bitを使っているのですが, wclでコンパイルした実行ファイルは,64bitでは使えない というメッセージがでるのですが,wcl386でコンパイルする と実行できるのです。 wclとwcl386とではどう違うのでしょうか。 wcl は 16bit CPU 環境用の exe を生成。 wcl386 は 32bit CPU 環境用の exe 生成。 32bit windows は 16/32 bit(cpu) exe を実行できるけど、 64bit windows は 32/64bit exe のみで 16bit exeを実行できない。 ★2ch勢いランキングサイトリスト★ ◎ +ニュース ・ 2NN ・ 2chTimes ◎ +ニュース新着 ・ 2NN新着 ・ Headline BBY ◎ +ニュース他 ・ Desktop2ch ・ 記者別一覧 ◎ 全板 ・ 全板縦断勢いランキング ・ スレッドランキング総合ランキング ◎ 実況込み ・ 2勢 ・ READ2CH ・ i-ikioi ※ 要サイト名検索 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる