プロが教えるわが家の防犯対策術!

一昔前のC言語では、#include <stdio.h>などのものを、C ++言語では、#include <iostream>の1行で済ませるということでしょうか?だけど、C + +言語で、#include<stdio.h>を使いたければ使うことは出来ますよ。だけど、#include<iostream>だけで、済みますよ。という事でしょうか?つまり、#include<iostream>は、全ストリームつまり、全ファイル・全ライブラリを1つにまとめたという事でしょうか?教えて頂けると幸いです。

質問者からの補足コメント

  • チャットGPTに聞きました。
    C++言語において、#include <iostream>はC言語の#include <stdio.h>に似た機能を果たしますが、直接的な一対一の比較ではありません。#include <iostream>はC++の標準入出力ライブラリであり、std::coutやstd::cinなどを含む機能を提供します。

    一方で、#include <stdio.h>はC言語の標準入出力ヘッダであり、C++でも使用可能ですが、C++の標準ライブラリである<iostream>が提供する機能とは異なります。

    簡潔に言えば、#include <iostream>は標準的なC++の入出力機能をまとめて提供しているもので、全てのファイルやライブラリを含んでいるわけではありません。
    という事であっているのでしょうか?後、C言語とC++では、標準入出力が異なるよ。ということでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/11/19 19:50

A 回答 (1件)

そういう解釈では正確では無いでしょう。

別物を用意したので古い方は避けて欲しいという話に近いと思いますよ。

以下は長いのでお暇なときにでもどうぞ。

stdioと言う発想はC言語が登場したときの「売り」であり、多くの開発者が感心しました。それくらい画面表示などのデバイス操作は(アセンブリ言語では)面倒臭かったんです。printfを使いたいがためにC言語を採用したという技術者も多かったんですよ(私もその一人)。

コンパイラ言語(他の言語も)の場合は「仕様通りの動作」をすれば良いとされており、それらを提供するメーカーがどの様に内部を作っても良いとされています。しかし「気の利いた提供者」の場合は「こういう事も出来る」等工夫をしてしまうんです。例えばOSと連携して「便利な使い方」が出来るものもあります。標準出力先をファイルや音声デバイスにしたり、別のアプリの入力にしたり出来るんです(unix,linux等はその思想を貫いている)。

その点で差が生まれてしまいますと「便利な使い方」を前提にしているアプリやシステムなども出てきてしまい「互換性」が無くなるという本末転倒が起きてしまいます。

ライブラリ(処理系依存)のプラスの要素を活用したシステムは他に移植が出来ないですよね。これらはやはり作り直しになってしまうんです。そういう事が結構ありました。

C++に至る段階で「昔は良い物だと思っていた」部分が検証され「想定外の使い方を禁じる」と言う色が強くなってきました。では便利な部分を無くすかと言うとそうではありません。

「同じライブラリで出来る事が変わってはいけないです。
 関数名(実装も)分けて要望に応えるものを用意しま
 す。古い仕様のライブラリを使っている物は他の環境
 ではまともに動作しないかもしれませんよ?」

と言う但し書きをして(OSや環境の優劣に依存していると警告する)推奨しなくなったという訳です。その代わり「新たにその様な便利な要望に応えるライブラリ群を用意する」とし「こちらを使ってください」としたわけです。趣味で作る人が「動きさえすればいい」と言う何方でも構いません。但し「そろそろ古い物は辞めましょう」と言う流行が生じてサポートされなくなる可能性もあります。そういう事も視野に入れてstdio関数の記述を避けるというのもアリです。

つまりC言語とC++言語で違いについて解釈するのはお勧めしません。何故かというとC++言語自体が「プリ・プロセッサ」によってC言語に変換するというのが通例であり「どの様に変換するか?」についても処理系依存(OSが提供するAPIや統合環境に用意されたライブラリ等の開発環境)になるからです。(提供者が)ちゃんとやってるか怪しいと感じる方がまともです。

仕組みとしては質問者さん問いの通りに実現しても良いわけですし、そうじゃなくても良いわけです。C++言語のソースだけを他に持ち込んで動作が保障されればいいんです。

「一部のOSで出来ていたことを全てのOSで保証する
 ように新たなライブラリの定義をします。しかし提供
 者がどの様に実現するかは任せます」

と言う話と捉えましょう。

開発作業に成れたプログラマは「この記述は動かないと行けないだろう?」みたいな「基本でしょ?」感覚みたいなのがあります。それ以外は怪しいと思って「どの様な動作をするか?」自分で確かめています。開発環境そのものも「別のプログラマ」が作っていますからバグも沢山あります。そういう情報は(世界中で)プログラマが共有しています。

