Согласно Страуструпу стр 244 константы по умолчанию подразумевают внутреннюю компоновку, тогда это должно работать: c++test9_f1.cc
#include <iostream>
#include "c++test9.h"
void f(const int *p)
{
std::cout << "f1" << p << std::endl;
}
#include <iostream>
#include "c++test9.h"
void h(const int *p)
{
std::cout << "f2" << p <<std::endl;
}
const int* x = 0;
#include "c++test9.h"
void f(const int*);
void h(const int*);
int main()
{
f(x);
h(x);
}
Компилируем:
$g++ -std=c++98 -pedantic -Wall -Wextra c++test9_f1.cc -o c++test9_f1.o -c
%g++ -std=c++98 -pedantic -Wall -Wextra c++test9_f2.cc -o c++test9_f2.o -c
%g++ -std=c++98 -pedantic -Wall -Wextra c++test9.cc -o c++test9.o -c
$g++ c++test9.o c++test9_f1.o c++test9_f2.o
c++test9_f1.o(.bss+0x0): multiple definition of `x'
c++test9.o(.bss+0x0): first defined here
c++test9_f2.o(.bss+0x0): multiple definition of `x'
c++test9.o(.bss+0x0): first defined here