Tenir compte suivant les fichiers source 1.cppconstructeurs Inline et une définition Règle
#include <iostream>
using namespace std;
struct X
{
X()
{
cout << "1" << endl;
}
};
void bar();
void foo()
{
X x;
}
int main()
{
foo();
bar();
return 0;
}
2.cpp
#include <cstdio>
struct X
{
X()
{
printf("2\n");
}
};
void bar()
{
X x;
}
est bien formé programme compilé à partir de ces fichiers? Ce qui devrait être dans sa sortie?
Je m'attendais à une erreur de l'éditeur de liens due à la violation de la règle de définition unique ou de la sortie "1 2". Cependant, il affiche "1 1" lorsqu'il est compilé avec g ++ 3.4 et VC 8.0.
Comment cela peut-il être expliqué?
Si j'utilise '[[gnu :: noinline]]' pour les deux avec * clang 3.6.1 * alors la sortie est 1 1 sans respecter l'ordre des noms de fichiers spécifiés pour le compilateur et l'éditeur de liens. – Orient