මම C / C ++ යන යෙදුම භාවිතා කිරීම නතර කළ යුතුද?


142

මට තේරෙනවා C සහ C ++ විවිධ භාෂා බව නමුත් මම C ++ ඉගෙන ගන්නා විට මට නිතරම කියා සිටියේ C යනු C ++ හි උප කුලකයක් හෝ C ++ පන්ති සමඟ C බවයි. C ++ x0, C ++ 11 (හෝ නූතන C ++ 11/14/17) සාමාන්‍යයෙන් පෙනෙන තෙක් එය සත්‍යයක් විය. ඇත්ත වශයෙන්ම (විශේෂයෙන් කාවැද්දූ පද්ධතිවල වැඩ කරන විට) එය C ++ වලින් ලියා ඇති කේත සොයා ගැනීමට බොහෝ දුරට ඉඩ ඇත, නමුත් කොටස් විශාල ප්‍රමාණයක් මුළුමනින්ම පිරිසිදු C භාෂාවෙන් ලියා ඇත. මෙන්න මට ප්‍රශ්න කිහිපයක් තිබේ:

  1. මම C / C ++ යන යෙදුම භාවිතා කිරීම නතර කළ යුතුද?
  2. # 1 සඳහා පිළිතුර ඔව් නම්, සී සහ සී ++ මිශ්‍රණයක් භාවිතා කරන වැඩසටහනක් මා හඳුන්වන්නේ කෙසේද?
  3. මේ දෙකම 'වෙනස්' භාෂාවන් වන බැවින්, යම් අවස්ථාවක දී C ++ සම්පාදකයින් C භාෂාවෙන් ලියා ඇති ආධාරක කේතය නැවැත්වීමට ඉඩ ඇත (නූතන c ++ දර්ශකයන්, ගතික මතක හැසිරවීම වැනි මූලික දේවල් සඳහා C මානසිකත්වයෙන් බැහැර වන හෙයින්)
  4. අනුකූලතාව පවත්වා ගැනීම සඳහා සී / සී ++ ප්‍රමිති සකස් කරන පුද්ගලයින් අතර කිසියම් සහයෝගීතාවයක් දැන් තිබේද?
  5. # 4 ඔව් නම්, එවැනි සහයෝගීතාවය නුදුරු අනාගතයේ දී නූතන c ++ (11/14/17) පෙනුමෙන් අවසන් විය හැකිය.

දැනටමත් සමාන ප්‍රශ්න ඇති බව මම දනිමි, නමුත් බොහෝ දෙනෙක් මෙම ප්‍රශ්න බෙදා ගන්නා බව මට විශ්වාසයි, එබැවින් නුදුරු අනාගතයේ දී C ++ ප්‍රවණතාව සමඟ සම්බන්ධ විය යුතු කරුණු සඳහා හොඳ පිළිතුරු ලබා ගැනීමට මම ඉතා උනන්දු වෙමි.


35
C ++ x0, C ++ 11 නැත, C89 පෙනුම C ++ 98 හි උප කුලකයක් නොවන තෙක් එය නිහ quiet සත්‍යයකි .

35
Should I stop using the term C/C++. ඔව්. මෙය භාවිතා කරන්නේ බඳවා ගන්නන් සහ මානව සම්පත් පමණි. ඉංජිනේරුවන් මෙම පදය Cහෝ C++ස්වාධීන භාෂාවන් ලෙස භාවිතා කරනු ඇත . යෙදුම මිශ්‍ර කරන ඉංජිනේරුවෙකු ඔබ සොයා ගන්නේ නම් ඒවා වළක්වා ගන්න.
මාටින් යෝර්ක්

8
Ok ලොකි අස්ටාරි: ඇත්තටම? මම හිතන්නේ SQLite සංවර්ධකයින් මානව සම්පත්, ඔවුන්ට විවෘත තනතුරු නොමැති නිසා. මෙය ඇදහිය නොහැකි තරම් සීමා සහිත දෘෂ්ටියකි (කරුණාකර ඔබේ තත්වයේ අනෙක් අය කළාක් මෙන් මගේ පිළිතුර අවතක්සේරු කරන්න).

4
@greyfade: ඕනෑම කෙනෙකුට, ඕනෑම තැනක බහුලව දැකිය හැකි චරිත අනුපිළිවෙලකට හිමිකම් කීමට හැකියාවක් ඇතැයි සිතීම නරක ය. "සී / සී ++" යනු එක්තරා භාෂාවක් සඳහා තෝරාගත් නම විය හැකි නමුත් එයින් අදහස් කරන්නේ "සී / සී ++" භාවිතය එම භාෂාවට යොමු වන බවයි, මා එම වෙබ් අඩවිය පිටපත් කර "සී / සී ++" "C ++ 1z" කෙටුම්පත C ++ ප්‍රමිතිය පිළිබඳ සියලු සාකච්ඡා හදිසියේම වැරදි පාරිභාෂිතය භාවිතා කරනු ඇත. සරලව කිවහොත්, "සී / සී ++" නූල කිසි විටෙකත් "සී / සී ++" නම් වූ විහිළු භාෂාවට යොමු කර නැති අතර කිසි විටෙකත් එසේ නොකරනු ඇත.
බෙන් වොයිග්ට්

32
@TomDworzanski, straustrup.com/bs_faq.html#C-is-subset "දැඩි ගණිතමය අර්ථයෙන් ගත් කල, C යනු C ++ හි උප කුලකයක් නොවේ ... කෙසේ වෙතත්, C ++ මඟින් C මඟින් සහාය දක්වන සෑම ක්‍රමලේඛන තාක්‍ෂණයකටම සහය දක්වයි ... එය එසේ නොවේ පැය කිහිපයකින් සී රේඛා දස දහස් ගණනක් සී-ස්ටයිල් සී ++ බවට පරිවර්තනය කිරීම අසාමාන්‍යය.ඒ අනුව, සී ++ යනු ඇන්සි සී හි සුපර්සෙට් එකක් වන අතර ඇන්සි සී යනු කේ ඇන්ඩ් ආර් සී හි සුපර්සෙට් එකක් වන අතර අයිඑස්ඕ සී ++ යනු 1985 දී පැවති පරිදි C ++ හි සුපර්සෙට් එක. හොඳින් ලියා ඇති C ද නීතිමය C ++ වේ. නිදසුනක් ලෙස, කර්නිගන් සහ රිචී හි සෑම උදාහරණයක්ම: "C ක්‍රමලේඛන භාෂාව (2 වන සංස්කරණය)" ද C ++ වැඩසටහනකි. "
බෙන්

Answers:


183

C කිසි විටෙකත් C ++ හි උප කුලකයක් නොවීය. මේ සඳහා වඩාත්ම පැහැදිලි උදාහරණය නම් int new;. C89 සහ C ++ 98 සිට මෙය සත්‍යයක් වී ඇති අතර නව ප්‍රමිතීන් එළියට පැමිණ ඇති බැවින් භාෂා එකිනෙකාගෙන් තව දුරටත් වර්ධනය වී තිබේ.

මම C / C ++ යන යෙදුම භාවිතා කිරීම නතර කළ යුතුද?

ඔව්

# 1 සඳහා පිළිතුර ඔව් නම්, සී සහ සී ++ මිශ්‍රණයක් භාවිතා කරන වැඩසටහනක් මා හඳුන්වන්නේ කෙසේද?

ප්‍රභව ගොනුවක් එක් භාෂාවක හෝ වෙනත් භාෂාවක ලියා ඇත. වැඩසටහනකට විවිධ භාෂාවන්ගෙන් එකට වැඩ කරන කේතයක් හෝ විවිධ සංයුක්ත වස්තු සම්බන්ධ කිරීමෙන් නිපදවිය හැකි කේතයකින් සමන්විත විය හැකිය. වැඩසටහන සී සහ සී ++ වලින් ලියා ඇති බව ඔබ කියනු ඇත, "සී / සී ++" භාෂාවක් නොවේ.

මේ දෙකම 'වෙනස්' භාෂාවන් බැවින් සමහර විට C ++ සම්පාදකයින් C භාෂාවෙන් ලියා ඇති සහය කේතය නතර කරයි.

3) ඔවුන් කිසි විටෙකත් එසේ කළේ නැත. char *a = malloc(10);. සී සහ සී ++ අවම වශයෙන් අයිඑස්ඕ ප්‍රමිතීන් ඇති තාක් දුරට කිසි විටෙකත් සම්පුර්ණයෙන්ම අනුකූල නොවීය (පූර්ව ප්‍රමිතිගත දින පිළිබඳ සියලු විස්තර මම නොදනිමි). C89 සහ ඊට ඉහළින් ඇති නමුත් කිසිදු C ++ ප්‍රමිතියක් යටතේ වලංගු නොවන ගොනුවක් සඳහා සබැඳි ක්ලික් කරන්න හෝ පහත බලන්න.

4) නැත, වැඩකරන කණ්ඩායම් එකිනෙකා ගැන දැනුවත්ව සිටියත් ප්‍රමිතීන් තමන්ටම ගැලපෙන තීරණ ගනී.

/* A bunch of code that compiles and runs under C89 but fails under any C++ */

/* type aliases and struct names occupy separate namespaces in C, not in C++ */
struct S { int i; };
typedef int S;


struct Outer { struct Inner { int i; } in; };
/* struct Inner will be Outer::Inner in C++ due to name scope */
struct Inner inner;


/* default return type of int in C, C++ functions need explicit return types */
g() {
    return 0;
}


/* C sees this as two declarations of the same integer,
 * C++ sees it as redefinition */
int n;
int n;


/* K&R style argument type declarations */
void h(i) int i; { }


/* struct type declaration in return type */
struct S2{int a;} j(void) { struct S2 s = {1}; return s; }


/* struct type declaration in argument, stupid and useless, but valid */
/*void dumb(struct S3{int a;} s) { } */


/* enum/int assignment */
enum E{A, B};
enum E e = 1;


void k() {
    goto label; /* C allows jumping past an initialization */
    {
        int x = 0;
label:
        x = 1;
    }
}


/* () in declaration means unspecified number of arguments in C, the definition
 * can take any number of arguments,
 * but means the same as (void) in C++  (definition below main) */
