小编Eya*_*yal的帖子

在Scala和SBT中调试长编译时间

在我的Scala/SBT项目中,我有一个文件,最多需要5(!)分钟才能编译.所有其他的都可以在几秒钟内编译.这使得开发非常痛苦.

我确信我在滥用一些Scala结构,但我不知道如何调试它.如何在Scala中调试长编译时间?

我正在使用Scala 2.9.2和SBT 0.11.2

scala sbt

12
推荐指数
1
解决办法
1502
查看次数

计算预处理器宏

我有这个宏代码,它允许我使用一个构造将C枚举和枚举名称列表定义为字符串.它阻止我不得不复制枚举器名称(并可能为大型列表引入错误).

#define ENUM_DEFINITIONS(F) \
  F(0, Item1) \
  F(5, Item2) \
  F(15, Item3) \
  ...
  F(63, ItemN)
Run Code Online (Sandbox Code Playgroud)

然后:

enum Items {
  #define ITEM_ENUM_DEFINE(id, name) name = id,
    ENUM_DEFINITIONS(ITEM_ENUM_DEFINE)
  #undef ITEM_ENUM_DEFINE
Run Code Online (Sandbox Code Playgroud)

当扩展时,应该产生:

enum Items {
  Item1 = 0,
  Item2 = 5,
  Item3 = 15,
  ...
  ItemN = 63,
}
Run Code Online (Sandbox Code Playgroud)

在实现文件中,我有这个代码:

const char* itemNames[TOTAL_ITEMS];
int iter = 0;

#define ITEM_STRING_DEFINE(id, name) itemNames[iter++] = #name;
  ENUM_DEFINITIONS(ITEM_STRING_DEFINE)
#undef ITEM_STRING_DEFINE
Run Code Online (Sandbox Code Playgroud)

当扩展时,产生:

itemNames[iter++] = "Item1";
itemNames[iter++] = "Item2";
itemNames[iter++] = "Item3";
...
itemNames[iter++] = "ItemN"; …
Run Code Online (Sandbox Code Playgroud)

c macros c-preprocessor

9
推荐指数
2
解决办法
5091
查看次数

C预处理器将标识符视为对象而不是类似函数

这是我刚刚在工作中遇到的一些代码的简化版本:

#include <stdio.h>

#define F(G) G(1)
#define G(x) x+1

int main() {
  printf("%d\n", F(G));
}
Run Code Online (Sandbox Code Playgroud)

打印2.

现在,我可以看到F(G)扩展到G(1)然后G(1)扩展到2,但我不清楚为什么.我本来期望得到一个错误,G不是printf行的函数.

预处理器如何解析这样的代码?

c macros c-preprocessor

2
推荐指数
1
解决办法
134
查看次数

标签 统计

c ×2

c-preprocessor ×2

macros ×2

sbt ×1

scala ×1