トップページ⇒tech
355コメント99KB

C/C++のこの機能逝ってよし

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん NGNG
 C/C++の滅多に使わん機能(標準ライブラリ含)を語るスレ
 個人的には広域ジャンプ使ったこと無し。
0305デフォルトの名無しさんNGNG
>>304
C99で標準になったYO!
0306名無しさん@Vim%ChaliceNGNG
Cは必要だから触るが、C++は絶対触りたくない。
virtualってのがわけわからん。
Delphiでも見かけたような気がするが、他の言語にはないよね?
M$が倒れる
↓
VC++も逝く
↓
Wisoでの仕事がなくなる
↓
C++のシェアがガタ落ちになる(予定)
↓
uma-
0307デフォルトの名無しさんNGNG
>>306
> Delphiでも見かけたような気がするが、他の言語にはないよね?
いいえ。っつか、むしろ他の OOPL だと virtual がデフォルト。
0308デフォルトの名無しさんNGNG
>>306
C++は必要じゃないのん?
VCが逝っても、C++のシェアがガタ落ちにはならんと思ふ。
もしVCが逝ってC++のシェアがガタ落ちなら Cのシェアも同様にガタ落ちでわ?
0309デフォルトの名無しさんNGNG
あきらめてC++勉強することにしたよ。
0310デフォルトの名無しさんNGNG
>>306
MSが潰れても、OOPにはCよりもC++のほうが便利だから
同じようなソフトがプラットフォームを変えて出現すると思われ。
0311デフォルトの名無しさんNGNG
C++が廃れても、Cは残るだろ。
組み込み系とかで。
0312デフォルトの名無しさんNGNG
>>311
それって,C が廃れてもアセンブラは残るだろ。組み込み系とかで。
って言っているのと同値。