void f();

int main(void) {
    f(1); /* doesn't match declaration in C++ */
    {
        /* new is a keyword in C++ */
        int new = 0;
    }

    /* no stdio.h include results in implicit definiton in C.  However,
     * as long as a matching function is found at link-time, it's fine.
     * C++ requires a declaration for all called functions */
    puts("C is not C++");
    {
        int *ip;
        void *vp = 0;
        ip = vp; /* cast required in C++, not in C */
    }
    return 0;
}

/* matches declaration in C, not in C++ */
void f(int i) { }

C යනු පරමාර්ථ-සී හි උප කුලකයක් බව සඳහන් කිරීම වටී යැයි මට නිතරම හැඟේ .


60
පරමාර්ථ-සී විශේෂයෙන් නිර්මාණය කර ඇත්තේ පරස්පර වාක්‍ය ඛණ්ඩයක් සහ පූර්ණ විකලාංග වස්තු පද්ධතියක් නොමැති සී හි දැඩි සුපර්සෙට් එකක් ලෙස ය. මෙය එතරම් අන්තයකට ගෙන යනු ලබන අතර ඔබට ඇත්ත වශයෙන්ම "පරමාර්ථ-සී" හි "පරමාර්ථය" කොටස ගෙන එය වෙනත් භාෂාවලට යොමු කළ හැකිය. උදා: පරමාර්ථ-මොඩියුල -2. වඩාත් ප්‍රචලිත වන්නේ ඇපල් හි පරමාර්ථ-සී ++ සම්පූර්ණයෙන්ම විකලාංග, අන්තර්ක්‍රියාකාරී නොවන, ඒකාබද්ධ නොවන වස්තු පද්ධති දෙකකින් සමන්විත වේ.
ජෝර්ග් ඩබ් මිට්ටාග්

21
සී හි නියම සුපර්සෙට් එකක් මොන වගේද කියා බැලීමට OP ට අවශ්‍ය නම් @masonwheeler.
xhainingx

27
"ප්‍රභව ගොනුවක් එක් භාෂාවක හෝ වෙනත් භාෂාවක ලියා ඇත." සම්මත C99 සහ C ++ 89 යන දෙකම පිරිසිදු ලෙස සම්පාදනය කරන මගේ වැඩසටහනට එය කියන්න. කිසිදු භාෂාවක් අනෙකාගේ උප කුලකයක් නොවේ, නමුත් ඔවුන්ගේ කට්ටල දෙකේ ඡේදනය පුළුල් ලෙස ඉලක්ක කර ඇත. Lua, et al බලන්න.
අතිවිශිෂ්ට

29
unmunificent මට C ++ කේතය ලිවිය හැකිය javac, එය ද ක්‍රියාත්මක විය හැකිය , නමුත් එහි තේරුම කුමක්ද?
xhainingx

23
unmunificent C, / bin / sh, සහ f77 යන භාෂා තුනකින් සම්පාදනය කළ හැකි වැඩසටහනක උදාහරණයක් වන්නේ IOCCC 1986 වෙත applin.c ප්‍රවේශයයි. ඔබේ අර්ථ දැක්වීම අනුව ටැගය C/Fortran/shදැන් අර්ථවත්ද ? ioccc.org/years-spoiler.html#1986 .
Sjoerd

108

එහි ඇති මෙම නියමයන් බොහෝ විට එකට හේතුවක් විය. ඔබේ සී ගුරුවරයාගේ භාෂාව C ++ හි උප කුලකයක් බව ඔබ නොකිය යුතු අතර, මෙහි යම් සත්‍යතාවයක් ඇත. අනෙක් අය දැනටමත් ඔබේ ගුරුවරයාගේ දෘෂ්ටිකෝණය හෙළිදරව් කර ඇත. මෙය ඉතා හොඳයි (සහ උදාහරණ ආදිය සමඟ නිදර්ශනය කර ඇත). නමුත් අපි ජීවත් වන්නේ ඇත් දළ කුලුනක හෝ පොතක නොවේ.

ඔබ භාවිතා කළ නිශ්චිත භාෂාව ගැන ඔබේ ලොකු ලොක්කාට අඩු සැලකිල්ලක් දැක්විය නොහැක. ඔහු ක්‍රමලේඛනය ගැන ටිකක් දන්නේ නම්, ඔබ සී / සී ++ භාවිතා කළ බව ඔහුට කියන්න. එය හරියට “මම යන්ත්‍ර කේතයට සම්පාදනය කළ යුතු භාෂාවක්, ඩීඑල්එල් සහ සියලු සංකීර්ණ දේවල් සමඟ භාවිතා කළෙමි” වැනි ය. මෙය "බාහිර සන්නිවේදනය" කොටසයි.

ඔබ C සහ C ++ යන දෙකටම සම්බන්ධ කළ හැකි පුස්තකාලයක් නිර්මාණය කරන්නේ නම්, ඔබට එය අනිවාර්යයෙන්ම C / C ++ පුස්තකාලයක් ලෙස හැඳින්වීමට අවශ්‍යය. ඇත්ත වශයෙන්ම, යමෙකු අත ඔසවා ඔබ මෙය C ++ ආවරණයක් ඇති C පුස්තකාලයක් ලෙස නොකියන්නේ මන්දැයි විමසනු ඇත. කෙසේ වෙතත් C ++ හට C පුස්තකාල සමඟ සම්බන්ධ විය හැකි බැවින් ඔබට එය කිසිසේත් සඳහන් කිරීමට අවශ්‍ය නොවේ. පිළිතුරු දෙන්න: "ඔව්, ඔබ හරි, මෙය සී / සී ++ පුස්තකාලයක්". මෙය "අභ්‍යන්තර සන්නිවේදනය" කොටසයි.

ඔබ C ++ සඳහා ශබ්දකෝෂ විශ්ලේෂකයක් නිර්මාණය කරන්නේ නම්, එය C සමඟ කෙතරම් හොඳින් ක්‍රියා කරනවාදැයි ඔබ පුදුමයට පත් වනු ඇත. ඔබට ඒ සියල්ල වෙනස් කිරීමට අවශ්‍ය නොවනු ඇත. මෙය "එය තාරාවෙකු සේ පෙනේ නම්" ය. කොටස.

ආදිය.

මා දැක ඇති සී වැඩසටහන් වලින් බහුතරයක් සී ++ කේතය ලෙස වෙනස් නොකර සම්පාදනය කරයි (සහ වැඩ කරයි). ව්‍යතිරේක කිහිපයක් හෝ ප්‍රබන්ධ (කෙසේ වෙතත් බලවත්) ක්‍රමලේඛකයින් ඔබේ ප්‍රතිභානය රවටා ගැනීමට ඉඩ නොදෙන්න. සී සහ සී ++ ඉතා සමීප වන අතර බොහෝ විට අනුකූල වන අතර බොහෝ විට මිශ්‍ර වී එකට ගැලපේ. සී / සී ++ යන පදය භාවිතා වේ. එය භාවිතා කරනුයේ ජාවා හෝ පීඑච්පී නොවන තාක් කල් ඔබ සී හෝ සී ++ සලකා බලන්නේද යන්න ගැටළුවක් නොවන මෙවැනි තත්වයන් විස්තර කිරීම ප්‍රයෝජනවත් බැවිනි . එය "වැරදි" බව අපි දනිමු, නමුත් අපි එය ගණන් ගන්නේ නැත, එය වැරැද්දට වඩා ප්‍රයෝජනවත් වේ.

එය අපයෝජනයට ලක්විය හැකිය, එය මෝඩකමක් විය හැකිය, නමුත් තවමත්, අවශ්‍යතාවයට වඩා වැඩියෙන් නොසැලකිලිමත් වීමෙන් සහ අනෙක් අය තේරුම් ගන්නා පරිදි සන්නිවේදනය කිරීම ප්‍රතික්ෂේප කිරීමෙන් ඔබට ලැබෙන ප්‍රතිලාභ මොනවාදැයි මට විශ්වාස නැත. කිසියම් විශේෂිත තත්වයක් තුළ ඔබට නොසන්සුන් බවක් දැනේ නම්, සරලවම C / C ++ යන සාමාන්‍ය යෙදුම භාවිතා නොකරන්න, නමුත් නඩුවට අදාළ (C හෝ C ++).

අනාගතයට බිය නොවන්න. අපගේ මෙහෙයුම් පද්ධති C හි ලියා ඇත. බොහෝ C / C ++ වර්තමාන මෘදුකාංග නිෂ්පාදනය C ++ තුළ සිදු වේ. මෙම යුවළ මෙහි ටික වේලාවක් රැඳී සිටීමට පැමිණ ඇත. එකක් අනෙකට වඩා නොගැලපීම ගැන කිසිවෙකුට උනන්දුවක් නැත (අනෙක් පැත්තෙන්, ඇත්ත වශයෙන්ම).

ඔබේ කරුණු පිළිබඳව නිශ්චිත වීමට:

1) එය රඳා පවතී. ඔව්, එය ව්‍යාකූලත්වයකට මඟ පෑදිය හැකි විට, ඔබට නොසන්සුන් බවක් දැනෙන විට හෝ එය වැරදි හෝ සන්දර්භයෙන් බැහැර වූ විට. එය ප්‍රමාණවත් යැයි ඔබ සිතන විට නැත.

2) එන් / ඒ

3) මම හිතන්නේ නැහැ, නමුත් මට ස් cry ටික බෝලයක් නැහැ.

4) අදහසක් නැත

5) කිසිවක් මේ දිශාවට තල්ලු නොවන බැවින් මම නොසිතමි


7
.ෝෂාකාරී වන බැවින් අදහස් ඉවත් කරන ලදි.
ක්‍රිස්එෆ්

3
මෙය මෙතරම් ඉහළ නැංවීමට හේතුව කුමක්ද? එය සාවද්‍ය බව සහ ව්‍යාජ ප්‍රකාශ වලින් පිරී ඇත!
සයිබිස්

5
A සයිබිස්, අසත්‍ය හෝ සාවද්‍ය ප්‍රකාශයන් පුළුල් කිරීමට ඔබ කාරුණිකද?
පරිශීලක අංකය

