C/C++のこの機能逝ってよし
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG個人的には広域ジャンプ使ったこと無し。
0232228じゃないが
NGNG(「積分の」という意味と無理やり混乱したいとでも??)
0233デフォルトの名無しさん
NGNG> どうでもいいが、本気で整数型を integral だと思ってる?
すまん、疑問形で投げかけられても、意味が分からん。明確に話してくれ。
”Integral type”ってのは、翻訳本だと、
論理型、文字型、整数型は整数系データ型: integral typeと総称され、
のことだ。Cの頃からの用語。
>>230
ああ、参照は組み込み型だっけ…(今、自宅なので規格書がない)
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNGintegerの読みはインティジャーです。
あなたはインテガーとか逝っていませんか?
0237デフォルトの名無しさん
NGNG超合金ロボみたいだ、インテガー
0238デフォルトの名無しさん
NGNG>ローカル関数なら、関数の中でクラスを宣言してstaticなクラス関数を書けば、
>それがローカル関数にならなくもない。in C++。こんなかんじ。
でも、その関数内クラスってテンプレートに使うとかーちゃんに怒られるんだ
よなぁ。言語仕様的にもダメなのかは知らんけど。STLマンセーな俺的にはちょ
っと不便。
下がってきたので保守age
0239デフォルトの名無しさん
NGNG俺もだ。VC++特有かな?
言語仕様かな?
むしろlambda classきぼーん。
gccには拡張構文であるんだっけ?
0240デフォルトの名無しさん
NGNGテンプレートの中身にはローカルな型は使えないぞゴルァ!って怒られるんだっけね。
0241名無しさん
NGNGおまえの
フレンドだ
0242デフォルトの名無しさん
NGNGお前の物は俺の物。
0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNGココ?>>247
0249デフォルトの名無しさん
NGNG||
Λ||Λ
( / ⌒ヽ
| | |
∪ / ノ
| ||
∪∪
0250デフォルトの名無しさん
NGNG馬鹿が気取ってマクロ書いたり、勝手な#if~#endif入れたり、
使いもしないヘッダを#includeするから、糞みたいに汚くなるし、
ちょっと改修でバグることバグること。
- no breakがデフォルトのcase分岐
普通はよく使うパタンをデフォルトにするだろ。
スルーするコードもありはするけど、大概、設計が甘いだけ。
0251デフォルトの名無しさん
NGNGせめて範囲指定が欲しい。
case 'A' to 'Z': みたいな感じ(この表記は問題あるが)
0252デフォルトの名無しさん
NGNG仮想関数オーバーライドするときに
名前間違えてもそのまま通ってあとで鬱。
0253遅レスですが
NGNG>>つまりLL(1)
118>一カ所だけかけない部分があります。考えてみそ。
ひょっとして、ラベル文(識別子 + ':')の所ですか?
識別子を先読みしただけでは、次にコロンが来てラベルの定義になるのか、
そうではなくて式の変数の参照になるのかわからないので、
さらにコロンがあるかどうか先読みする、という。
たしか、昔、elks(どうなったんでしょうか?)の開発環境に付いていた
ブルースエバンズ(著名な方のようですがスペルを忘れました)のCコンパイラ(再帰下降法)の
ソースを覗いてみたら、そういうふうになっていたような気が、、、。
違ってたらごめんなさい。
0254横槍
NGNGifがネストしていた場合elseがどのifに対応づけられるのか
LL(1)だと決定不能なんじゃなかったっけか?
で、特例ルールとしてelseは直近のifに対応づけられるってのが
付け加わっている と。
0255デフォルトの名無しさん
NGNGC じゃなくて Pascal 風だけど、直感的な構文規則の書き方
stmt -> IF expr THEN stmt | IF expr THEN stmt ELSE stmt | other
だと文法自体が曖昧になってしまう(とうぜん LL(1) でもない)。ただし、これを
曖昧でないように書き換えることは可能。で、それって、他の規則によっては
LL(1) で書けたんじゃないかなあ。
if - else に関しては、現実問題として構文規則を機械的に書き換えるより「最
近傍の if にくっつく」と文法を定義した方が構文規則を作るのもパーサーを作
るのも楽だから、そうしてるだけだったかと。
(間違ってたら指摘してくれ)
0256デフォルトの名無しさん
NGNG答えは?
0257デフォルトの名無しさん
NGNGJava だと「最近傍の else につく」という特例を使わず、構文規則の方で定義
してるね。おかげで StatementNoShortIf とか、よけいな非終端記号が増えて
て直感的に何言ってるのか分かりづらい。
0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNGtypenameとかexplicitとか見てると末期状態だよね。
C++で最も逝って良しなのは、その規格を完全に満たすコンパイラがこの世にまだ存在していない(らしい)ことかな。
0260デフォルトの名無しさん
NGNG俺は逆に static の使いまわしの方が鬱だ。キーワードは分けてくれた方が嬉しい。
0261デフォルトの名無しさん
NGNG0262Kusakabe Youichi
NGNG> 関数のstaticと変数のstaticは意味が全然違うしなぁ
どう違うのですか?
関数の外にある変数の場合で説明してください。
0263デフォルトの名無しさん
NGNGクラスメソッドの static に至っては、もう何がなんだか。
0264デフォルトの名無しさん
NGNGinfinity{
}
0265デフォルトの名無しさん
NGNGgcc の独自拡張だと
case 'a' ... 'z':
みたいな書き方ができるんだけどねぇ。
0266デフォルトの名無しさん
NGNG#define ever (;;)
for ever {
}
0267デフォルトの名無しさん
NGNGinfinity{
}
0268デフォルトの名無しさん
NGNGmugenruupu{
}
0269デフォルトの名無しさん
NGNG(1) ローカル変数に対して static を使うと
その関数を抜けても値が保持されたままの変数になる
(関数内からだけ参照できるグローバル変数みたいな感じ)
(2) グローバル変数および関数に static を使うと
そのファイル内からだけ参照できる変数になる
(3) クラスのメンバに対して static を使うと
いわゆるクラスメンバというやつになる
(インスタンス名.XXX じゃなくて、 クラス名::XXX で参照するやつ)
特にややこしいのが、
// aaa.h
class AAA
{
public:
static int a; // (3) の意味の static
};
// aaa.cpp
#include"aaa.h"
static int AAA::a = 0; // (2) の意味の static
//↑ こいつに static を付けると変なことになる
// クラスの public 変数なのに、aaa.cpp の内部でしか使えないから。
0270デフォルトの名無しさん
NGNGstatic が
- 変数/関数のスコープ(別の翻訳単位から参照できるか?)
- 変数の寿命(スコープを抜けると値が失われるのか?)
- インスタンスと関連付けられるか
と、全然違う意味を持ってるのがナニだよね。Java も static の多義性は
引き継いじゃったけど。
0271デフォルトの名無しさん
NGNG数年前に作ったプログラムのバグ(とは言えないか?)の秘密が今解けた(w
0272253
NGNGこれ以上は、スレ違いになるかもしれませんが、一応ほそくのつもりです。
bccのソースが手元にないので、記憶ですが、文の解析の部分はだいたい
次のようだったと思います。
>文の解析() {
> switch (現在のトークン) {
> case '{':
> 複合文の解析();
> break;
> (中略)
> case 識別子:
> 次のトークンを先読み();
> if (次のトークン == ':') {
> ラベル定義();
> goto RET;
> }
> 次のトークンを返却();
> /* No break */
> default:
> 式文の解析();
> }
> RET:
>}
トークンを1回読んだだけでは解析できないので、LL(1)にならないのは
この部分ではないかと、、、。
うーん、間違っているでしょうか?
0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNGJava の static って(2)の意味(変数の寿命)でも使えるんだっけ?
あと、確か static ブロックって構文があるんだよな。
C# なら、static は(3)の意味(クラス変数)でしか使えないんだけどねぇ。
スレ違いっぽくなってきたんで sage
0275デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNGいわゆる「左くくり出し」だな。
if文 := if ( expr ) stmt | if ( expr ) stmt else stmt
という構文規則を下記のように書き換えることによって
LL(1)で解析できる。
if文 := if ( expr ) stmt E
E := (空列) | else stmt
0277デフォルトの名無しさん
NGNGだれか解説せよ
0278デフォルトの名無しさん
NGNGたまに↓のような書き方になってるところがあって困るんだが。
aaa.h
#include "bbb.h"
bbb.h
#include "aaa.h"
まぁ、設計が甘いってのと、
#ifndef _AAA_H_
#define _AAA_H_
・
・
#endif
ってやればいいんだが。なんか美しくない気がする・・・
0279Kusakabe Youichi
NGNG> >>255
> いわゆる「左くくり出し」だな。
>
> if文 := if ( expr ) stmt | if ( expr ) stmt else stmt
lexだとこのif文の定義でwarningが2個出ますよね。
0280デフォルトの名無しさん
NGNGcaseの範囲指定できれば随分見た目がスッキリすると思うが。
それか、例えば↓な感じで1行にまとめて書ければなぁ。
case (1,3,5): // 1,3,5を個別指定
case 1-4: // 1から4までの範囲指定
0281デフォルトの名無しさん
NGNG_で始まる識別子は... グフッ
0282デフォルトの名無しさん
NGNGそれを許すと 'A'-'Z' のようなコードが多発して
EBCDICで逝くコードが続発しそうだ。
それはおいといて、今ので全然不自由してないんだけど
少数派か?
0283デフォルトの名無しさん
NGNGcase (1,3,5): くらいなら
case 1: case 3: case 5: と書いてもまあ悪くないと思う。
非常に多くの場合に同じ処理をすることはよくあるのだろうか?
0284デフォルトの名無しさん
NGNGうーん、どんなかたちであれ循環参照は避けた方が良いと思うから、
設計側で対処するべきだと思うけどなぁ
0285デフォルトの名無しさん
NGNG私も、
年に一回ぐらい「範囲指定できたらいいのに」と思う。
年に数回「お前のバグだろ、break ないぞ、ゴルァ」と怒る
ぐらいだ。nobreak がデフォルトになると、下らんデバッグの時間が減りそうだけど。
0286デフォルトの名無しさん
NGNG#define require(filename) \
#ifndef filename ## _provide \
#define filename ## _provide \
#include <filename> \
#endif
0287デフォルトの名無しさん
NGNGrequire(stdio.h)
require(stdio.h)
require(stdio.h)
require(stdio.h)
0288デフォルトの名無しさん
NGNGプリプロセッサ命令自体をマクロ展開できたっけ?
0289286
NGNG0290デフォルトの名無しさん
NGNGできればいいのにね。
まああの文法じゃ拡張しようがないけど。
; MASMのマクロは一貫性ゼロだけど便利だったなあ。
0291デフォルトの名無しさん
NGNGBorland C++ってオープンソースだったっけ?
0292デフォルトの名無しさん
NGNG272は253で
> ブルースエバンズ(著名な方のようですがスペルを忘れました)のCコンパイラ(再帰下降法)の
> ソースを覗いてみたら、そういうふうになっていたような気が、、、。
て書いてるから、bccてのはブルースエバンズ・C・コンパイラのことなんじゃないか?
0293デフォルトの名無しさん
NGNGBorland C++ のソースもがんばって探すと落ちてるよ。
0294291
NGNGマジすか?
冗談すよね?
ほんとだったら、ほしい!!
(見てどーすんだ、、、)
0295デフォルトの名無しさん
NGNG現MS の C# 作った人が Borland にいたときに書いた、TurboPascal の
コンパイラソースも出回っている。
アメリカには残っていないようだけど、ブラジルあたりのアングラサイトで見かけた気がする。
0297デフォルトの名無しさん
NGNGそれと、ほんとならどっかの掲示板にあぷしてくれ
0298
NGNGsprintfバンザイ!
0299デフォルトの名無しさん
NGNG単純なベンチプログラムでも作って確認してみるとわかる。
0300デフォルトの名無しさん
NGNGって、C++とは無関係だな。
0301デフォルトの名無しさん
NGNGgotoバンサイ!
0302デフォルトの名無しさん
NGNGstrcpyやstrcatもあんまりhot spotでは使わないからsprintfでもいいんじゃない?
バッファオーバーフロー対策ではsnprintfの使い勝手が(・∀・)イイ!!
0303デフォルトの名無しさん
NGNGそういう意味では std::string() に sprintf() ライクな書式指定つき文字列作成機能がなかったのが
残念だ。MFC/WTL の CString にはあるんだけどね。
0304デフォルトの名無しさん
NGNGsnprintfはANSI標準にないからな。
まあ作ればいいんだけど。
フォーマット書式文字列自体をコンパイルしてくれる仕様だったらいいんだが。
どうせほとんどfixed文字列使うんだから。
0305デフォルトの名無しさん
NGNGC99で標準になったYO!
0306名無しさん@Vim%Chalice
NGNGvirtualってのがわけわからん。
Delphiでも見かけたような気がするが、他の言語にはないよね?
M$が倒れる
↓
VC++も逝く
↓
Wisoでの仕事がなくなる
↓
C++のシェアがガタ落ちになる(予定)
↓
uma-
0307デフォルトの名無しさん
NGNG> Delphiでも見かけたような気がするが、他の言語にはないよね?
いいえ。っつか、むしろ他の OOPL だと virtual がデフォルト。
0308デフォルトの名無しさん
NGNGC++は必要じゃないのん?
VCが逝っても、C++のシェアがガタ落ちにはならんと思ふ。
もしVCが逝ってC++のシェアがガタ落ちなら Cのシェアも同様にガタ落ちでわ?
0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNGMSが潰れても、OOPにはCよりもC++のほうが便利だから
同じようなソフトがプラットフォームを変えて出現すると思われ。
0311デフォルトの名無しさん
NGNG組み込み系とかで。
0312デフォルトの名無しさん
NGNGそれって,C が廃れてもアセンブラは残るだろ。組み込み系とかで。
って言っているのと同値。
fortran / cobol が,なんだかんだ言われても生き延びているように
C++ はそうかんたんには滅びなくなりました。
0313デフォルトの名無しさん
NGNGGCCも4が出る頃にはLinuxあたりもC++で書き直されている...わけないか(藁
0314デフォルトの名無しさん
NGNG> いわゆる「左くくり出し」だな。
(略)
> if文 := if ( expr ) stmt E
> E := (空列) | else stmt
これじゃあ、if (expr) [[if (expr) stmt else stmt]],
if (expr) [[if (expr) stmt]] else stmtとどちらでも良くて、『曖昧な文法』のままじゃん。
文法、いわゆる形式言語の話と、
特定のparser generatorの(LL(1)に逸脱した)仕様の話を混同してない?
if (expr) stmt else stmt endif
にするしかないよ。こうしないと、LL(1)解析可能どころか、
『文脈自由言語族に属する曖昧でない文法』じゃないから。
実用上はどうでもいいから、「逝ってよし」とは思わないけど。
0315デフォルトの名無しさん
NGNGとは言ってもkernel部分はCだし、UIというかCOMコンポーネント周りは
どんどんC# & CLRで置き換えられていきそうだし、すぐになくなる事は
ないにせよ、C++で書かれた部分は減っていきそうだな。
0316デフォルトの名無しさん
NGNG> lexだとこのif文の定義でwarningが2個出ますよね。
lexじゃなくて、yaccね。
shift/reduceがconflictうんぬんって。
0317デフォルトの名無しさん
NGNGLinuxじゃないんだからカーネルはCじゃないだろ。NTのマイクロ
カーネルはアセンブリだと思うけど。で、周りのサービスオブジェクト
がC++。ドライバもC++とインラインアセンブラ。
流れ的には、OS/サーバ/データベースみたいなハコ部分はC++、
ハコの中身はC#その他だね。CLRそれ自体も当然C++。
0318デフォルトの名無しさん
NGNGそーなの?
じゃWin32APIはCだけど、どういうこと?
0319デフォルトの名無しさん
NGNGWIN32APIがC++で書かれてたら
Cで使えなくならない?
0320デフォルトの名無しさん
NGNGAPIがCだからどうだと? 意味がわからん。
0322318
NGNG>>317の主張だと、Win32APIはアセンブラかC++のはずじゃない?
これって現状のことを言ってるんだよね?
C++をCでラッピングするってのは変だし、あのAPI群が全部アセンブラっ
てのもちょっと無理がある。だから、
>LinuxじゃないんだからカーネルはCじゃないだろ。NTのマイクロ
ってのは本当かなー、と思ったということ。
0323デフォルトの名無しさん
NGNG0324デフォルトの名無しさん
NGNG0325失貴君
NGNG0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNGVBのマニュアルでさえ、外部リンケージの呼出し規約載ってるから読め!
$(GLIBC)/sysdeps/i386/sysdep.hで、system callどうやってるか見るとかさ。
0328デフォルトの名無しさん
NGNGまぁそれが順当だろうな。
0329デフォルトの名無しさん
NGNG>WIN32APIがC++で書かれてたら
>Cで使えなくならない?
実際に一部 C++ 的な部分もあるけど
IShellFolder とか IDropTarget とか、あのへん
えぇ、C から使えなくはないけど、大変に面倒でイヤです
C 使ってる人は諦めて C++ へ移行しませう
0331デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています