Ответ 1
Существуют некоторые различия между процессорами C и С++. Игнорируя различия в предопределенных макросах и доступных системных заголовках, некоторые отличия, которые приходят на ум в текущих версиях C и С++, следующие:
-
and
и друзья - это операторы, а не идентификаторы, в С++. Это означает, что#define and &&
действителен в C, но не в С++, а означает#if 1 and 2
, допустим в С++, но не в C (еслиand
не определяется как макрос). -
false
иtrue
разрешены в выражениях С++#if
, но заменены на0
(как и все идентификаторы) в C. Это означает#if true
/C++
/#else
/C
/#endif
расширяется доC++
илиC
, в зависимости от языка. В отличие отand
и друзей, однако, это не операторы, поэтому их можно переопределить на#define
на любом языке. -
::
,.*
, а->*
- токены в С++. В результате этого оператор##
может быть использован для формирования их в С++, но не в C. - Строковые литералы строки доступны на С++, но не в C. В результате, с учетом макроса
foo
,R"x("foo")x"
расширяет макрос в C, но не на С++. - Шестнадцатеричные константы с плавающей запятой доступны в C, но не в С++. В результате, с учетом макроса
foo
,0x1p+foo
расширяет макрос в С++, но не в C.