3
ඔබේ තර්කනය අනුගමනය කරමින්, C / C ++ / Objective-C / Fortran / Pascal වලංගු ප්‍රකාශනයක් විය යුතු නමුත් මෙය මෝඩකමක් ලෙස පෙනේ. සී / සී ++ යන යෙදුමේ ඇති ගැටළුව නම් එය කරුණු කිහිපයක් අදහස් කළ හැකි බැවින් එය අපේක්ෂිත අර්ථය ගෙන එනු ඇති බවට ඔබට සහතිකයක් නැත. මගේ භාවිතයේ දී, මිනිසුන් සාමාන්‍යයෙන් එය තේරුම් ගන්නේ "C යනු C ++ හි පැරණි ප්‍රාථමික අනුවාදයක්" ලෙස වන අතර මෙය වැරදිය.
martinkunev

4
මෙම පදයෙහි සහජ වලංගු භාවයෙන් ඔබ්බට, C/C++පැහැදිලි එකක් නොවන අතර එමඟින් ප්‍රයෝජනවත් නොවේ. ඔබේ උදාහරණ අනුගමනය කිරීමෙන්, C/C++ libraryසී ++ එතීම සහිත සී පුස්තකාලයක් හෝ සී එතීම සහිත සී ++ පුස්තකාලයක් අදහස් කළ හැකිය. නැතහොත් පුස්තකාලය මොඩියුල කිහිපයකින් සමන්විත වන අතර සමහර ඒවා සී ++ භාවිතයෙන් සම්පාදනය කර ඇති අතර සමහර ඒවා සී වලින් සම්පාදනය කර ඇත. මෙය කිසිසේත් පැහැදිලි නැත. මට නම්, පුස්තකාලයක් සාදා ඇති බව පැවසීම C and C++වඩාත් පැහැදිලිය, නැතහොත් C library with compatibility with C++වඩාත් පැහැදිලි ය. මෙහි අවිනිශ්චිතතාව ඇත්තේ භාෂා දෙකක් පමණි, මෙම “සන්නිවේදන උපාය” වැඩි විස්තර සඳහා භාවිතා
කරන්නැයි සිතන්න

43

ගලායාමට එරෙහිව යාම එය සන්දර්භය මත රඳා පවතී .

"මෙය සී / සී ++ වැඩසටහනක්" වැනි දෙයක් පවසන විට "සී / සී ++" යන යෙදුම සාමාන්‍යයෙන් සුදුසු නොවේ, නමුත් මෙය වෙනත් පිළිතුරු වල ගැඹුරට ගවේෂණය කර ඇත.

කෙසේ වෙතත්, C / C ++ සුදුසු විය හැකි සන්දර්භයන් තිබිය හැකිය.

  • සාමාන්‍යයෙන් C සහ C ++ API දෙකම ඇති විවිධ පුස්තකාල තිබේ. මම හිතන්නේ ඔබ එවැනි දෙයක් සී / සී ++ පුස්තකාලයක් ලෙස හැඳින්වුවහොත් එය සත්‍යයෙන් දුරස් නොවේ. අපි මිනිසුන් තොරතුරු සම්පීඩනය කිරීමට කැමතියි, එබැවින් "opencv යනු C / C ++ පුස්තකාලයක්" යැයි පැවසීම කෙටි, පැහැදිලි හා තේරුම්ගත හැකි ය, එය "opencv යනු පුස්තකාලයක් වන අතර එය C සහ C ++ යන ශීර්ෂයන් සමඟ නැව්ගත කර ඇත" යනුවෙන් පැවසීම හා සසඳන්න.
  • ඔබට භාෂා නිර්මාණය සහ වාක්‍ය ඛණ්ඩය ගැන කතා කළ හැකිය. භාෂා වාක්‍ය ඛණ්ඩයේ දෘෂ්ටි කෝණයෙන්, භාෂාවකට සී / සී ++ හා සමාන සින්ටැක්ස් ඇති බව ඔබට පැවසිය හැකිය.
  • ඔබ කේතීකරණ තරඟයක් සංවිධානය කරන අතර, C සහ C ++ වලින් ලියා ඇති විසඳුම් දෙකම ඔබ පිළිගනී
  • ඔබ නව ක්‍රමලේඛකයෙකු කුලියට ගන්නා අතර බොහෝ කාර්යයන් C හෝ C ++ වනු ඇත, එබැවින් ක්‍රමලේඛකයා භාෂා දෙකම දැන ගනු ඇතැයි අපේක්ෂා කෙරේ. කාවැද්දූ සංවර්ධනයේදී එය සාමාන්‍ය දෙයක් වන අතර, සමහර (සාමාන්‍යයෙන් ඉතා කුඩා) ක්ෂුද්‍ර පාලක සඳහා C වඩාත් සුදුසු වන අතර අනෙක් ඒවා සඳහා C ++ වඩාත් සුදුසු වේ. මෙම අවස්ථාවේදී ඔබ සී / සී ++ ක්‍රමලේඛකයෙකු සොයන බව පැවසිය හැකිය.

