【发布时间】:2017-09-09 19:27:41
【问题描述】:
我想创建一个宏,其 值 是 __LINE__ 在某个时间点的评估,以便我可以执行以下操作:
#define LINE1 __LINE__
int a[] = {
1,
2,
3
};
#define LINE2 __LINE__
printf("There are %d rows", LINE2 - LINE1 - 2);
...但是LINE2 和LINE1 最终给了我printf 语句的行号。有什么想法吗?
【问题讨论】:
-
你能改用
const int blah = __LINE__;吗? -
你不能那样做。我不确定你能不能做到。
#define LINE1只是说'当你看到LINE1时,用__LINE__替换它。但是__LINE__计算为使用LINE1的行号,而不是定义它的位置。此外,确定数组中元素数量的正确方法是(sizeof(a) / sizeof(a[0]))——即使有人将两个条目放在一行上,或者在列表中间添加注释等,它也能正常工作。唯一一次当“数组”实际上是函数的指针参数时,它会失败。 -
@HolyBlackCat:这会创建一个变量。 C 没有符号常量。
-
@JonathanLeffler +1 表示注意到,OP 实际上正在尝试做什么