C++ పరిచయం & Hello World
స్వాగతం C++ ప్రోగ్రామింగ్ వరల్డ్-క్లాస్ మాస్టర్క్లాస్కు! 🚀 ఆధునిక సాంకేతిక ప్రపంచంలో అత్యంత క్లిష్టమైన, వేగవంతమైన కంప్యూటింగ్ సిస్టమ్లను — AAA వీడియో గేమ్ ఇంజిన్లు (Unreal Engine), గూగుల్ V8 జావాస్క్రిప్ట్ ఇంజిన్, హై-ఫ్రీక్వెన్సీ స్టాక్ ట్రేడింగ్ అల్గారిథమ్స్, స్పేస్ ఎక్స్ రాకెట్ గైడెన్స్, మరియు ఆపరేటింగ్ సిస్టమ్ కెర్నల్స్ — నడిపించే ఏకైక రారాజు C++ ప్రోగ్రామింగ్ లాంగ్వేజ్.
ఈ సమగ్ర ప్రారంభ అధ్యాయంలో, సిలికాన్ చిప్ స్థాయి నుండి కంప్యూటర్ మెమరీ మరియు ప్రాసెసర్ ఆర్కిటెక్చర్ను పరిశీలిస్తూ — C++ భాష పుట్టుక, "Zero-Overhead Principle", 4-దశల కంపైలేషన్ పైప్లైన్, మరియు మీ మొట్టమొదటి Modern C++ ప్రోగ్రామ్ను లైన్-బై-లైన్ మైక్రోస్కోపిక్ డీకన్స్ట్రక్షన్తో నేర్చుకుందాం!
1 C++ భాష పుట్టుక, చరిత్ర & Bjarne Stroustrup బెల్ లాబ్స్ విజన్
1979 వ సంవత్సరంలో, అమెరికాలోని ప్రతిష్టాత్మకమైన బెల్ లాబొరేటరీస్ (AT&T Bell Labs) లో డెన్మార్క్కు చెందిన లెజెండరీ కంప్యూటర్ సైంటిస్ట్ Bjarne Stroustrup (బ్యార్నే స్ట్రోస్ట్రప్) తన పరిశోధనా ప్రాజెక్ట్ కోసం ఒక పెద్ద సవాలును ఎదుర్కొన్నారు.
ఆ సమయంలో ఆయన కంప్యూటర్ నెట్వర్క్ల డిస్ట్రిబ్యూటెడ్ సిస్టమ్స్ పై రీసెర్చ్ చేస్తున్నారు. ఆ సిమ్యులేషన్ రాయడానికి ఆయనకు రెండు వేర్వేరు భాషలు అవసరమయ్యాయి:
- Simula-67: ఇది ప్రపంచంలోనే మొదటి Object-Oriented భాష. ఇందులో క్లాసులు, ఆబ్జెక్టులు ఉండటం వల్ల పెద్ద సాఫ్ట్వేర్ ప్రాజెక్టులను చాలా నీట్గా, మాడ్యులర్గా డిజైన్ చేయవచ్చు. కానీ ఇది రన్ అయ్యేటప్పుడు చాలా చాలా నెమ్మదిగా ఉండేది.
- C Language (Dennis Ritchie సృష్టించినది): ఇది మెషిన్ హార్డ్వేర్కు అత్యంత సన్నిహితంగా ఉండి, రాకెట్ వేగంతో రన్ అయ్యేది. కానీ ఇందులో క్లాసెస్, ఆబ్జెక్ట్ ఓరియెంటెడ్ ఫీచర్లు లేకపోవడం వల్ల పెద్ద సంక్లిష్టమైన సాఫ్ట్వేర్ సిస్టమ్స్ రాయడం తలనొప్పిగా ఉండేది.
అప్పుడు Bjarne Stroustrup ఆలోచించారు: "C లాంగ్వేజ్ యొక్క తిరుగులేని రాకెట్ వేగం + Simula యొక్క అత్యున్నతమైన ఆబ్జెక్ట్ ఓరియెంటెడ్ అబ్స్ట్రాక్షన్ — ఈ రెండింటినీ కలిపి ఒకే భాషగా తయారుచేస్తే ఎలా ఉంటుంది?" ఆ ఆలోచన నుండే C++ జన్మించింది!
1979 లో మొదట దీనికి "C with Classes" అని పేరు పెట్టారు. అనంతరం 1983 లో దీనికి కంప్యూటర్ సైన్స్ చరిత్రలో నిలిచిపోయేలా C++ అని నామకరణం చేశారు. C లాంగ్వేజ్లో ++ అనేది ఒక విలువను ఒకటి పెంచే Increment Operator. అంటే "C భాష యొక్క సామర్థ్యాన్ని మరింత ఉన్నత శిఖరాలకు తీసుకెళ్లిన అడ్వాన్స్డ్ లాంగ్వేజ్" అని దీని అర్థం!
2 Zero-Overhead Principle & Multi-Paradigm ఫిలాసఫీ
Java, Python, C# లాంటి మోడరన్ భాషలు ఉన్నప్పటికీ, నేటికీ గేమ్ డెవలప్మెంట్ మరియు మిషన్-క్రిటికల్ సిస్టమ్స్లో C++ నే ఎందుకు రారాజుగా ఉంది? దీనికి ప్రధాన కారణం C++ యొక్క మూల స్తంభమైన Zero-Overhead Principle.
💡 The Golden Rule of C++ (Bjarne Stroustrup)
"What you don't use, you don't pay for. And what you do use, you couldn't hand-code any better."
తెలుగు వివరణ: మీరు C++ లోని ఒక ఫీచర్ను (ఉదాహరణకు వర్చువల్ ఫంక్షన్లు, టెంప్లేట్లు లేదా ఎక్సెప్షన్లు) ఉపయోగించకపోతే, అది మీ ప్రోగ్రామ్ మెమరీని గానీ, CPU క్లాక్ సైకిల్స్ను గానీ ఒక్క శాతం కూడా వృధా చేయదు. మీరు ఒకవేళ ఆ ఫీచర్ను వాడితే, అసెంబ్లీ కోడ్ రాసే నిపుణుడు స్వయంగా చేత్తో రాసినా అంతకంటే వేగవంతమైన కోడ్ రాయలేనంత అద్భుతంగా కంపైలర్ ఆప్టిమైజ్ చేస్తుంది!
🌟 Multi-Paradigm అంటే ఏమిటి?
C++ కేవలం ఆబ్జెక్ట్ ఓరియెంటెడ్ భాష మాత్రమే కాదు. ఇది ఒక Multi-Paradigm Language. అంటే ఒకే ప్రాజెక్ట్లో మీరు వేర్వేరు ప్రోగ్రామింగ్ శైలులను కలగలిపి ఉపయోగించవచ్చు:
- Procedural Programming: C లాంగ్వేజ్ లాగా నేరుగా ఫంక్షన్లు, లూప్స్ మరియు పాయింటర్లతో నేరుగా మెమరీని కంట్రోల్ చేయడం.
- Object-Oriented Programming (OOP): క్లాసులు, ఆబ్జెక్టులు, ఎన్క్యాప్సులేషన్, ఇన్హెరిటెన్స్ మరియు రన్టైమ్ పాలిమార్ఫిజమ్ ద్వారా క్లీన్ ఆర్కిటెక్చర్ నిర్మించడం.
- Generic Programming (Templates): డేటా టైప్తో సంబంధం లేకుండా పనిచేసే అల్గారిథమ్స్ రాయడం (ఉదాహరణకు
std::vector<T>,std::sort). - Functional Programming: C++11 నుండి వచ్చిన Lambda Expressions, ఫంక్షన్ పాయింటర్లు మరియు
std::functionవాడకం.
3 C vs C++: మైక్రోస్కోపిక్ ఆర్కిటెక్చర్ తేడాలు
చాలామంది ఇంజనీరింగ్ విద్యార్థులు C మరియు C++ రెండూ దాదాపు ఒకటే అనుకుంటారు. కానీ వాటి మధ్య సాఫ్ట్వేర్ ఇంజనీరింగ్ పరంగా అగాధమైన తేడాలు ఉన్నాయి. దిగువ టేబుల్ ద్వారా వాటి ఆర్కిటెక్చరల్ వ్యత్యాసాలను స్పష్టంగా పరిశీలించండి:
| లక్షణం (Feature) | C Language (1972) | Modern C++ (C++17/C++20) |
|---|---|---|
| Programming Paradigm | కేవలం Procedural (టాప్-డౌన్ ఫంక్షన్స్) | Multi-Paradigm (Procedural + OOP + Generic + Functional) |
| Encapsulation & Data Hiding | డేటా హైడింగ్ లేదు; struct లో అన్ని ఫీల్డ్స్ పబ్లిక్ |
class లో private, protected, public తో పూర్తి రక్షణ |
| మెమరీ మేనేజ్మెంట్ | మాన్యువల్ (malloc(), free()); లీక్స్ రిస్క్ ఎక్కువ |
RAII ఆర్కిటెక్చర్, Smart Pointers (unique_ptr, shared_ptr) ఆటోమేటిక్ క్లీనప్ |
| Function Overloading | సపోర్ట్ చేయదు (ఒకే పేరుతో రెండు ఫంక్షన్లు రాయలేము) | పూర్తి సపోర్ట్ (పారామీటర్లను బట్టి కంపైలర్ సరైన ఫంక్షన్ను లింక్ చేస్తుంది) |
| Standard Library | పరిమితమైన లైబ్రరీ (C Standard Library) | విశాలమైన STL (Vectors, Maps, Hash tables, Algorithms, Threads) |
| I/O Operations | printf(), scanf() (టైప్ సేఫ్టీ ఉండదు) |
std::cout, std::cin (100% టైప్-సేఫ్ ఆబ్జెక్ట్ స్ట్రీమ్స్) |
| References (&) | రిఫరెన్సెస్ లేవు (కేవలం raw pointers మాత్రమే) | సేఫ్ రిఫరెన్సెస్ (int& ref = x;), Move Semantics (&&) |
4 పూర్తి 4-దశల C++ కంపైలేషన్ పైప్లైన్ (Behind the Scenes)
పైథాన్ లాంటి ఇంటర్ప్రెటెడ్ భాషల్లో కోడ్ నేరుగా లైన్ బై లైన్ రన్ అవుతుంది. కానీ C++ లో మనం రాసే ఇంగ్లీష్ లాంటి హై-లెవల్ కోడ్ CPU కి నేరుగా అర్థం కాదు. మనం రాసిన కోడ్ కంప్యూటర్ ప్రాసెసర్ ఎగ్జిక్యూట్ చేసే బైనరీ మెషిన్ కోడ్ (0s & 1s) గా మారడానికి 4 దశల పైప్లైన్ (4 Stages) గుండా ప్రయాణించాలి:
ప్రీ-ప్రాసెసర్ అనేది కంపైలర్ కంటే ముందు పనిచేసే ఒక టెక్స్ట్ ప్రాసెసర్. ఇది #include <iostream> కనిపించగానే ఆ హెడర్ ఫైల్లోని వేలాది లైన్ల డిక్లరేషన్లను తీసుకొచ్చి మీ ఫైల్లో అతికిస్తుంది. కామెంట్లు (// మరియు /* */) అన్నింటినీ తొలగిస్తుంది. దీని అవుట్పుట్గా main.ii (లేదా main.i) ఫైల్ తయారవుతుంది.
కంపైలర్ మీ కోడ్లోని సింటాక్స్ నియమాలు, డేటా టైప్ సేఫ్టీ మరియు టెంప్లేట్ విస్తరణలను తనిఖీ చేస్తుంది. తీవ్రమైన కోడ్ ఆప్టిమైజేషన్లు చేసి, నిర్దిష్ట CPU ఆర్కిటెక్చర్ (x86_64 లేదా ARM64) కోసం అసెంబ్లీ ఇన్స్ట్రక్షన్లను (mov, push, call, ret) ఉత్పత్తి చేస్తుంది. దీని అవుట్పుట్ main.s.
అసెంబ్లర్ CPU అసెంబ్లీ సూచనలను స్వచ్ఛమైన బైనరీ బైట్స్ (0s & 1s) గా మారుస్తుంది. దీని అవుట్పుట్గా రీ-లొకేటబుల్ ఆబ్జెక్ట్ ఫైల్ main.o (Windows లో main.obj) తయారవుతుంది. అయితే ఇది ఇంకా రన్ అయ్యే స్థితిలో ఉండదు, ఎందుకంటే std::cout లాంటి లైబ్రరీ ఫంక్షన్ల చిరునామాలు ఇందులో ఇంకా అనుసంధానం కాలేదు!
లింకర్ మీ main.o ఫైల్కు C++ రన్టైమ్ లైబ్రరీ (libstdc++ / libc++) కోడ్ను జతచేస్తుంది. ఫంక్షన్ల చిరునామాలను పరిష్కరించి (Address Resolution), నేరుగా ఆపరేటింగ్ సిస్టమ్ డబుల్-క్లిక్ చేస్తే రన్ అయ్యే program.exe (Linux లో a.out) ను సృష్టిస్తుంది!
5 C++ డెవలప్మెంట్ ఎన్విరాన్మెంట్ సెటప్ (GCC/g++, Clang & VS Code)
మీ కంప్యూటర్లో C++ కోడ్ రాయడానికి మరియు కంపైల్ చేయడానికి రెండు ముఖ్యమైన సాధనాలు కావాలి:
- C++ Compiler: ప్రపంచవ్యాప్తంగా ప్రసిద్ధి చెందిన ఓపెన్-సోర్స్ కంపైలర్
g++(GNU C++ Compiler) లేదాclang++(LLVM ఆధారితం). - Code Editor: కోడ్ రాయడానికి Microsoft Visual Studio Code (VS Code) తో పాటు "C/C++" ఎక్స్టెన్షన్ ప్యాక్.
💻 కమాండ్ లైన్ ద్వారా C++ కంపైల్ చేయడం ఎలా?
మీరు టెర్మినల్ లేదా పవర్షెల్ లో ఒక C++ ఫైల్ (main.cpp) ను కంపైల్ చేయడానికి ఈ కింది కమాండ్ వాడండి:
# 1. ఆధునిక C++20 ప్రమాణాలతో కంపైల్ చేసి program.exe తయారుచేయడం
g++ -std=c++20 -O2 -Wall main.cpp -o program.exe
# 2. ప్రోగ్రామ్ను రన్ చేయడం
./program.exe
ఫ్లాగ్స్ వివరణ: -std=c++20 (మోడరన్ C++20 ఫీచర్లను ఎనేబుల్ చేస్తుంది), -O2 (గరిష్ట వేగం కోసం ఆప్టిమైజ్ చేస్తుంది), -Wall (అన్ని హెచ్చరికలను ప్రదర్శిస్తుంది).
6 మొదటి Modern C++ ప్రోగ్రామ్: "Hello, World!" & లైన్-బై-లైన్ డీకన్స్ట్రక్షన్
ఇప్పుడు ప్రపంచంలో ప్రతి ప్రోగ్రామర్ తన మొదటి అడుగు వేసే సాంప్రదాయకమైన మరియు పవిత్రమైన "Hello, World!" ప్రోగ్రామ్ను ఆధునిక C++ ప్రమాణాలతో రన్ చేద్దాం:
#include <iostream>
int main() {
// స్క్రీన్ పై టెక్స్ట్ ప్రింట్ చేయడం
std::cout << "Hello, World! 🚀 Welcome to C++ Masterclass.\n";
std::cout << "C++ is extremely fast, powerful, and fun!\n";
return 0; // ఆపరేటింగ్ సిస్టమ్కు సక్సెస్ స్టేటస్ పంపడం
}
🔍 మైక్రోస్కోపిక్ లైన్-బై-లైన్ కోడ్ విశ్లేషణ:
-
#include <iostream>: ఇది Preprocessor Directive.iostreamఅంటే Input Output Stream. స్క్రీన్ పైన టెక్స్ట్ ప్రింట్ చేయడానికి (cout) లేదా కీబోర్డ్ నుండి ఇన్పుట్ చదవడానికి (cin) అవసరమైన అన్ని క్లాసెస్ మరియు ఆబ్జెక్ట్స్ ఈ హెడర్ ఫైల్లో ఉంటాయి. -
int main(): ఇది Main Function (Entry Point). ఆపరేటింగ్ సిస్టమ్ మీ ప్రోగ్రామ్ను ఎగ్జిక్యూట్ చేయడం ఎల్లప్పుడూmain()మొదటి లైన్ నుండే ప్రారంభిస్తుంది.intఅంటే ఈ ఫంక్షన్ చివరికి OS కు ఒక పూర్ణాంక ఫలితాన్ని (Integer Status Code) అందిస్తుంది. -
{ ... }: కర్లీ బ్రేసెస్ ఫంక్షన్ యొక్క పరిధిని (Scope) సూచిస్తాయి. మీ ప్రోగ్రామ్ లాజిక్ అంతా ఈ బ్రాకెట్ల మధ్యలోనే ఉండాలి. -
std::cout:coutఅంటే Character Output. ఇది టెర్మినల్ కన్సోల్కు కనెక్ట్ అయి ఉన్న ఒక స్ట్రీమ్ ఆబ్జెక్ట్.std::అనేది Standard Namespace ను సూచిస్తుంది. -
<<: దీనిని Stream Insertion Operator అంటారు. దీని కుడివైపు ఉన్న డేటాను ఎడమవైపు ఉన్న కన్సోల్ స్ట్రీమ్ (cout) లోకి నెడుతుంది. -
"Hello, World! 🚀\n": డబుల్ కోట్స్ మధ్య ఉన్న టెక్స్ట్ను String Literal అంటారు. ఇది ఉన్నది ఉన్నట్లుగా స్క్రీన్పై ప్రింట్ అవుతుంది. -
return 0;: ఆపరేటింగ్ సిస్టమ్కు "నా ప్రోగ్రామ్ ఎటువంటి లోపాలు లేకుండా 100% విజయవంతంగా ముగిసింది (EXIT_SUCCESS)" అని తెలియజేసే ఎగ్జిట్ స్టేటస్ కోడ్.
7 std::cout, Stream Insertion Operator (<<) & Typesafety
C లాంగ్వేజ్లో మనం వాడే printf() తో పోలిస్తే, C++ లోని std::cout ఎందుకు విప్లవాత్మకమైనది? దీని వెనుక ఉన్న అతిపెద్ద రహస్యం Compile-Time Type Safety.
C లాంగ్వేజ్లో printf("%d", 3.14); అని పొరపాటున రాస్తే కంపైలర్ సరైన ఎర్రర్ ఇవ్వదు; రన్టైమ్లో చెత్త గార్బేజ్ విలువ ప్రింట్ అవుతుంది. కానీ C++ లో std::cout అనేది ఒక తెలివైన C++ ఆబ్జెక్ట్. మీరు ఏ డేటా టైప్ పంపినా (ఇంటిజర్, ఫ్లోట్, స్ట్రింగ్, లేదా కస్టమ్ క్లాస్ ఆబ్జెక్ట్), కంపైలర్ ఆటోమేటిక్గా సరైన ఓవర్లోడెడ్ << ఆపరేటర్ను ఎంపిక చేస్తుంది!
#include <iostream>
#include <string>
int main() {
int rollNo = 101;
double score = 98.75;
char grade = 'A';
std::string studentName = "Balaji";
// Stream Chaining: ఒకే లైన్లో విభిన్న డేటా టైపులను కలపడం
std::cout << "విద్యార్థి పేరు: " << studentName
<< " | రోల్ నం: " << rollNo
<< " | స్కోర్: " << score
<< " | గ్రేడ్: " << grade << '\n';
return 0;
}
8 std::endl vs '\n': అల్ట్రా-ఫాస్ట్ I/O పర్ఫార్మెన్స్ రహస్యం & Flush Mechanism
C++ లో కొత్త లైన్కి వెళ్లడానికి రెండు మార్గాలు ఉన్నాయి: std::endl మరియు '\n'. బిగినర్స్ రెండూ ఒకటే అనుకుంటారు, కానీ వాటి మధ్య చాలా తీవ్రమైన పర్ఫార్మెన్స్ తేడా ఉంది!
🐢 std::endl (Slow - బఫర్ ఫ్లష్ చేస్తుంది)
ఇది కొత్త లైన్కి కర్సర్ను తీసుకెళ్లడమే కాకుండా, సిస్టమ్ I/O మెమరీ బఫర్ను తక్షణమే ఖాళీ (Force Flush) చేయమని ఆపరేటింగ్ సిస్టమ్కు సిగ్నల్ పంపుతుంది. ఒక లూప్లో పది లక్షల సార్లు std::endl వాడితే, OS తో లక్షల సార్లు ఇంటరాక్ట్ అయ్యి మీ ప్రోగ్రామ్ 10 నుండి 20 రెట్లు స్లో అయిపోతుంది!
⚡ '\n' (Ultra Fast - రికమండెడ్)
ఇది కేవలం ఒక న్యూలైన్ క్యారెక్టర్ను బఫర్లో ఉంచుతుంది. బఫర్ పూర్తిగా నిండినప్పుడు లేదా ప్రోగ్రామ్ ముగిసినప్పుడు సింగిల్ షాట్లో వేగంగా ఫ్లష్ అవుతుంది. కాంపిటీటివ్ ప్రోగ్రామింగ్, హై-ఫ్రీక్వెన్సీ ట్రేడింగ్ మరియు గేమింగ్ ఇంజిన్లలో ఎల్లప్పుడూ '\n' మాత్రమే వాడాలి!
#include <iostream>
int main() {
// ఉత్తమ పద్ధతి: '\n' వాడండి
std::cout << "లైన్ 1" << '\n';
std::cout << "లైన్ 2\nలైన్ 3\n";
// అవసరమైనప్పుడు మాత్రమే ఫ్లష్ వాడండి (ఉదా: క్రష్ అవ్వకముందే లాగ్ రాయడానికి)
std::cout << "ముఖ్యమైన ఎర్రర్ లాగ్!" << std::endl;
return 0;
}
9 using namespace std; వాడకూడదన్న కాంట్రవర్సీ & Name Collision ప్రమాదం
మీరు కళాశాలల్లో లేదా యూట్యూబ్ ట్యుటోరియల్స్లో తరచుగా ఈ కింది కోడ్ను చూసి ఉంటారు:
using namespace std; // ⚠️ ది డేంజరస్ ప్రాక్టీస్!
బిగినర్స్ ప్రతిసారీ std:: అని రాయడం బద్ధకించి using namespace std; అని ఫైల్ ప్రారంభంలో రాస్తారు. కళాశాల చిన్న ల్యాబ్ పరీక్షలకు ఇది సరిపోయినప్పటికీ, రియల్-వరల్డ్ ఇండస్ట్రీ సాఫ్ట్వేర్ ఇంజనీరింగ్లో దీనిని ఒక తీవ్రమైన నేరంగా పరిగణిస్తారు! ఎందుకు?
💥 The Danger: Namespace Pollution & Name Collisions
C++ స్టాండర్డ్ లైబ్రరీ (std) లో లక్షలాది ఐడెంటిఫైయర్లు ఉన్నాయి (ఉదాహరణకు: count, size, data, distance, min, max, move). మీరు using namespace std; అని గ్లోబల్గా వాడితే, ఆ లక్షలాది పేర్లు మీ గ్లోబల్ పరిధిలోకి వచ్చేస్తాయి. రేపు మీ ప్రాజెక్ట్లో మీరు స్వయంగా int count = 10; అని రాసినప్పుడు, కంపైలర్ అయోమయానికి గురై "Ambiguous symbol count" అనే కంపైలేషన్ ఎర్రర్ను విసురుతుంది!
సరైన పద్ధతులు:
- స్పష్టంగా
std::cout,std::cin,std::endlఅని రాయడం (100% సేఫ్ & ప్రొఫెషనల్). - ఒకవేళ షార్ట్కట్ కావాలంటే, కేవలం అవసరమైన నిర్దిష్ట ఐడెంటిఫైయర్లను మాత్రమే దిగుమతి చేసుకోవడం:
using std::cout; using std::endl;
10 int main() vs void main() కంప్లీట్ బ్రేక్డౌన్ & ఎగ్జిట్ స్టేటస్ కోడ్స్
భారతదేశంలోని చాలా పాఠ్యపుస్తకాల్లో పాత 1990ల Turbo C++ ఆధారంగా void main() అని రాసి ఉంటుంది. కానీ ఆధునిక ISO C++ స్టాండర్డ్ ప్రకారం void main() అనేది పూర్తిగా చెల్లదు (Strictly Illegal)!
🔍 ఆపరేటింగ్ సిస్టమ్ కు రిటర్న్ కోడ్ ఎందుకు ముఖ్యం?
ఆపరేటింగ్ సిస్టమ్ (Windows, Linux, macOS) మీ ప్రోగ్రామ్ను రన్ చేసినప్పుడు, అది విజయవంతంగా ముగిసిందో లేక మధ్యలోనే ఏదైనా లోపం వల్ల ఆగిపోయిందో తెలుసుకోవడానికి ఒక సంఖ్యను కోరుకుంటుంది:
return 0;: EXIT_SUCCESS — ప్రోగ్రామ్ ఎటువంటి ఎర్రర్ లేకుండా నూటికి నూరు శాతం విజయవంతంగా పూర్తయింది.return 1;(లేదా నాన్-జీరో): EXIT_FAILURE — ప్రోగ్రామ్లో ఫైల్ దొరకకపోవడం లేదా మెమరీ లోపం వల్ల క్రాష్ అయింది.
గమనిక: C++ లో ఒక ప్రత్యేకమైన నిబంధన ఉంది — int main() చివర మీరు ఒకవేళ return 0; రాయడం మర్చిపోయినా, కంపైలర్ ఆటోమేటిక్గా ఇంప్లిసిట్గా return 0; ను జోడిస్తుంది. కానీ స్పష్టంగా రాయడమే ఒక మంచి ప్రోగ్రామర్ లక్షణం!
11 C++ లాంగ్వేజ్ ఎవల్యూషన్ టైమ్లైన్ (C++98 నుండి Modern C++20 / C++23)
C++ అనేది ఒకే చోట నిలిచిపోయిన పాత భాష కాదు. ప్రతి 3 సంవత్సరాలకు ISO కమిటీ సరికొత్త అడ్వాన్స్డ్ ఫీచర్లతో సరికొత్త ప్రమాణాలను విడుదల చేస్తుంది:
auto కీవర్డ్, Smart Pointers, Lambda Expressions, Move Semantics, Range-based for loops, multithreading సపోర్ట్ వచ్చాయి.
std::string_view (జీరో-కాపీ స్ట్రింగ్స్), constexpr విస్తరణ, Structured Binding, std::filesystem వచ్చి కోడింగ్ను మరింత సులభతరం చేశాయి.
12 సాధారణ బిగినర్ తప్పులు, ప్రమాదకరమైన ట్రాప్స్ & బెస్ట్ ప్రాక్టీసెస్
C++ అనేది స్ట్రిక్ట్ కేస్-సెన్సిటివ్ లాంగ్వేజ్. Main() అని రాస్తే లింకర్ ఎర్రర్ వస్తుంది; ఎల్లప్పుడూ లోయర్కేస్ main() మాత్రమే రాయాలి. అలాగే COUT కాకుండా cout మాత్రమే రాయాలి.
C++ లో ప్రతి స్టేట్మెంట్ తప్పనిసరిగా సెమికోలన్ ; తోనే ముగియాలి. సెమికోలన్ పెట్టకపోతే ఆ తర్వాతి లైన్ లో కంపైలర్ "expected ';' before ..." అనే ఎర్రర్ ఇస్తుంది.
కంపైల్ చేసేటప్పుడు ఎల్లప్పుడూ g++ -Wall -Wextra -pedantic main.cpp వాడండి. ఇది మీరు చేసే చిన్న చిన్న తప్పులను కూడా ముందే హెచ్చరించి మిమ్మల్ని మేటి సాఫ్ట్వేర్ ఇంజనీర్గా తీర్చిదిద్దుతుంది.
13 రియల్-వరల్డ్ ప్రాక్టీస్ ప్రాజెక్ట్ & అడ్వాన్స్డ్ ఛాలెంజెస్
ఈ మొదటి అధ్యాయంలో నేర్చుకున్న అన్ని అంశాలను ఒకచోట చేర్చి, ఒక అందమైన కన్సోల్ ఆధారిత "Student Academic Profile & System Welcome Banner" ప్రాజెక్ట్ను రన్ చేద్దాం:
#include <iostream>
#include <string>
int main() {
// విద్యార్థి వివరాల డిక్లరేషన్
std::string learnerName = "రవితేజ (Ravi Teja)";
std::string courseName = "Modern C++20 Masterclass";
int currentChapter = 1;
int totalChapters = 20;
double progressPercent = (static_cast<double>(currentChapter) / totalChapters) * 100.0;
// సిస్టమ్ వెల్కమ్ బ్యానర్ ప్రింటింగ్
std::cout << "=================================================\n";
std::cout << " 🚀 OUR COMPILER MODERN C++ MASTERCLASS \n";
std::cout << "=================================================\n";
std::cout << "లర్నర్ పేరు : " << learnerName << '\n';
std::cout << "కోర్సు టైటిల్ : " << courseName << '\n';
std::cout << "ప్రస్తుత అధ్యాయం : " << currentChapter << " of " << totalChapters << '\n';
std::cout << "కోర్సు ప్రోగ్రెస్ : " << progressPercent << "% పూర్తయింది\n";
std::cout << "లక్ష్యం : High-Performance Systems Engineering\n";
std::cout << "-------------------------------------------------\n";
std::cout << "హలో C++ వరల్డ్! మీ విజయవంతమైన ప్రయాణానికి శుభాకాంక్షలు!\n";
std::cout << "=================================================\n";
return 0;
}
🎯 మీ కోసం స్వయం సాధన సవాలు (Self-Study Challenge):
పై ప్రోగ్రామ్ను ఆన్లైన్ కంపైలర్లో ఓపెన్ చేసి — మీ స్వంత పేరు, మీ కళాశాల పేరు, మరియు మీ భవిష్యత్ డ్రీమ్ కంపెనీ (ఉదాహరణకు Google, Microsoft, ISRO) వివరాలతో ఒక అందమైన Personal Developer Portfolio Card ను ప్రింట్ చేసేలా మార్పులు చేసి రన్ చేయండి!
❓ ఇంటర్వ్యూ & పరీక్షల క్విజ్ (Knowledge Check)
ప్రశ్న 1: C++ లోని "Zero-Overhead Principle" అంటే ఏమిటి?
ప్రశ్న 2: std::endl మరియు '\n' మధ్య ప్రధాన తేడా ఏమిటి? పర్ఫార్మెన్స్ ఎందుకు తగ్గుతుంది?
'\n' కేవలం కర్సర్ను కొత్త లైన్కి పంపుతుంది. కానీ std::endl కొత్త లైన్కి వెళ్లడంతో పాటు మెమరీ అవుట్పుట్ బఫర్ను తక్షణమే ఖాళీ (Force Flush) చేయమని ఆపరేటింగ్ సిస్టమ్కు సిగ్నల్ ఇస్తుంది. లూప్లలో std::endl వాడటం వల్ల ప్రోగ్రామ్ వేగం భారీగా తగ్గిపోతుంది.
ప్రశ్న 3: പ്രొఫెషనల్ C++ సాఫ్ట్వేర్ ఇంజనీరింగ్లో 'using namespace std;' ఎందుకు వాడకూడదు?
std) లో లక్షలాది ఫంక్షన్లు, క్లాసులు (ఉదా: count, size, min, max, move) ఉంటాయి. గ్లోబల్గా using namespace std; రాస్తే, రేపు మన స్వంత వేరియబుల్స్ వాటితో ఢీకొని ప్రమాదకరమైన Name Collision (Ambiguity Error) ఏర్పడుతుంది.
ప్రశ్న 4: void main() ఎందుకు తప్పు? ISO C++ స్టాండర్డ్ int main() నే ఎందుకు నిర్దేశిస్తుంది?
int main() మాత్రమే వాడాలి. ISO C++ ప్రమాణాల ప్రకారం void main() పూర్తిగా చెల్లదు (Illegal).
ప్రశ్న 5: C++ కంపైలేషన్ పైప్లైన్లోని 4 దశలు ఏమిటి?
ఈ ప్రాజెక్ట్ను లైవ్గా మన కంపైలర్లో రన్ చేయండి!
ఎటువంటి లోకల్ సెటప్ లేకుండా, బ్రౌజర్లోనే నేరుగా Modern C++ (GCC 13 / C++20) కంపైలర్లో ఈ కోడ్ను ఎగ్జిక్యూట్ చేసి రన్టైమ్ అవుట్పుట్ను తనిఖీ చేయండి.