10
P.SO හි පොදු එකඟතාවයට එරෙහි ආස්ථානයන් මම දකිමි. (එහිදී ඔබ "වේගවත් හා අතිශයෝක්තියෙන් යුත්" එකම හා අද්විතීය නිවැරදි දෙය "ලෙස පෙනෙන ඕනෑම දෙයක් ඉහළට ඔසවා අනෙක් ඒවා පහත් කොට සලකන්න) සුපුරුදු පරිදි සාදරයෙන් පිළිගනිමු. යාලුවනේ, වැඩසටහන්කරණය ආගමක් නොවන අතර මෙම වෙබ් අඩවිය පූජනීය පොතක් නොවේ.

16
පසුගිය වෙඩි ස්ථානය ඇත්තටම ප්රධාන ගැටලුව සිටීමට හැකිවූයේ: (1) පුද්ගලයකු ප්ලොරිඩාවේ බව ඔබ සොයන්නේ එක්කෝ C හෝ C ++, (2) දන්නා බව පුද්ගලයෙකු දෙකම C සහ C ++ හෝ (3) මේ වන අහන්න ව්යාකූල බව පුද්ගලයෙකු විවිධ භාෂා. තුන්වන තටාකය වැඩීමට උදව් නොකරන්න.
5gon12eder

10
ඔබ සැබවින්ම සොයන්නේ එය නම් අවසාන වෙඩි උණ්ඩය "සී සහ සී ++ පිළිබඳ අත්දැකීම් ඇති ක්‍රමලේඛකයා" ලෙස වඩාත් හොඳින් ප්‍රකාශ වනු ඇත. පළපුරුද්ද යටතේ "සී සහ සී ++" හෝ "සී හෝ සී ++" යන ශීර්ෂ ලැයිස්තු අවශ්‍ය වන "ක්‍රමලේඛකයා" නම් රැකියා දැන්වීමක් "ක්‍රමලේඛකයා" යන මාතෘකාවට වඩා සැලකිය යුතු ලෙස වෙනස් නොවන අතර අවශ්‍ය සුදුසුකමක් ලෙස "සී / සී ++" ලැයිස්තුගත කරයි, නමුත් එය බොහෝ වැඩි නිශ්චිත. ඔබ එවැනි රැකියාවක් සොයන පුද්ගලයාගේ ප්‍රකාශනයේ නිරවද්‍යතාවය සැබවින්ම අගය කළ හැකිය.
සීවීඑන්

10
ලිඛිත භාෂාවෙන්, '/' එය සාමාන්‍යයෙන් අර්ථකථනය කරනු ලබන්නේ තාර්කික orලෙස නොව තාර්කික ලෙස ය xor. එබැවින් එය එකක් හෝ දෙකම වේ. රැකියා ලැයිස්තුගත කිරීමේදී ඔබ C හෝ C ++ හෝ දෙකම දන්නවා. දැන්, මට හැඟෙන්නේ බොහෝ අය මෙම පදය පිළිබඳව ආගමික වශයෙන් කටයුතු කරන බවයි. ඒ හොඳ සී ක්රමලේඛකයෙක් හොඳින් දඩ C ++ ස්වාධීනව භාෂා දෙකම කොච්චර වෙනස් අහුලා කරනු ඇත. මම පීඑච්පී කේතනය කිරීම ආරම්භ කළ අතර පසුව මම ස්කාලා වෙත ගියෙමි (සම්පූර්ණයෙන්ම වෙනස් භාෂා දෙකක්) සී ක්‍රමලේඛකයෙකුට සී ++ හෝ වයිස්වර්සා ලබා ගැනීමට නොහැකි වූයේ ඇයි? C / C ++ පදය නිවැරදි සන්දර්භය තුළ භාවිතා කරන්නේ නම් යම් කුසලතාවයක් ඇත.
ILikeTacos

4
C හෝ C ++ ලෙස සම්පාදනය කරන විට වැඩ කිරීමට අදහස් කරන වැඩසටහනක් හෝ වෙනම C සහ C ++ සංරචක සහිත වැඩසටහනක් විස්තර කිරීමට ඔබට C / C ++ භාවිතා කළ හැකිය.
user253751

30

පොදුවේ ගත් කල, SO භාවිතා කරන්නන් ප්‍රශ්නය අසන පුද්ගලයාගෙන් භාෂාවක් තෝරා ගැනීමට අසයි: C හෝ C ++. මන්ද?

C සහ C ++ අතර බොහෝ සියුම් වෙනස්කම් තිබේ. උදාහරණයක් ලෙස, C ++ constහි, ගෝලීය විෂය පථයේ විචල්‍යයක් ප්‍රකාශයට පත් නොකළහොත් අභ්‍යන්තර සම්බන්ධතා ඇත extern, නමුත් C හි එය ප්‍රකාශයට පත් නොකළහොත් බාහිර සම්බන්ධතාවයක් staticඇත. "C / C ++" යැයි පැවසීමෙන්, OP ඔවුන්ගේ ප්‍රශ්නයට පිළිතුර C සහ C ++ යන දෙකෙහිම එක හා සමාන බව දැනුම තහවුරු කරයි. මෙය අනවශ්‍ය ලෙස පිළිතුරු දෙන අයට අපහසු වේ.

  • සමහර විට අපට කේතය එක් භාෂාවක හෝ වෙනත් භාෂාවක වලංගු නොවන බව හඳුනාගත හැකිය (නිදසුනක් ලෙස, ඇඟවුම් සිට void*දර්ශකයේ සිට වස්තුව දක්වා ව්‍යංග පරිවර්තනය C ++ වලංගු නොවේ). මෙය කරදරයකි. ඔබට C හි වලංගු නමුත් C ++ නොවන කේත කැබැල්ලක් ඇති විට ඔබ "C / C ++" කියන්නේ ඇයි? ඔබ C අදහස් කළේද, නැතහොත් මෙය C ++ වීමට අදහස් කරන කේතයේ දෝෂයක්ද?

  • සමහර විට භාෂාව අනුව පිළිතුර වෙනස් වේ (නිදසුනක් ලෙස, විචල්‍ය දිග අරා C99 හි පවතින නමුත් C ++ හි නොවේ). ඔබ කතා කරන්නේ කුමන භාෂාව ගැනදැයි අප නොදන්නේ නම්, එක්කෝ අපට පමණක් අනුමාන කළ යුතුය, නැතහොත් එකක් පමණක් ප්‍රයෝජනවත් වන විට පිළිතුරක් ලිවිය යුතුය, මන්ද ඔබ ඇත්ත වශයෙන්ම භාවිතා කරන්නේ කුමන භාෂාවද යන්න ඔබ දන්නා බැවිනි ; ඔයා අපිට කියන්නේ නැහැ!

  • සමහර විට පිළිතුර භාෂා දෙකටම එක හා සමානයි, නමුත් එය ස්ථිරයි. උදාහරණයක් ලෙස, මම සිතන්නේ සී සහ සී ++ එකම පූර්ණ සංඛ්‍යා පරිවර්තන නීති ඇති නමුත් ඇත්ත වශයෙන්ම, සැබවින්ම විශ්වාසයි නම්, මට ප්‍රමිති දෙකම ප්‍රවේශමෙන් කියවිය යුතුය. නැවතත්, මෙය ඔබ එක් භාෂාවක් ගැන පමණක් සැලකිලිමත් වන විට අවශ්‍ය ප්‍රමාණය මෙන් දෙගුණයක් වැඩ කිරීමට මට හේතු වේ.

කෙසේ වෙතත්, ඔබගේ අනෙක් ප්‍රශ්නවලට පිළිතුරු දීමට:

  1. ඔව්.

  2. ඔබ C සහ C ++ කේත එකට සම්බන්ධ කරන්නේ නම්, ටැග් දෙකම භාවිතා කිරීම පිළිගත හැකි නමුත් කරුණාකර සෑම ගොනුවක්ම තිබෙන්නේ කුමන භාෂාවෙන්ද යන්න සඳහන් කරන්න.

  3. සමහර විට බිඳෙන වෙනස්කම් ඇත, නමුත් ඒවා දුර්ලභ වන අතර සාමාන්‍යයෙන් බලපෑමෙන් සීමා වේ (එසේ නොමැතිනම් ඒවා අනුමත නොකෙරේ). උදාහරණයක් ලෙස, autoC ++ 11 හි.

  4. ඔවුන් කෙලින්ම සහයෝගයෙන් කටයුතු කරන බව මම නොසිතමි, නමුත් ඔවුන් අනෙක් භාෂාවේ වර්ධනයන් කෙරෙහි අවධානය යොමු කරන අතර අනුකූලතාව වඩාත් අපහසු වන වෙනස්කම් හඳුන්වා දීමෙන් වැළකී සිටීමට උත්සාහ කරති.

ඔබට භාෂා දෙකම ගැන දැන ගැනීමට ඇත්ත වශයෙන්ම අවශ්‍ය නම්, එය හොඳයි, ඔබේ ප්‍රශ්නයේදී ඔබට එය පැවසිය හැකිය. ඔබ "සී / සී ++" යැයි පැවසූ විට, ඔබ අදහස් කරන්නේ කුමක්දැයි මට විශ්වාස නැත, ඇත්ත වශයෙන්ම ඔබ භාෂා දෙක ගැන උපකල්පනයක් කරන බවක් පෙනේ.


7
C සහ C ++ මංසන්ධියේ කේත ලියන, යතුරු ලියනය සඳහා C ++ සම්පාදකයක් භාවිතා කරන නමුත් කේත උත්පාදනය සඳහා C සම්පාදකයෙකු සිටින බව මම දනිමි. එය ඇත්ත වශයෙන්ම අර්ථවත්ද නැද්ද යන්න ගැන මට කිසිම අදහසක් නැත. කෙසේ වෙතත්, එය යමෙකු ලප ඇති (ඉතා Linux කර්නලය ගේ ඒකාබද්ධ වස්තූන්-පිණිසයි රියදුරු මාදිලිය වැදගත්) නැවත නම් කිරීමට ඉදිරිපත් වූ විට, Linux කර්නල් Mailinglist මත අවුරුදු කීපයකට වරක් නැඟී එන මාතෘකාවක් වේ struct classවගේ දෙයක් කිරීමට struct klassහරියටම එම නිසා, සහ එවිට ලිනස් විසින් නිරන්තරයෙන් වෙඩි තබනු ලැබේ.
ජෝග් ඩබ් මිට්ටාග්

3
Ö ජෝර්ග් ඩබ්ලිව් මිට්ටාග්: “සී සහ සී ++” යන පොදු උප කුලකය සඳහා “සී / සී ++” කෙටිකාලීන ලෙස භාවිතා කළ කිසිවෙකු මට හමු වී නැත. පොදු උප කුලකයේ හිතාමතාම වැඩ කරන පුද්ගලයින් එය කෙටියෙන් නොකිරීමෙන් පැහැදිලි කරයි.
බාර්ට් වෑන් ඉන්ගන් ෂෙනෝ

2
පොදුවේ නොව, ස්ටැක් එක්ස්චේන්ජ් ප්‍රශ්න වල සී / සී ++ භාවිතය පිළිබඳ මෙය හොඳ පිළිතුරකි .
user253751

Art බාර්ට්වාන් ඉන්ජෙන්ෂෙනෝ ඔබ කොපමණ කමිටු සාමාජිකයින් හමුවී ඇත්ද?
කුතුහලයෙන්

17

C යනු C ++ හි උප කුලකයක් හෝ පන්ති සමඟ C ++ C බව මට නිතරම පැවසුවා. C ++ x0, C ++ 11 (හෝ නූතන C ++ 11/14/17) පෙනෙන තෙක් එය නිහ quiet සත්‍යයකි.

C කිසි විටෙකත් C ++ හි උප කුලකයක් නොවීය. උදාහරණයක් ලෙස C89 යනු C ++ 98 හි උප කුලකයක් නොවේ.

උදාහරණ කිහිපයක්:

  • ශ්‍රිත පරාමිති ප්‍රකාශනය සඳහා වන C89 අනන්‍යතා-ලැයිස්තු පෝරමය C ++ හි සහය නොදක්වයි
  • C89 සහ C ++ 98 අක්ෂර නියතයන් සඳහා විවිධ වර්ග ඇත
  • C89 සහ C ++ 98 සංගීත වචන සඳහා විවිධ වර්ග තිබේ
  • තාර්කික ක්‍රියාකරුවන් C89 සහ C ++ 98 ( intඑදිරිව bool) වලින් විවිධ වර්ග ලබා දෙයි
  1. මම C / C ++ යන යෙදුම භාවිතා කිරීම නතර කළ යුතුද?

ඔව්.

  1. # 1 සඳහා පිළිතුර ඔව් නම්, සී සහ සී ++ මිශ්‍රණයක් භාවිතා කරන වැඩසටහනක් මා හඳුන්වන්නේ කෙසේද?

වැඩසටහනක් C හෝ C ++ වේ (සමහර මූලික වැඩසටහන් පවා C හෝ C ++ සම්පාදකයෙකු සමඟ සම්පාදනය කළ හැකි නම්). එය සම්පාදනය කිරීමට ඔබ භාවිතා කරන්නේ කුමන සම්පාදකයද? එය ඔබේ ප්‍රශ්නයට පිළිතුරු දිය යුතුය. හර්බිසන් සහ ස්ටීල් විසින් සී සහ සී ++ යන පොදු උප කුලකයක් නම් කිරීම සඳහා ක්ලීන් සී යන පදය භාවිතා කරන ලද නමුත් එය නරක අදහසක් යැයි මම සිතමි.

සංස්කරණය කරන්න : කෙසේ වෙතත්, තාක්ෂණික වශයෙන් ඔබට එක් වැඩසටහනක C සහ C ++ වස්තු ගොනු සම්බන්ධ කළ හැකි බව මම පිළිගනිමි, නමුත් OTH බොහෝ වැඩසටහන් එකම වැඩසටහනක මිශ්‍ර කිරීමට අවසර දී ඇති අතර උදාහරණයක් ලෙස ජාවා සහ සී ++. මම හිතන්නේ C / C ++ වැඩසටහන භාවිතා කිරීම එය C / C ++ නමින් තනි භාෂාවකින් ලියා ඇති බවට ඇති ව්‍යාකූලතාවයට හේතු වේ.

  1. මේ දෙකම 'වෙනස්' භාෂාවන් වන බැවින්, යම් අවස්ථාවක දී C ++ සම්පාදකයින් C භාෂාවෙන් ලියා ඇති ආධාරක කේතය නැවැත්වීමට ඉඩ ඇත (නූතන c ++ දර්ශකයන්, ගතික මතක හැසිරවීම වැනි මූලික දේවල් සඳහා C මානසිකත්වයෙන් බැහැර වන හෙයින්)

_Genericකිසිදු C ++ අනුවාදයකින් සහය නොදක්වන C99 හෝ C11 හි බොහෝ විශේෂාංග (උදාහරණ: විචල්‍ය දිග අරාව, නම්‍යශීලී අරා සාමාජික , ...) ඇත.


නැවත බහු භාෂා වැඩසටහන්: ජේඑන්අයි පුළුල් ලෙස භාවිතා කරන වැඩසටහනක් සී / ජාවා වැඩසටහනක් ලෙස හැඳින්විය හැකිය. භාෂා දෙකක් එකට භාවිතා කර ඇති නිසා ඒවා එකට සම්පාදනය වී ඇති බවක් අදහස් නොවේ.
user253751

1
straustrup.com/bs_faq.html#C-is-subset "දැඩි ගණිතමය අර්ථයෙන් ගත් කල, C යනු C ++ හි උප කුලකයක් නොවේ ... කෙසේ වෙතත්, C ++ විසින් C මඟින් සහාය දක්වන සෑම ක්‍රමලේඛන තාක්‍ෂණයකටම සහය දක්වයි ... එසේ වීම සාමාන්‍ය දෙයක් නොවේ පැය කිහිපයකින් සී ආකාරයේ C ++ සඳහා දස සී පේළි දහස් පරිවර්තනය කිරීමට හැකි. මේ අනුව, C ++ ANSI C බොහෝ වූ පරාසයක පරිදි වේ ANSI C K & R C ක පරාසයක වන අතර, ISO C ++ තරම් සී ක පරාසයක පරිදි ++ එය 1985 දී පැවති පරිදි හොඳයි ලියන ලද C ද නීතිමය සී විය ++ සමාධිගත උදාහරණයක් ලෙස, Kernighan සහ රිචී සෑම උදාහරණයක්:.. "භාෂාව (2 වන සංස්කරණය) ක්රමලේඛ මෙහිදී C" ද C ++ වැඩසටහන ".
බෙන්

C "සී ක්‍රමලේඛන භාෂාව (2 වන සංස්කරණය)" හි පළමු වැඩසටහන (හෙලෝ වර්ල්ඩ්) බෙන් කිරීම, සී ++ හි වලංගු නොවන ප්‍රධාන ආපසු වර්ගය මඟ හැරේ.
ouah

1
@ouah, මහාචාර්ය ස්ට්‍රෝස්ට්‍රප්ට එක වරක් මග හැරුණු බවක් පෙනේ :-) C11 හි එය අවසර නැති බව සලකන්න :-) C ++ හි පෙර සංස්කරණ වලදී එය අවසර දී ඇති බව විශ්වාසයි.
බෙන්

