Consider the following piece of code (notice the comment):
#include <iostream>
int main()
{
int x = 1; // <-- Why??/
x += 1;
std::cout << x << std::endl;
}
To compile this program, I am using the GNU C++ Compiler g++:
$ g++ --version // g++ (Ubuntu 6.5.0-1ubuntu1~16.04) 6.5.0 20181026
Now, when compiling this for C++11 and C++17, I get different results (and warnings).
For C++11, g++ -std=c++11 trigraph.cpp -Wall:
trigraph.cpp:5:26: warning: trigraph ??/ converted to \ [-Wtrigraphs]
int x = 1; // <-- Why??/
trigraph.cpp:5:16: warning: multi-line comment [-Wcomment]
int x = 1; // <-- Why??/
^
$ ./a.out
1
For C++17, g++ -std=c++17 trigraph.cpp -Wall:
trigraph.cpp:5:26: warning: trigraph ??/ ignored, use -trigraphs to enable [-Wtrigraphs]
int x = 1; // <-- Why??/
$ ./a.out
2
After reading a bit about trigraphs, I understand that they were removed in C++17, thus ignored by the compiler as shown in the example above. However, in the case of C++11, even when it's in a comment it was converted!
Now, I can see how that would affect the code if the trigraph was in a character string for instance. But, in this example, shouldn't it be ignored since it's in a comment?
After removing the trailing forward slash ("/") from the comment, all warnings disappeared. My question is what did exactly happen here? Why the output is different?
Aucun commentaire:
Enregistrer un commentaire