C ++, какой тип макроса __LINE__ - PullRequest
17 голосов
/ 22 февраля 2011

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

Ответы [ 2 ]

21 голосов
/ 22 февраля 2011

C ++ 03 §16.8p1:

__ LINE__ Номер строки текущей строки источника (десятичная константа).

Это будет либо int, либо, если INT_MAX (который может быть всего 32 767) недостаточно велик (... я не буду спрашивать ...), тогда это будет длинный int. Если он будет больше, чем LONG_MAX, то у вас будет неопределенное поведение, которое, на этот раз, не является проблемой, о которой стоит беспокоиться, если в файле не менее 2 147 483 647 строк (минимально допустимое значение для LONG_MAX).

В этом же разделе перечислены и другие макросы, которые могут вас заинтересовать.

5 голосов
/ 22 февраля 2011

Стандарт C ++ просто имеет следующее:

__LINE__: Предполагаемый номер строки (в текущем исходном файле) текущей строки источника (целочисленная константа).

На самом деле тип не указывает тип, поэтому он, скорее всего, будет того же типа, что и неукрашенное целое число в вашем исходном коде, которое будет int.Тот факт, что верхний предел разрешенного диапазона равен 2G - 1, подтверждает это (хотя нижний диапазон равен 1).

Тот факт, что #line допускает только цифры (без конечного U досделать его без знака), также можно прочитать, чтобы поддержать это.

Но это только поддержка . Я не смог найти однозначного утверждения ни в стандартах C ++, ни в языке C.Просто имеет смысл * a , что он будет преобразован во что-то вроде 42, когда он пройдет фазу предварительной обработки, и это то, что компилятор увидит, обработав его в точности как 42 (int)).


* a : Впрочем, это не первый раз, когда мой здравый смысл ошибался: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...