fortran / cobol が,なんだかんだ言われても生き延びているように
C++ はそうかんたんには滅びなくなりました。
0313デフォルトの名無しさんNGNG
WindowsがC++で書かれている限りC++は無くならないよ
GCCも4が出る頃にはLinuxあたりもC++で書き直されている...わけないか(藁
0314デフォルトの名無しさんNGNG
>>276
> いわゆる「左くくり出し」だな。
(略)
> 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
>>313
とは言ってもkernel部分はCだし、UIというかCOMコンポーネント周りは
どんどんC# & CLRで置き換えられていきそうだし、すぐになくなる事は
ないにせよ、C++で書かれた部分は減っていきそうだな。
0316デフォルトの名無しさんNGNG
>>279
> lexだとこのif文の定義でwarningが2個出ますよね。

lexじゃなくて、yaccね。
shift/reduceがconflictうんぬんって。
0317デフォルトの名無しさんNGNG
>>315
LinuxじゃないんだからカーネルはCじゃないだろ。NTのマイクロ
カーネルはアセンブリだと思うけど。で、周りのサービスオブジェクト
がC++。ドライバもC++とインラインアセンブラ。

流れ的には、OS/サーバ/データベースみたいなハコ部分はC++、
ハコの中身はC#その他だね。CLRそれ自体も当然C++。
0318デフォルトの名無しさんNGNG
>>317
そーなの?
じゃWin32APIはCだけど、どういうこと?
0319デフォルトの名無しさんNGNG
>>318
WIN32APIがC++で書かれてたら
Cで使えなくならない?
0320デフォルトの名無しさんNGNG
>>318
APIがCだからどうだと? 意味がわからん。
0321320NGNG
>>319
>WIN32APIがC++で書かれてたら

これもかなり謎だが... 呼び出し規約とか分かってる?
0322318NGNG
いや、だから、
>>317の主張だと、Win32APIはアセンブラかC++のはずじゃない?
これって現状のことを言ってるんだよね?

C++をCでラッピングするってのは変だし、あのAPI群が全部アセンブラっ
てのもちょっと無理がある。だから、

>LinuxじゃないんだからカーネルはCじゃないだろ。NTのマイクロ

ってのは本当かなー、と思ったということ。
0323デフォルトの名無しさんNGNG
317のような知ったかがいるからネット上での情報収集は大変
0324デフォルトの名無しさんNGNG
315のような知ったかがいるからネット上での情報収集は簡単
0325失貴君NGNG
WindowsはPascalでかかれてますよ。ええ。一部はアセンブラですが。
0326デフォルトの名無しさんNGNG
闘うプログラマー読むと、NT kernelはCで書いてあるっぽいんだけど。
0327デフォルトの名無しさんNGNG
>>317, >>318
VBのマニュアルでさえ、外部リンケージの呼出し規約載ってるから読め!
$(GLIBC)/sysdeps/i386/sysdep.hで、system callどうやってるか見るとかさ。
0328デフォルトの名無しさんNGNG
>>326
まぁそれが順当だろうな。
0329デフォルトの名無しさんNGNG
>>319
>WIN32APIがC++で書かれてたら
>Cで使えなくならない?

実際に一部 C++ 的な部分もあるけど
IShellFolder とか IDropTarget とか、あのへん
えぇ、C から使えなくはないけど、大変に面倒でイヤです
C 使ってる人は諦めて C++ へ移行しませう
0330318NGNG
>>327
できるのは知ってる。
でも、すすんでやろうとは思わないでしょ、C++をCから呼ぶなんてのは。
それをやるメリットがないじゃん、ほとんど。
0331デフォルトの名無しさんNGNG
>>330 メリットが無くてもやらなきゃならん時がある。
0332デフォルトの名無しさんNGNG
WIN32APIはTurtleグラフィックスを実現する、LOGOで書かれています。
速度を見ればわかるでしょ?
0333デフォルトの名無しさんNGNG
>>326
NTの最初のバージョンはCだったかもしれんが、VC++6なんてツール
無かった時代の話だし、開発者の人数も(比較的)少なくてチームリーダの
意向がそのまま通った時代。ゲイツがC++を勧める以上、WindowsXPの
カーネルがC++になってない理由は無い。
0334デフォルトの名無しさんNGNG
カーネルをC++にするメリットがいまいちわからん。
0335デフォルトの名無しさんNGNG
基本機能が仮想関数になっているので、簡単に
変更できます。
0336デフォルトの名無しさんNGNG
ソース見たけどKernelのソースはファイル名が*.cになってるなぁ。

int strcmpW(const wchar_t *pwc1, const wchar_t *pwc2)
{
 int ret = 0;

 while ( !(ret = *pwc1 - *pwc2) && *pwc2)
  ++pwc1, ++pwc2;
 return ret;
}

こんなの発見。strcmpと違って返り値は-1,0,1じゃないんだね。
0337デフォルトの名無しさんNGNG
>>336
これってstrlen(pwc1) >= strlen(pwc2)の局面しか使わないのかね?
0338デフォルトの名無しさんNGNG
>>337
strlen(pwc1) < strlen(pwc2)
でも問題ないよ。
*pwc1=='\0' の時点で、(*pwc1 - *pwc2) !=0 になってループを抜けるから。
0339デフォルトの名無しさんNGNG
カーネルにはどうしてもアセンブラを使うところがでてくるとおもうけど、
アセンブラからC++呼ぶのは面倒じゃないのかな。
0340デフォルトの名無しさんNGNG
>>339
それは extern "C" とか使えばいいよ。
0341デフォルトの名無しさんNGNG
>>303
>そういう意味では std::string() に sprintf() ライクな書式指定つき文字列作成機能がなかったのが
>残念だ。MFC/WTL の CString にはあるんだけどね。

そういうときは、stringstream だね。激重だけど。 
0342336NGNG
>>339
アセンブラが必要なところは、ほとんどインラインアセンブラで済ましてるみたいだよ。
さすがに初期化コードは.asmだったが。
元々マルチプラットフォームなOSだから、アセンブラ自体あまり使ってないみたい。
0343デフォルトの名無しさんNGNG
>>336
strcmp って -1, 0, 1 だったか?
たしか strcmp も 負、0、正 だったと思うが、どうよ。
0344336NGNG
>>343
あ、そうだったっけ?
比較でVC++のcrtのソース見たら、わざわざ-1,0,1にしてたからそうなのかと思った。
たしかにヘルプみたら正、負としか書いてないや。
0345デフォルトの名無しさんNGNG
保全
0346デフォルトの名無しさんNGNG
a
0347 NGNG
goto
0348デフォルトの名無しさんNGNG
日下部陽一
0349デフォルトの名無しさんNGNG
機能かい!
0350デフォルトの名無しさんNGNG
保存あげ
0351デフォルトの名無しさんNGNG
strtok() コンテキストを識別できない。
知らないでネスティングして使ってると期待通りに動かない。
せめてハンドルとかでコンテキストを隔離できるようにしてほしい。
0352デフォルトの名無しさんNGNG
strtokは、scanfとならぶ
「一見便利そうだけど、つかうとドツボにはまる」
Cの罠関数、という罠。
0353デフォルトの名無しさんNGNG
>353
だけど、これらの罠関数に嵌って原因をちゃんと理解できたら半人前と判断できるよね?
でもシステム系のプロの多くは実装方法を教えても原因にはピンとこないらしい。
0354デフォルトの名無しさんNGNG
virtual継承はいらないと思う。ios以外に使用例はあるのか?
このあたりの解決は、Eiffelの仕様がうれしいのだが。
0355デフォルトの名無しさんNGNG
>>333
> カーネルがC++になってない理由は無い。
お前の妄想しか根拠はないのかよ
■ このスレッドは過去ログ倉庫に格納されています