The difference between GCC and g++

Source: Internet
Author: User

When we compiled C + + code, some people use GCC, some people use g++, so all kinds of statements come, such as C code with GCC, and C + + code with g++, or compiled with GCC, link with g++, for a moment I do not know which statement is correct, if you encounter the last extern "C", There are more differences, and here I want to finish, after all, the purpose of knowledge is to be more sober, not more confused.
Myth One: gcc can only compile C code, g++ can only compile C + + code

Both are possible, but please note:
1. The suffix is. C, GCC treats it as a C program, and g++ as a C + + program; the suffix is. cpp, both of which are considered C + + programs, note that although C + + is a superset of C, there are different requirements for syntax, such as:
#include <stdio.h>
int main (int argc, char* argv[]) {
if (argv = = 0) return;
Printstring (argv);
return;
}
int printstring (char* string) {
sprintf (String, "This is a test.\n");
}
If you follow the grammar rules of C, OK, no problem, but once the suffix is changed to CPP, three errors are reported immediately: "Printstring undefined";
"Cannot convert ' char** ' to ' char*";
"Return-statement with no value";
Corresponds to the part of the previous red callout, respectively. Visual C + + syntax rules are more rigorous.
2. During the compile phase, g++ calls GCC, which is equivalent to C + + code, but because the GCC command is not automatically linked to the libraries used by C + + programs, it is usually done with g++ to complete the link, for the sake of unification, simply compile/link all with g++, which gives an illusion, As if the CPP program can only be used g++.

Myth Two: GCC does not define __cplusplus macros, and g++ will

In fact, this macro simply indicates that the compiler will interpret the code in C or C + + syntax, as described above, if the suffix is. c, and the GCC compiler is used, the macro is undefined, otherwise it is defined.

Myth Three: Compile only with GCC, link only with g++
Strictly speaking, this sentence is not wrong, but it confuses the concept,This should be said: Compile can be used gcc/g++, and links can be used g++ or gcc-lstdc++。 Because GCC commands are not automatically joined to libraries that are used by C + + programs, you typically use g++ to complete joins. In the compilation phase, however, g++ automatically calls GCC, which is equivalent.

Myth four: extern "C" has relation with gcc/g++

In fact, no matter whether it is GCC or g++, with the extern "C", all are named in C to the symbol, otherwise, are named in C + +. The test is as follows:
me.h
extern "C" void cppprintf (void);

Me.cpp:
#include <iostream>
#include "me.h"
using namespace Std;
void cppprintf (void)
{
cout << "hello\n";
}

Test.cpp:
#include <stdlib.h>
#include <stdio.h>
#include "me.h"
int main (void)
{
Cppprintf ();
return 0;
}

1. First add extern "C" to me.h, see what is different with GCC and g++ naming

[Email protected] g++]# g++-S Me.cpp
[email protected] g++]# less ME.S
. GLOBL _Z9CPPPRINTFV//Note the naming of this function
. Type cppprintf, @function
[Email protected] gcc]# gcc-s me.cpp
[email protected] gcc]# less ME.S
. GLOBL _Z9CPPPRINTFV//Note the naming of this function
. Type cppprintf, @function
Exactly the same!

2. Remove the extern "C" in the me.h to see what is different with GCC and g++ naming
[Email protected] gcc]# gcc-s me.cpp
[email protected] gcc]# less ME.S
. GLOBL _Z9CPPPRINTFV//Note the naming of this function
. Type _Z9CPPPRINTFV, @function
[Email protected] g++]# g++-S Me.cpp
[email protected] g++]# less ME.S
. GLOBL _Z9CPPPRINTFV//Note the naming of this function
. Type _Z9CPPPRINTFV, @function
Exactly the same!
"Conclusion" is identical, it can be seen that extern "C" is not related to the adoption of gcc/g++, the above test also indirectly confirms the previous saying: In the compilation phase, g++ is called GCC.

The difference between GCC and g++

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.