I understand C and C++ are different languages but when I was learning C++ I was always told that C is a subset of C++ or C++ is C with classes. And that was quite true until the appearance of C++x0, C++11 (or the modern C++ 11/14/17 in general). In fact (especially when working on embedded systems) it's very likely to find code written in C++ but with a lot of parts written entirely in pure C language. Here I have several questions:Should I stop using the term C/C++? If the answer to #1 is yes, how would I call a program that use a mix of C and C++?Given that both of them are 'different' languages is it likely that at some point C++ compilers stop supporting code written in the C language (since modern c++ is diverging from the C mentality for basic stuff like pointers, dynamic memory handling, etc)Is there right now any collaboration between the people who makes the standards of C/C++ to keep the compatibilityIf #4 is yes, such collaboration could end up in the near future with the appearance of the modern c++ (11/14/17)I know that there already similar questions, but I'm sure that a lot of people share these questions so I'm very interested to get good answers especially for the points that have to do with the C++ tendency in the near future.
Should I stop using the term C/C++?
c++;c;terminology;c++11
C was never a subset of C++. The most obvious example of this is int new;.  This has been true since C89 and C++98, and the languages have only grown further from each other as new standards have come out.Should I stop using the term C/C++YesIf the answer to #1 is yes, how would I call a program that use a mix of C and C++?A source file is written in one language or the other.  A program can consist of code from multiple languages working together, or an executable produced by linking different compiled objects.  You would say the program was written in C and C++, C/C++ is not a language.Given that both of them are 'different' languages is it likely that at some point C++ compilers stop supporting code written in the C language3) They never did. char *a = malloc(10);. C and C++ have never been fully compatible for at least as long as they've had ISO standards (I don't know all the details about the pre-standardized days).  click the links or see below for a file that is fine with C89 and up, but isn't valid under any C++ standard.4) afaik no, the working groups are aware of each other but the standards make the decisions that are best for themselves./* 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) { }I always feel it's worth mentioning that C is a subset of Objective-C.