なので理解をするのではなく「使って確かめて用心する」と言う発想に切り替えましょう。後で「提供を辞めました」とか「この言語は危険なので使うのを辞めましょう」等と言う話が(CやC++はそういう状態になっている)出て来るからです。他人が「勝手に作ったもの」を覚えても「他の人に変更されたり」「存在自体を無くされたり」するわけです。そこに拘るよりも自分のプログラムの動作を検証し「この環境を前提に動きます。その他は保障しません」と言い切るのが大事とされています。

例えばゲーム開発環境では(MS環境が凄まじいですが)無数の開発プラットフォームがあります。また互換性を維持するよりもパフォーマンスを上げるほうが重要になる場合もあります。そういう場合は「他で動かないかもしれないけど使っちゃいました」と言う部分を資料に残しておく(ファイルと行番号なども記載したり、あとで検索しやすい様にタグを埋め込む)方が賢いとされています。

「気になる部分を資料に残す方が行儀が良いとされている」

こういう文化に(相当前に)なっています。そのためコードを書いたりする人や開発環境を構築できる人よりも「こんな妥協入れちゃいました」と言う「告白を大事に残す人」の方が給料が高いという現象が起きています。そういう資料を作るには(プログラムであろうと開発環境構築であろうと)文章や図柄を使って分かりやすく整理するスキルが必要になります。この点で才能を発揮できないと報酬も低いという訳です。

「どちらが良いのか? と聞くよりも『使用している』と
 して後で誰かが変更できるように情報を残し、手っ取り
 早く進める方がいい」

自分の手で研究する時間が無い場合は「新しい方法を採用しない」と言うのが技術者の習性だと思います。なのでstdioを使い続ける人がいても不思議じゃないと思います。その人は新しい記述やライブラリについて「自分で自信が持てるほど」検証していないという事です。

それについてはその技術者の不安を尊重し批判をしないというのが(喧嘩になりますしね)暗黙の了解です。バグが出た時は誰も助けませんし、その人が自分で何とかするんです。そういう冷たさがある以上、本人の選択を尊重するという事です。この文化がある以上、新しい物が正義とはなりません(技術の世界であればあるほど)

「新しい物を使う時はどんな技術者が尋常じゃないストレ
 スを感じる。ここに配慮できるか否かがビジネスの成功
 にも影響する」

いま質問者さんが感じているストレス。覚えてください。そんなストレスに耐久し続けることが開発の殆どです。「それはもう古い」と言う指摘は絶対にしない事です。それをやったら二度と口をきいてくれないという(腕の良い)技術者が無数にいます(なのでビジネスに影響する)。

例えばC言語の使用を勧めすぎてゲーム・クリエイターが大量にゲーム業界から離脱したという現象が(大昔に)ありました。こういう辺りで業界全体が傾きます。私の場合は私の師匠が使っていたので何とか乗り切れましたけどね。

時代は変わって行きますから道具が変わるのは仕方のない事ですが、人が変わってしまうのだけは避けないと行けませんよね。いま質問者さんが行っている質問は学校や研修で習う部分になりますが、本当の先端では全く次元の違う戦いをしています。そのレベルの教育をあまねく公平に出来るはずが無いんです。本当に腕の良い技術者に離脱されますと、他を教育して巻き返すというのは(理想はそうであっても)至難の業でしょう。

日本のゲーム業界からクリエイターが大量にパチンコやパチスロ業界に移動した時期がありました。業界内でスマホ・ゲーが新しいという主張が展開されたためです。ビジネスとしてはそうなのでしょう。しかし一度抜けた技術者が業界に戻る事はまず無いでしょう。

という事で貴方のスタイル(バグについても責任を持つという覚悟の上で慎重に選ぶ)を確立しましょう。何がトレンドなのかと言う話にふりまわされないようにすることが大事であると思います。しぶしぶ新しい事を覚えて仕事の範囲を増やす。そういう感じが良いですよ。

「頑張って覚えても意味がない。どれが堅実なのか自分で
 試して進化していくしかない」

AIについても同様です。世界的に激震が走っていると思います。こういう時は技術者の誰もが無視をし、あまり関係ない人が一生懸命語るという現象が起きます。その状態ではビジネスとしても出遅れます。そういう時は「既存の技術者が感心する」部分を良く知っている人が「これって凄くないか?」と語ると変化が起きます。AIについてもそういう部分があるはずです。素人が思う「ここが凄い」はピントがずれているので技術力を持つ人は何も言わずに無視をするはずです。いまは話題先行であり「プロが感心する」あたりをアピールしている人がいません。

「だからこそビジネスチャンスと捉えている人が多い」

色々と脱線しました。申し訳ありません。

言語仕様などの情報を怖がらず(どうせ誰かにひっくり返されますから)自分で試して「今使う分だけ都度」覚えましょう。終わったら忘れましょう。

以上、ご参考になれば。
この回答への補足あり
    • good
    • 2
この回答へのお礼

もう少し簡潔に分かりやすく教えて頂けると幸いです。

お礼日時:2023/11/19 09:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A