Как вы можете видеть из моих других вопросов, многие из вас могут уже получить ответ для этого. Не могли бы вы поделиться со мной этими знаниями?
С++ какой тип макроса __LINE__
Ответ 1
С++ 03 §16.8p1:
__ LINE__ Номер строки текущей строки источника (десятичная константа).
Это будет либо int, либо INT_MAX (которому разрешено всего 32 767) недостаточно велико (... я не буду спрашивать...), тогда он будет длинным int. Если это будет больше, чем LONG_MAX, то у вас будет поведение undefined, которое на этот раз не стоит беспокоиться о файле в файле не менее 2 147 483 647 строк (минимальное допустимое значение для LONG_MAX).
В этом же разделе перечислены другие макросы, которые могут вас заинтересовать.
Ответ 2
Стандарт С++ просто имеет это, чтобы сказать:
__LINE__
: Предполагаемый номер строки (в текущем исходном файле) текущей строки источника (целочисленная константа).
На самом деле он не указывает тип, поэтому он, скорее всего, будет того же типа, что и целое число без надписей в вашем исходном коде, которое было бы int
. Тот факт, что верхний конец допустимого диапазона 2G - 1
поддерживает это (хотя нижний диапазон 1
).
Тот факт, что #line
допускает только цифры (без тэгов U
, чтобы сделать его неподписанным), также можно прочитать для поддержки этого.
Но это только поддержка. Я не смог найти окончательное утверждение в рамках стандартов С++ или C. Просто имеет смысл * a что он будет переведен во что-то вроде 42
, когда он пройдет фазу предварительной обработки и что увидит компилятор, обрабатывая его точно как 42
(a int
).
* a: это был не первый раз, когда мой здравый смысл был неправильным: -)