Подтвердить что ты не робот

С++ какой тип макроса __LINE__

Как вы можете видеть из моих других вопросов, многие из вас могут уже получить ответ для этого. Не могли бы вы поделиться со мной этими знаниями?

4b9b3361

Ответ 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: это был не первый раз, когда мой здравый смысл был неправильным: -)