4
@ouah, එය C ++ හි පළමු අනුවාදය නොවේ. මෙම පොත 1988 සිට වන අතර එකල කිසිදු භාෂාවක් ISO ප්‍රමිතියක් නොවීය. එකල C ++ හි වර්තමාන අනුවාදය වූයේ Bjarne Stroustrup ගේ 1985 පොතයි.
බෙන්

17

සමහර වැඩසටහන් C සහ C ++ මිශ්‍රණයකින් ලියා ඇත

මෙය ජීවිතයේ සත්‍යයක් පමණි. ඔබට C සහ C ++ වලින් වස්තු ගොනු සම්පාදනය කර ඒවා එකට සම්බන්ධ කළ හැකිය. ප්රති result ලය තරමක් සාධාරණ ලෙස "සී / සී ++ වැඩසටහනක්" ලෙස හැඳින්විය හැකිය.

නමුත් එය සමස්තයක් ලෙස වැඩසටහන පමණි. තනි සම්පාදන ඒකක ගැන කුමක් කිව හැකිද?

C හි උප කුලකයක් වන අතර එය C ++ හි උප කුලකයක් ද වේ

එම උප කුලකයේ ලියා ඇති වැඩසටහනක් (හෝ සම්පාදන ඒකකය) අනුකූල C සහ C ++ සම්පාදකයින් යටතේ සම්පාදනය කර හැසිරෙනු ඇත. එවැනි වැඩසටහනක් හෝ ගොනුවක් නිවැරදිව "සී / සී ++ වැඩසටහනක්" හෝ "සී / සී ++ ගොනුවක්" ලෙස හැඳින්විය හැකිය.

සී සහ සී ++ වැඩසටහන් දෙකෙහිම ශීර්ෂ ගොනුවක් වැනි අර්ධ වැඩසටහනක් භාවිතා කළ හැකිය. එවැනි ශීර්ෂ ගොනු නිවැරදිව C / C ++ ශීර්ෂයන් ලෙස හැඳින්විය හැකිය.

මහාචාර්ය බර්න් ස්ට්‍රෝස්ට්‍රප් උපුටා දැක්වීම:

C යනු C ++ හි උප කුලකයක්ද?

දැඩි ගණිතමය අර්ථයෙන් ගත් කල, C යනු C ++ හි උප කුලකයක් නොවේ. වලංගු C වන නමුත් වලංගු නොවන C ++ සහ C සහ C ++ වල වෙනස් අර්ථයක් ඇති කේත ලිවීමේ ක්‍රම කිහිපයක් තිබේ. කෙසේ වෙතත්, සී ++ සහාය දක්වන සෑම ක්‍රමලේඛන තාක්‍ෂණයකටම සී ++ සහාය දක්වයි. සෑම සී වැඩසටහනක්ම එකම ධාවන කාලය සහ අභ්‍යවකාශ කාර්යක්ෂමතාවයෙන් සී ++ හි ලිවිය හැකිය. පැය කිහිපයකින් ඇන්සි සී පේළි දස දහස් ගණනක් සී-ස්ටයිල් සී ++ බවට පරිවර්තනය කිරීම සාමාන්‍ය දෙයක් නොවේ. මේ අනුව, C ++ යනු ANSI C හි සුපිරි කට්ටලයක් වන අතර ANSI C යනු K&R C හි සුපිරි කට්ටලයක් වන අතර ISO C ++ 1985 දී පැවති පරිදි C ++ හි සුපර්සෙට් එකක් වේ.

හොඳින් ලියා ඇති C නෛතික C ++ ද වේ. උදාහරණයක් ලෙස, කර්නිගන් සහ රිචී හි සෑම උදාහරණයක්ම: "සී ක්‍රමලේඛන භාෂාව (2 වන සංස්කරණය)" ද සී ++ වැඩසටහනකි.

ඉතින් ඔව් C / C ++ වැනි දෙයක් තිබේ. එය වලංගු C සහ වලංගු C ++ යන ඕනෑම දෙයකි.

සී පූර්ව සකසනය සී භාෂාවේ කොටසකි. C ++ පෙර සකසනය C ++ භාෂාවේ කොටසකි

ඔබට සී හෝ සී ++ යටතේ සම්පාදනය කර වෙනස් විය හැකි සම්පාදන ඒකකයක් ලිවිය හැකිය . උදාහරණයක් ලෙස, එය C හි සම්පාදනය කරන ලද මූලික ක්‍රියාකාරිත්වය තිබිය හැකි නමුත් C ++ වලින් සම්පාදනය කර ඇත්නම් C ++ පුස්තකාලයකින් ප්‍රයෝජන ගන්න.

වැඩසටහන අත්‍යවශ්‍යයෙන්ම සමාන නම්, නමුත් අමතර විශේෂාංග සහිතව, එය එකම වැඩසටහන යැයි පැවසීම හරියටම වැරදිය . එය එකම, නමුත් වෙනස් ය.

බොහෝ සී ක්‍රමලේඛකයන්ට අවම වශයෙන් සී ++ හෝ ඊට වෙනස්ව කළ හැකිය

එවැනි අයෙකු සී / සී ++ ක්‍රමලේඛකයෙකු ලෙස හැඳින්වීම අසාධාරණ නොවේ. ඔව්, ඔවුන් බොහෝ විට එක් විශේෂීකරණය කරන්න, නමුත් වචනාර්ථයෙන් කරන්න පුළුවන් නො වූ නිසි C හෝ C ++ ක්රමලේඛකයෙකි කරන කිසිවෙක් නැත කිසිදු අනෙක් භාෂාව? එක්තරා විදියකට, ඔවුන් සියල්ලෝම සී / සී ++ ක්‍රමලේඛකයන් නොවේද?

"සී / සී ++" යැයි පැවසීමේ කිසිදු වරදක් නැත. වැදගත් දේ තේරුම් ගෙන ඇත

ඉංග්‍රීසි භාෂාව වාක්‍ය ප්‍රකාශ කිරීමේ මෙවලමක් නොවේ . ඔබට තර්කනය සඳහා ඉංග්‍රීසි භාවිතා කළ හැකිය , නමුත් සාධාරණ හා විශාල උත්සාහයකින්.

මෙයට හේතුව වචනවලට ස්වභාවිකවම නිශ්චිත අර්ථයන් නොමැති නමුත්, නොපැහැදිලි වලාකුළු සහ අර්ථයන් ය. වැදගත් දෙය නම් ඔබ පවසන දේ මිනිසුන් තේරුම් ගන්නේ නම්.


5
@ BЈовић කුඩා පාරිභාෂිතයක පිළිගැනීම පිළිබඳව ඔවුන් ඔබ සමඟ එකඟ නොවන බැවින් ඔවුන් වෙනස තේරුම් නොගන්නා බවත් අකාර්යක්ෂම බවත් ඔබ නිගමනය කරයි. එය කීම අසාධාරණ දෙයක්.
බෙන්

4
@ el.pescado ඔව්. මිනිසුන් ඇත්ත වශයෙන්ම PHP / JavaScript වෙත යොමු වන බව ඔබට පෙනී යනු ඇත. ඇයි නැත්තේ? කාරණය තේරුම් ගත යුත්තේ වචන වලින් ක්‍රීඩා කිරීම නොවේ.
බෙන්

10
@ BЈовић ඔබ කිසිම තේරුමක් නැහැ. ඒවා "සම්පූර්ණයෙන්ම වෙනස්" නොවේ. C ++ යනු C ට වඩා විශාල භාෂාවකි, නමුත් එයට C සියල්ලම ඇතුළත් වේ. C ++ නිසි සුපර්සෙට් එකක් වීම වළක්වන නොගැලපීම් ඇති නමුත් ඒවා කුඩා වන අතර අතිරේක වෙන් කර ඇති වචන මෙන් තවත් කැස්ට් කිහිපයක් අවශ්‍ය වේ, නමුත් එය බොහෝ සෙයින් අවශ්‍ය වේ. එය බොහෝ දුරට නිසි සුපර්සෙට් එකකි .
බෙන්

