标签: preprocessor

现代语言中的预处理器是否已过时?

我正在为一个简单的宠物语言编写一个简单的编译器,我正在创建并来自C背景(虽然我用Ruby编写)我想知道是否需要预处理器.

你怎么看?现代语言中仍然需要"哑"预处理器吗?C#的条件编译功能会被视为"预处理器"吗?是否每种不包含预处理器的现代语言都具有正确替换它所需的实用程序?(例如,由于模板,C++预处理器现在已经过时(尽管仍然依赖).)

language-agnostic preprocessor language-design

6
推荐指数
3
解决办法
658
查看次数

选择Mako预处理器,根据文件扩展名进行?

我想以某种方式设备mako.lookup.TemplateLookup,以便它仅为某些文件扩展名应用某些预处理器.

具体来说,我有一个haml.preprocessor我想应用于文件名结尾的所有模板.haml.

谢谢!

python haml preprocessor mako

6
推荐指数
1
解决办法
575
查看次数

像#warning指令一样的Java?

在我的项目中,我有类似的东西final boolean Debug.USE_DEBUG_MODE,然后我总是忘记将其切换回来false.我想知道我是否可以添加类似于#warningC++指令的内容,所以我不会忘记更改代码.

java debugging preprocessor

6
推荐指数
1
解决办法
595
查看次数

在Scala中调试日志,不会影响性能

在像C/C++/Objective-C这样的语言中,通常使用预处理器宏来定义甚至不为已发布的二进制文件编译的日志记录机制,从而不会导致性能损失.有点像:

#ifdef DEBUG
printf("some event we want to log\n");
#endif
Run Code Online (Sandbox Code Playgroud)

现在,我知道Scala中没有预处理器.所以我的问题是:为了调试目的,实现记录程序活动的机制的最佳方法是什么,而在关闭时影响性能最少?

debugging optimization logging preprocessor scala

6
推荐指数
2
解决办法
1197
查看次数

在QT中,如何区分调试和释放,就像预处理器一样

我知道我们可以在c#中使用#if DEBUG #else #endif,所以我觉得Qt也有同样的方法,比如:

QString Paths::sqlScriptPath()
{
#if DEBUG
    return "D:\edocclient\edocclient-build-Desktop_Qt_4_8_4_QT4_8_4-Debug\sql";
#else
    return "D:\edocclient\edocclient-build-Desktop_Qt_4_8_4_QT4_8_4-Release\sql";
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

debugging qt preprocessor release

6
推荐指数
1
解决办法
2846
查看次数

在预处理器i文件中保留注释

我们希望使用预处理器输出文件(.i文件)进一步使用,尤其是注释.
为此,我们使用/PREPRINT(或/PP)命令行开关.
问题是KEIL编译器(C166)删除任何注释.

问:是否可以在.i文件中保留评论?

其他研究:
Microsoft编译器使用/P命令行开关执行此操作.
但他们有/C保持评论.

preprocessor comments keil preprocessor-directive

6
推荐指数
2
解决办法
1438
查看次数

获取预处理器宏的特定值

在我的构建设置中,我定义了一些预处理器宏

SANDBOX_ENV = 1

我想在我的shell脚本中使用SANDBOX_ENV的值.

我试过回声 "SANDBOX value is = ${GCC_PREPROCESSOR_DEFINITIONS}"

但它给了我所有的宏值 DEBUG=1 SANDBOX_ENV=1 COCOAPODS=1

我想使用分配给SANDBOX_ENV的值

shell macros xcode preprocessor ios

6
推荐指数
1
解决办法
1043
查看次数

我可以使用什么预处理器来检测QT是否用于构建我的代码

我正在用C编写一个库项目,可以使用或不使用QT构建.是否有任何预处理程序指令(不需要额外的标头)可用于区分QT是否在C代码中使用?

我想做的事情如下:

#ifdef I_AM_QT
// some qt specific codes
#else
// some codes for other environments
#endif
Run Code Online (Sandbox Code Playgroud)

谢谢.

qt preprocessor c-preprocessor

6
推荐指数
1
解决办法
1017
查看次数

cmake:如何检查是否定义了预处理器

我无法cmake测试是否已定义预处理器.例如:

cmake_minimum_required(VERSION 2.8.9)
project (cmake-test)
add_definitions(-DOS=LINUX)

if(NOT <what condition goes here?>)
    message(FATAL_ERROR "OS is not defined")
endif()
Run Code Online (Sandbox Code Playgroud)

以下测试不起作用:

if (NOT COMMAND OS)
if (NOT DEFINED OS)
if (NOT OS)
Run Code Online (Sandbox Code Playgroud)

我可以通过使用set()并测试常规cmake变量然后定义预处理器宏来使其工作.例如:

set(OS LINUX)
if (OS)
    add_definitions(-DOS=${OS})
else()
    message(FATAL_ERROR "OS is not defined")
endif()
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你想知道为什么我需要测试它,如果变量/预处理器在同一个文件中,那是因为在最终实现中这些将来include自主CMakeFile.txt中的外部文件例如:

include(project_defs.txt)
if (OS)
    ....
Run Code Online (Sandbox Code Playgroud)

preprocessor cmake

6
推荐指数
1
解决办法
5728
查看次数

如何折叠带有预处理器的控制语句?

最近,我一直在处理一些同事的一些遗留代码,使用 Visual Studio 代码我已经能够将其转换为清晰且可读的 C 格式。然而,我想折叠一些控制语句,因为我的同事编写的控制语句有时会超过 100 行。

在这些行中,我添加了预处理器控制语句来启用和禁用我的更改。

在 Visual Studio 代码中,我能够很好地折叠代码,但是一旦遇到预处理器语句(至少是 #ifdef 和 #ifndef),它就会停止。由于大约每 10 行中有 1 行要折叠一个控制语句,我需要折叠 10 次,这有点打败了它背后的想法,对吗?

我尝试在设置和一些谷歌搜索中寻找折叠和折叠,但我找不到任何可以解决我的问题的东西。

例如我有这个片段

if(true)
{
    Some functions();
#ifdef DEBUG
    Functions with debugging only();
#else
    Functions without debugging only();
#endif
    Some other functions();
}
Run Code Online (Sandbox Code Playgroud)

我希望,每当我折叠 if(true) 时,该控制语句中的所有内容都会被折叠。这是我习惯的,也是在 Eclipse 中 vs2017 中会发生的情况。这在 VSCODE 中不会发生!而只是一些函数();被折叠。

如何使 VSCODE 折叠行为与其他 IDE 类似?

c preprocessor folding visual-studio-code

5
推荐指数
1
解决办法
1239
查看次数