[basic.def]
Change: C++ does not have “tentative definitions” as in C
.    , at file scope,
int i;
int i;
is valid in C, invalid in C++
.  This makes it impossible to define
mutually referential file-local static objects, if initializers are
restricted to the syntactic forms of C
.  For example,
struct X { int i; struct X* next; };
static struct X a;
static struct X b = { 0, &a };
static struct X a = { 1, &b };Rationale:
This avoids having different initialization rules for
fundamental types and user-defined types
.  Effect on original feature:
Deletion of semantically well-defined feature
.  Difficulty of converting:
Semantic transformation
.  In C++, the initializer for one of a set of
mutually-referential file-local static objects must invoke a function
call to achieve the initialization
.   Rationale:
Class scope is crucial to C++, and a struct is a class
.  Effect on original feature:
Change to semantics of well-defined feature
.  Difficulty of converting:
Semantic transformation
.  How widely used:
C programs use 
struct extremely frequently, but the
change is only noticeable when 
struct, enumeration, or enumerator
names are referred to outside the 
struct.  The latter is probably rare
.[basic.link] [also 
[dcl.type]]
Change: A name of file scope that is explicitly declared 
const, and not explicitly
declared 
extern, has internal linkage, while in C it would have external linkage
.  Rationale:
Because 
const objects may be used as values during translation in
C++, this feature urges programmers to provide an explicit initializer
for each 
const object
.  This feature allows the user to put 
const objects in source files that are included
in more than one translation unit
.  Effect on original feature:
Change to semantics of well-defined feature
.  Difficulty of converting:
Semantic transformation
.  [basic.start.main]
Change: The 
main function cannot be called recursively and cannot have its address taken
.  Rationale:
The 
main function may require special actions
.  Effect on original feature:
Deletion of semantically well-defined feature
.  Difficulty of converting:
Trivial: create an intermediary function such as
mymain(argc, argv).  [basic.types]
Change: C allows “compatible types” in several places, C++ does not
.  
For example,
otherwise-identical 
struct types with different tag names
are “compatible” in C but are distinctly different types
in C++
.  Rationale:
Stricter type checking is essential for C++
.  Effect on original feature:
Deletion of semantically well-defined feature
.  Difficulty of converting:
Semantic transformation
.  The “typesafe linkage” mechanism will find many, but not all,
of such problems
.  Those problems not found by typesafe linkage will continue to
function properly,
according to the “layout compatibility rules” of this
International Standard
.