7
@ BЈовић සමහර විට මා ලියා ඇති දේ ඔබට නොතේරුණි. සෑම අවස්ථාවකදීම සී වැඩසටහනක් අනුවර්තනය කළ හැක්කේ කෙසේදැයි බැලීමට ඔබ මෙහි නොබලන්නේ මන්ද එය සී ++ ලෙස සම්පාදනය කරයි. david.tribble.com/text/cdiffs.htm#C99-vs-CPP9
බෙන්

7
@ BЈовић ඔබ පාරිභාෂිතය පිළිබඳ දැඩි උනන්දුවක් දක්වන්නේ නම්, C යනු “ ක්‍රියාකාරී ” නොව “ ක්‍රියාපටිපාටිය ” බව ඔබ දැන සිටිය යුතුය - අන් අයට අකාර්යක්ෂමතාව පිළිබඳ චෝදනා එල්ල කිරීමට පෙර ඔබ තේරුම් ගැනීමට කැමති වෙනසක්.
ආර්එම්

14
  1. මම C / C ++ යන යෙදුම භාවිතා කිරීම නතර කළ යුතුද?

නියත වශයෙන්ම. මෙම යෙදුම භාවිතා කිරීමට අදහස් කරන්නේ කුමක්ද යන්න පැහැදිලි නැත, සමහර විට, මෙම පදය භාවිතා කරන පුද්ගලයා වෙනුවෙන් C සහ C ++ යනු කුමක්ද යන්න පිළිබඳ ව්‍යාකූලත්වය හැර.

මෙම ව්‍යාකූලත්වය එතරම්ම කලකිරීමට පත්වන ප්‍රභවයක් වන බැවින්, බොහෝ අය ඒ පිළිබඳව තරමක් හැඟීම්බර වී ඇති අතර, එම යෙදුමේ පෙනුම පමණක් ඔබගේ දායකත්වය පිළිබඳව නිෂේධාත්මක වීමට ප්‍රමාණවත් වේ. මෙය මෝඩකමක් ලෙස පෙනුනද එය අප සතුව ඇති බව පෙනේ.

“සී / සී ++” ගැන කතා කරනවා වෙනුවට ඔබ අදහස් කරන්නේ කුමක්ද යන්න පැහැදිලි කරන යෙදුමක් භාවිතා කරන ලෙස මම නිර්දේශ කරමි.

  • ඔබ තුළ සී දෙයක් හෝ නොතිබේ ද C ++ සඳහා සත්ය විය නොහැකි බව ගැන කතා කරනවා නම්, සරලව කියන්නේ සී .

    උදාහරණය: C හි ශ්‍රිතය ප්‍රකාශ කළ යුත්තේ කෙසේද main?

    මුලදී, C ++ සඳහා පිළිතුර සමාන බව පෙනේ: int main()හෝ int main(int, char**). නමුත් සාකච්ඡාව ඉදිරියට යත්ම, C ++ හි, ශ්‍රිතය ගෝලීය විෂය පථයෙන් ප්‍රකාශයට පත් කළ යුතු බව පෙන්වා දීම අදාළ විය හැකිය namespace. අනෙක් අතට, mainC ++ නොපැමිණෙන අතර C නැවත නැවත ඇමතීමට ඉඩ දෙයි . C ++ හි, return 0;ඔබ “වැටුණොත්” යන්නෙන් ගම්‍ය වේ , mainනමුත් C හි returnප්‍රකාශය ඕනෑම මාර්ගයක අවශ්‍ය වේ. ලැයිස්තුව දිගින් දිගටම සිදුවන අතර, සාකච්ඡා කළ යුතු භාෂාව කුමක්දැයි ඔබ ඉදිරියෙන් පැහැදිලි කළහොත් එය සාකච්ඡාව වඩාත් සරල කරයි.

  • ඔබ C ++ හි යමක් ගැන කතා කරන්නේ නම් එය C සඳහා සත්‍ය විය හැකි හෝ නොවිය හැකිය, C ++ කියන්න .

    උදාහරණය: සී ++ හි malloc()සංස්කරණයක් intමුලින් සියලු ශුන්‍ය වේ ද?

    සී සඳහා කෙටි පිළිතුර සමාන වේ: නැත. නමුත් පිළිතුර ඉදිරියට callocයත්ම, C ++ හි හොඳ විකල්පයක් std::vector<int>වනු ඇති බව පෙන්වා දීම වටී, C ++ තුළ, භාවිතා කිරීම වඩා හොඳ තේරීමක් විය හැකිය.

  • ඔබ C, හා C ++ අතර සමානත්වයක් පෙන්වා කිරීමට අවශ්ය නම්, කියන්න C සහ C ++ .

    උදාහරණය: දී C සහ C ++, එම sizeofintඅර්ථ ක්රියාත්මක වන අතර, සංග්රාහකයන් සහ නිර්මිතයන් අතර වෙනස් විය හැක.

    මෙහිදී අපට පෙන්වා දීමට අවශ්‍ය වන්නේ සී සහ සී ++ එකම ආකාරයකින් හැසිරෙන බවයි. අපි පැහැදිලිවම භාෂා දෙකම ගැන කතා කරමු .

මම ඇත්ත වශයෙන්ම නිර්දේශ කරන්නේ ඔබ වඩාත් නිශ්චිත විය යුතු අතර “C” හෝ “C ++” ගැන පමණක් නොව නිවැරදි අනුවාදය ගැනද කතා කරන්න. භාෂා දෙකම විකාශනය වෙමින් පවතින අතර වැනි මෝඩ ප්‍රකාශයකි

C ++ සහය /* … */සහ // …අදහස් දක්වන අතර C පමණක් /* … */ශෛලියට සහය දක්වයි .

හරි හෝ වැරදි නොවේ.

  1. # 1 සඳහා පිළිතුර ඔව් නම්, සී සහ සී ++ මිශ්‍රණයක් භාවිතා කරන වැඩසටහනක් මා හඳුන්වන්නේ කෙසේද?

භාෂාවන් අතිච්ඡාදනය වී ඇති හෙයින්, සෑම සී වැඩසටහනකම සී ++ හා අනෙක් අතට පෙනෙන කොටස් අඩංගු වේ . එසේ වුවද, කතුවරුන් බොහෝ විට සී හෝ සී ++ සම්පාදකයක් භාවිතා කර ඇත. එබැවින් C වැඩසටහන සම්පාදකයෙකු සමඟ සම්පාදනය කර ඇත්නම් “ C ” හි ලියා ඇති අතර “ C ++ සම්පාදකයෙකු භාවිතා කරන්නේ නම්“ C ++ වලින් ලියා ඇත ”යනුවෙන් පවසන්න , ඔවුන් නවීන C ++ විශේෂාංග භාවිතා කිරීම ප්‍රතික්ෂේප කළත්. සමහර අය C ++ කේතය C-style C ++ ලෙස හඳුන්වයි . අධික ලෙස පැටවීම, ව්‍යතිරේක, බහුමාපකය, සැකිලි සහ I / O ධාරාවන් නොමැති වීම එවැනි කේතයක පොදු ලක්ෂණයකි.

, ඒ වෙනුවට, සමහර ගොනු C ලියා හා C කම්පයිලරය සමග සම්පාදනය සහ සමහර නම් වෙනත් ගොනු C ++ ලියා හා C ++ compiler සමග සම්පාදනය, පසුව වස්තුව ගොනු එකට බැඳී, මම වැඩසටහන ලියා ඇත "කියා කියන්නේ යම් ඇත්ත වශයෙන්ම ඔබ දැනටමත් කර ඇති පරිදි C සහ C ++මිශ්‍ර කිරීම .

කෙසේ වෙතත්, ඒ වෙනුවට, කතුවරුන් සෑම ලිපිගොනුවක්ම සී හෝ සී ++ සම්පාදකයෙකු සමඟ සම්පාදනය කළ හැකි අයුරින් ලිවීමට මහත් සැලකිල්ලක් දැක්වූයේ නම් සහ එහි ප්‍රති program ලයක් ලෙස ඇති වැඩසටහන එකම දේ කරයි නම්, ඔබට මෙසේ පැවසිය හැකිය “වැඩසටහන C සහ C ++ හි පොදු උප කුලකයක ලියා ඇත .

දෙවැන්න බොහෝ විට සී සහ සී ++ කේත අතර බෙදා ගත යුතු ශීර්ෂ ගොනු සඳහා වේ. එවැනි කේත ලිවීම පහසු නැත. ඔබ එවැනි නිර්මාණය කරන පමණක් භාවිතා වූ බව තවදුරටත් අවධාරණය කළ යුතු නම්, C සහ C ++ වලංගු බව හා වෙනස් සම්පාදක වෙළෙන්දන් විසින් පුළුල් ලෙස සහය දක්වයි, යන වචනය සඳහා එහා මෙහා ගෙන යා හැකි C සහ C ++ පොදු කුලකයක් අවධාරණය කිරීම සඳහා භාවිතා කළ හැක.

  1. මේ දෙකම “වෙනස්” භාෂාවන් වන බැවින්, යම් අවස්ථාවක දී සී ++ සම්පාදකයින් සී භාෂාවෙන් ලියා ඇති කේත වලට සහය දැක්වීම නවතා දැමිය හැකිද? (නූතන සී ++, සී මානසිකත්වයෙන් වෙනස් වන්නේ පොයින්ටර්ස්, ගතික මතක හැසිරවීම වැනි මූලික දේවල් සඳහා ද?)

මට මෙම ප්‍රශ්නය තේරෙන බව මට විශ්වාස නැත. C සහ C ++ සිට ඇත , විවිධ භාෂා, ඔබ බලාපොරොත්තු නොවන ඔවුන්ගෙන් එක් සඳහා සම්පාදක අනෙක් සඳහා ලිඛිත වැඩසටහනක් භාර කළ හැකිය. කෙසේ වෙතත්, සම්පාදකයින් බොහෝ විට මොඩියුලර් ආකාරයෙන් නිර්මාණය කර ඇති අතර සම්පාදකයෙකුට C ++ ඉදිරිපස කෙළවරක් තිබේ නම් , අවස්ථාවන් හොඳ නම් එයට C ඉදිරිපස අන්තයක් ද ඇත. (එවිට ඔබට අවශ්‍ය කුමන ඒවා විධාන රේඛා ස්විචයකින් හෝ ඒ හා සමාන ආකාරයකින් තෝරා ගනු ඇත.) භාෂා දෙකම පුළුල් ලෙස භාවිතයේ පවතින තාක් කල්, මෙය වෙනස් වනු ඇතැයි සිතිය නොහැක. “නූතන සී ++” පිළිබඳ ඔබේ අදහස මූලික වශයෙන් හොඳ කේතීකරණ ප්‍රමිතීන් හා සම්මත පුස්තකාලය පිළිබඳ කාරණයක් යැයි මම සිතමි. සිට සම්පාදක ගේ දෘෂ්ටිකෝණයට, භාෂා දෙකම පරිණාමය වෙනුවට diverging වඩා අභිසරණය වේ.

  1. අනුකූලතාව පවත්වා ගැනීම සඳහා සී / සී ++ ප්‍රමිති සකස් කරන පුද්ගලයින් අතර දැන් යම් සහයෝගීතාවයක් තිබේද?

ඔව්. C ++ 11 සහ C11 හි හඳුන්වා දී ඇති මතක ආකෘතිය සහ පරමාණුක මෙහෙයුම් පුස්තකාලය ඊට හොඳ නිදසුනකි. භාෂා දෙකේම නිර්මාණකරුවන් ගැළපුම වැදගත් බව වටහාගෙන එය වැඩිදියුණු කිරීමට කටයුතු කරමින් සිටින බව පෙනේ. පුද්ගලිකව, සහයෝගිතාව වඩාත් තීව්‍ර වන අතර අයිඑස්ඕ ක්‍රියාකාරී කණ්ඩායම් දෙක එකතු වී ඇති නමුත් මගේ පැතුම් වැදගත් නොවේ.

C ++ ක්‍රමලේඛන භාෂාවේ 4 වන සංස්කරණයේ § 44.3 හි C සහ C ++ හි විවිධ අනුවාදයන් අතර ඇති වෙනස්කම් හා පොදු ලක්ෂණ ගැන බර්න් ස්ට්‍රෝස්ට්‍රප් කතා කරයි . මෙම අවස්ථාවේ දී මෙම පදය භාවිතා කිරීම ඇත්ත වශයෙන්ම සුදුසු විය හැකි බැවින් එහි තේරුම පැහැදිලි ය.

  1. # 4 ඔව් නම්, එවැනි සහයෝගීතාවය නුදුරු අනාගතයේ දී නූතන සී ++ (11/14/17) පෙනුමෙන් අවසන් විය හැකිය.

ඉහත සාකච්ඡා කළ පරිදි, එය C ++ 11 හි සිදු වූ අතර නැවත සිදුවීමට අපේක්ෂා කෙරේ / බලාපොරොත්තු වේ / අවශ්‍ය වේ.


එය හරි හෝ වැරදි නොවන්නේ කෙසේද?
JDługosz

4
“හරිත දේවල් මිල අධිකයි” යන ප්‍රකාශය මෙන්ම එයට මනාව නිර්වචනය කළ සත්‍ය වටිනාකමක් නොමැත. සී සහ සී ++ අනුවාදවල විශේෂිත සංයෝජනයක් සඳහා එය සත්‍යයකි, අනෙක් අයට එය අසත්‍යයකි.
5gon12eder

5

C / C ++ යනු C සහ C ++ වල ඡේදනයයි.

int new;C / C ++ නොවේ, එසේම නොවේ vector<int> foo;.

ඒ හා සමානව, C89 ප්රමිතියේ / C99 ප්රමිතියේ දී වත් එහිදී මෙම භාෂා දෙකක්, එකට හමුවන තැන වේ enum bool { false, true };හෝ for(int i = 0;;)ඉඩ ඇත.

සහ C ++ 11 / C ++ 14, ආදිය.

C ++ 11 සහ C ++ 14 යටතේ සම්පාදනය කරන (සහ නිවැරදිව ධාවනය වන) කේත ලිවිය හැකිය, එකක් යටතේ සම්පාදනය කිරීමෙන් ඇඟවෙන්නේ එය අනෙක යටතේ සම්පාදනය වන බවයි. ඇත්ත වශයෙන්ම, බොහෝ අය මෙය කරයි.

බොහෝ අය C සහ C ++ වලින් ක්‍රියා කරන කේත ලියයි.

නිසැකවම, අතිච්ඡාදනය වැඩි වන තරමට එය අර්ථවත් කරයි; සී / සී ++ / ජාවා කේතය පිළිබඳ කිසිදු ප්‍රශ්නයක් දැකීමට මම බලාපොරොත්තු නොවෙමි.


මෙම භාෂාවන්හි පොදු උප කුලකයක් ගැන කථා කිරීම "අර්ථවත්" වුවද, බොහෝ ප්‍රශ්න වලට මෙම උප කුලකයේ පිළිතුරු නොමැත, උදා: සී සහ සී ++ වලින් ප්‍රධාන () නැවත පැමිණිය යුත්තේ කුමක් ද?

නමුත් එම පිරිවිතර "අනුවාදය" හෝ "භාෂාවේ නම" හෝ වෙනත් ආකාරයකින් වෙනස් කර තිබේද යන්න ඔබට බහු භාෂා පිරිවිතරයන් සඳහා ක්‍රියා කරන කේත ගැන කතා කළ හැකිය.


3

මෙය වෙනත් පිළිතුරුවල සහ අදහස් දැක්වීම්වල දක්නට ලැබෙන “මෙය ලෝහයට සමීපව වැඩ කරන සහ කළමනාකරණ සන්දර්භය තුළ හොඳින් සිටින ක්‍රමලේඛකයින් සඳහා කේතයක්” යන ස්ථාවරය සඳහා වූ ප්‍රතිචාරයකි.


එම අර්ථ නිරූපණය පවා ප්‍රවේශමෙන් ගත යුතු යැයි මම තර්ක කරමි.

අවම වශයෙන් 90 දශකයේ මැද භාගයේ සිට ඔබට C ++ ක්‍රමලේඛකයෙකු අවශ්‍ය නම් සහ තමන් C ක්‍රමලේඛකයෙකු ලෙස විස්තර කළ අයෙක් ඉල්ලුම් කළහොත් ඔබට වස්තු නැඹුරුවන සැලසුම ගැන ඔවුන් කොපමණ දැන සිටිය යුතුද, වස්තුවක නිදොස් කිරීම පිළිබඳ ඔවුන්ට කොපමණ අත්දැකීම් තිබේද යන්න විමසීමට සිදුවේ. නැඹුරු සන්දර්භය සහ අච්චු පුස්තකාල භාවිතා කිරීමට ඇති හැකියාව ගැන. සම්මුඛ පරීක්ෂණයේදී හා බඳවා ගැනීමේ ක්‍රියාවලියේදී එම කරුණු හරියටම සොයා බැලීමට ඔබට අවශ්‍යය.

අනෙක් අතට, සී ++ ගුරු "නවීන සී ++" තල්ලු කිරීමට පටන් ගෙන දැන් දශකයකට වැඩි කාලයක් ගත වී ඇත. සී ++ 11 මතුවීමත් සමඟ බහු-පරමාදර්ශී වැඩසටහන්කරණය සඳහා දැන් පැහැදිලි සහයෝගයක් ඇති අතර කිසිදු දර්ශකයක් නොපෙන්වන කේතය දෙසට තල්ලු කිරීම ඉතා ශක්තිමත් ය. එහි තේරුම නම්, මම අද සී තනතුරක් සඳහා සී ++ ක්‍රමලේඛකයෙකු සමඟ සම්මුඛ සාකච්ඡාවක් පැවැත්වූයේ නම්, මෙම පුද්ගලයා සත්‍ය, පාද වෙඩි තැබීමේ හැකියාව ඇති දර්ශකයන් සමඟ කෙතරම් හුරුපුරුදු දැයි පරීක්ෂා කිරීම ගැන මම ඉතා සැලකිලිමත් වෙමි.

මම මේ දිනවල ව්‍යාපාරයේ නොසිටිමි (ස්ටැක් පිටාර ගැලීම ළදරු අවධියේ මා සිටි තාක් දුරට වුවද), එබැවින් මන imag කල්පිත සම්මුඛ පරීක්‍ෂකවරයකුට හරස් ඕවර් කුසලතා නොතිබෙනු ඇතැයි මම අනුමාන නොකරමි. මම හිතන්නේ බොහෝ විට අදාළ වන පරිදි භාෂා දැන් ඇත්ත වශයෙන්ම බෙහෙවින් වෙනස් ය.

කෙටියෙන් කිවහොත් "සී / සී ++" තාක්ෂණික සන්දර්භය තුළ පමණක් නොව බොහෝ ව්‍යාපාරික සන්දර්භයන්හි ද අතහැර දැමිය යුතුය.


"C හෝ C ++, දන්නා", "C සහ C ++, එකට සම්බන්ධ වී ඇත", "C සහ C ++, ඡේදනය", හෝ "C හෝ C ++, සැලකිලිමත් වන" යන්නෙහි අර්ථය කුමක්ද යන්න පෙන්වා දීමට හොඳ ක්‍රමයක්. යමෙකුට කෙසේ හෝ එයින් ගැලවිය හැකි තැනක පවා වැඩි වැඩියෙන් යුක්ති සහගත ය.
අඩුකිරීමේ

1

මෙම ප්‍රශ්නයට වඩාත්ම සරල පිළිතුර නම් ඔබ කිසි විටෙකත් එම පදය භාවිතා නොකළ යුතු බවයි. එය නොපවතින යෙදුමකි. එයට අර්ථයක් නැත. සෑම වැඩසටහනක්ම C හෝ C ++ වේ.

C ++ x0, C ++ 11 (හෝ නූතන C ++ 11/14/17) පෙනෙන තෙක් එය නිහ quiet සත්‍යයකි.

C ++ 98 සහ 03 පන්ති සමඟ දුරස්ථව C නොවේ. ඔබට මෙය ඉගැන්වූ කවුරුන් හෝ ජරාව නොදන්නා අතර ඔබට ඒවා අමතක කළ හැකිය. මෙය කිසි විටෙකත් නිවැරදි නොවීය.


මෙය සම්පූර්ණයෙන්ම සත්‍ය නොවේ. එක් කාලයක “සී / සී ++” නම් භාෂාවක් සඳහා යෝජිත භාෂා පිරිවිතරයක් විස්තර කරන පිටුවක් තිබී ඇති අතර, වෙනත් දේ අතර, වර්ග පද්ධතියක් නොමැති (ආසන්න) නොමැති බව නියම කර ඇත. කනගාටුවට කරුණක් නම්, එතැන් සිට පිටුව ඉවත් කර ඇති අතර, එය සත්කාරකත්වය දැක්වූ වෙබ් අඩවිය එතැන් සිට archots.org වෙතින් සංරක්ෂිත පිටපත මකා දැමූ robots.txt එකක් සකස් කර ඇත.
ග්‍රේෆේඩ්


5
"සෑම වැඩසටහනක්ම C හෝ C ++ වේ." මම එකඟවෙන්නේ නැහැ. සී වැඩසටහනක් ගැනීම සාමාන්‍ය දෙයකි, එය වරකට සී ++ එක් ගොනුවකට ගෙනයන්න (එම එක් ගොනුවක් සඳහා සම්පාදක විකල්පයක් වෙනස් කිරීමෙන්). සමහර ලිපිගොනු කිසි විටෙකත් වරාය නොකළ හැකි අතර C සදහටම පවතිනු ඇත. එවැනි වැඩසටහනක් C සහ C ++ යන දෙකින්ම ලියා ඇත
nikie

ඇත්තෙන්ම නැහැ. එම වැඩසටහන උප වැඩසටහන් වලින් සමන්විත වන අතර ඒ සෑම එකක්ම C හෝ C ++ වේ. සම්පාදකයාට අදාළව සමස්ත වැඩසටහන වන සෑම TU එකක්ම C හෝ C ++ ලෙස සම්පාදනය කෙරේ.
DeadMG

3
"සෑම වැඩසටහනක්ම C හෝ C ++ වේ" යන්න එසේ නොවේ. මහාචාර්ය බර්න් ස්ට්‍රෝස්ට්‍රප් මෙසේ පවසයි: 'හොඳින් ලියා ඇති සී නෛතික සී ++ ද වේ. උදාහරණයක් ලෙස, කර්නිගන් සහ රිචී හි සෑම උදාහරණයක්ම: "සී ක්‍රමලේඛන භාෂාව (2 වන සංස්කරණය)" ද සී ++ වැඩසටහනකි. ' straustrup.com/bs_faq.html#C-is-subset
බෙන්

1

සංකල්පමය වශයෙන්, සී ප්‍රභව ලිපිගොනු සැලසුම් කිරීමේදී විශේෂ දුෂ්කරතාවයක් නොතිබිය යුතු අතර එමඟින් ඒවා C ++ සමඟ සම්පාදනය කළ හැකිය. මෙය සිදු කිරීමෙන් සැලකිය යුතු වාසි කිහිපයක් තිබිය හැකිය. උදාහරණයක් ලෙස, කාවැද්දූ පද්ධතියක් සඳහා කේත ලිවීමේදී සමහර විට සත්කාරක පරිගණක පරිසරයක කේතය පරීක්ෂා කිරීමට හැකිවීම ප්‍රයෝජනවත් වේ. කේතය C ++ ලෙස පිරිසිදු ලෙස සම්පාදනය කරන්නේ නම්, "MOTOR_ENABLE = 1;" කාවැද්දූ පද්ධතියේ වාෂ්පශීලී I / O බිට් එකකට ලියන්න (C ලෙස සම්පාදනය කර ඇත), නමුත් පරිගණකයේ අනුකරණ තර්කනය අවුලුවන්න (C ++ ලෙස සම්පාදනය කිරීම). කුඩා කාවැද්දූ පද්ධති මත uint16_t හැසිරෙන ආකාරයට හැසිරෙන පරිගණකයේ C ++ වර්ගයක් සැලසුම් කිරීමට ද බොහෝ විට හැකි වනු ඇත (එබැවින් උදා: ලබා දී ඇති පරිදි u16 x=65533;, සම්පාදකයෙකුට එහි වටිනාකම සලකා බැලිය යුතුයx*xනවයක් ලෙස, එයට අවශ්‍ය ඕනෑම දෙයක් කිරීමට නිදහස් පාලනයක් තිබීමට වඩා), නමුත් තවමත් මගේ අනුකරණය කරන්නන්ගෙන් කිසිවෙකු එය ඇතුළත් කර නැත [අර්ධ වශයෙන් මා භාවිතා කළ සී ++ සම්පාදකයින් එවැනි අවස්ථාවන්හිදී කිසිදු විකාරයක් කර නැත].

අවාසනාවකට මෙන්, සී ක්‍රමලේඛකයන්ට සහ සී ++ ක්‍රමලේඛකයන්ට එකිනෙකා කෙරෙහි ප්‍රමාණවත් තරම් සතුරුකමක් ඇති අතර, භාෂාවන් වසර ගණනාවක් තිස්සේ අනුකූල ආකාරයකින් විකාශනය වී ඇත. C89 C ++ හි වඩාත් ප්‍රයෝජනවත් අංගයන් (ක්‍රියාකාරී මූලාකෘති වැනි) අනුවර්තනය කිරීමට උත්සාහ කළද, C ++ හි ඕනෑම අංගයක් අවශ්‍ය ක්‍රමලේඛකයින් C ++ භාවිතා කළ යුතු බවට ආකල්පයක් මතුවී ඇති අතර, එය බොහෝ අවස්ථාවන් ඇති බව නොසලකා හරිමින් සී ++ හි සමහර විශේෂාංග භාවිතා කිරීමට හැකිවීම සඳහා උපකාරී වන්න (උදා: කෙනෙකුට අවශ්‍ය නොවන වෙනත් අංග සමඟ සම්බන්ධිත පිරිවැය භාර නොගෙන ස්ථිතික හෝ ස්ථිතික පේළිගත සම්බන්ධතා සමඟ කාර්යයන් අධික ලෙස පැටවීමේ හැකියාව (උදා: අපනයනය හා සම්බන්ධ මැන්ග්ලිං යන නම) අධි බර පැටවූ කාර්යයන්).

C89 සහ C ++ 98 මංසන්ධිය වැඩ කළ හැකි භාෂාවක් වන අතර, C ++ හි පසු සංස්කරණ සමඟ භාවිතා කළ හැකි සුපර්සෙට් එක C ++ හි පසු සංස්කරණ සමඟ වැඩී ඇතිවාට වඩා හැකිලී ඇත (දැඩි අන්වර්ථ රීතිය වැනි දේවලට ස්තුති වන්න) සහ ප්‍රවණතා සදාකාලිකවම වාසිදායක වේ. විඛණ්ඩනය වැඩි කිරීම.


1
"C ++ 95" යනු කුමක්ද? තාක්ෂණික වාර්තාවක්?
බෙන් වොයිග්ට්

1
ඔබේ අභ්‍යන්තර කාර්යයන් සඳහා අධික බර පැටවීමට ඔබට අවශ්‍ය නම්, නමුත් ඔබේ බාහිර ඒවා සඳහා නමක් නොගැලපේ නම්, ඔබට කලින් ඇති දේ නිර්නාමිකව namespaceතබා පසුව දෙවැන්න ලෙස ප්‍රකාශ කළ හැකිය extern "C", පසුව C ++ සම්පාදකයක් භාවිතා කරන්න.
5gon12eder

En බෙන් වොයිට්: මී කූල්පා. මට ඒක බලන්න තිබුනා. C99 ට පෙර C ++ අනුවාදය. C89 එළියට එන විට, එය C ++ වැනි C බවට පත් කිරීමට උත්සාහ කළ නමුත් C99 නිසැකවම C ++ ගැන උනන්දුවක් නොදක්වන විශේෂාංග ගණනාවක් එකතු කළේය (උදා: විචල්‍ය-දිග අරා). මම C ++ හි වැඩිපුර වැඩසටහන් නොකරමි, නමුත් මම සිතන්නේ තවත් C ++ විශේෂාංග කිහිපයක් C ට වඩා වෙනස් වනු ඇත.
සුපර් කැට්

G 5gon12eder: මම කිසි විටෙකත් C ++ කේතය C ව්‍යාපෘතියකට සම්බන්ධ කිරීමට උත්සාහ කර නැත. සෑම දෙයක්ම ස්ථිතික / පේළිගත වීම extern "C"හෝ වෙනත් සංකූලතා තිබේද (උදා: ස්ථිතික-වස්තු ආරම්භ කිරීම ආදිය) තරම් සරලද? C ++ හි එය සෑදීමට කිසියම් ක්‍රමයක් තිබේද, එමඟින් foo(1234)සාර්වයක් ඉල්ලා සිටින foo_const(1234)අතර foo(x)[ xනියතයක් නොමැති තැන ] foo_var(x)ශ්‍රිතයක් ඉල්ලා සිටීද? කාවැද්දූ කේතයේ බොහෝ අවස්ථාවන් තිබේ, එය SET_PORT(port, state)වරාය සහ රාජ්‍යය යන දෙකම මත පදනම්ව ආකෘති තුනක් තිබීම වැනි “ශ්‍රිතයක්” සඳහා අර්ථයක් විය හැකිය ...
සුපර් කැට්

... සම්පාදක කාල නියතයන්, වරාය නියත නමුත් තත්වය එසේ නොවේ, නැතහොත් වරාය හෝ රාජ්‍යය නියත නොවේ. අච්චු හෝ වෙනත් සම්මත C ++ යාන්ත්‍රණයක් භාවිතයෙන් එය ඉටු කර ගැනීමට ක්‍රමයක් තිබේද, නැතහොත් එය කළ හැක්කේ gcc දිගු සහිත සම්පාදකයින් මත පමණක්ද?
සුපර් කැට්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.