标签: preprocessor

在java的Annotation Processor中发现methodinvocation的类

我正在为我们的构建系统编写一些工具,以对属于包含某些注释的类的方法强制执行一些严格的调用约定.

我正在使用编译器树API ...

我想知道的是当遍历'tree'时,你怎么能告诉MethodInvocation的类/接口的类型.

我将TreePathScanner子类化为:

@Override
public Object visitMethodInvocation(MethodInvocationTree node, Trees trees) {

}
Run Code Online (Sandbox Code Playgroud)

我希望有一种方法可以告诉您尝试调用该方法的类(或接口)的类型.我是以错误的方式来做这件事的吗?谢谢你的任何想法......

java preprocessor annotations javac

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

是否可以在Adobe Flex中执行#define?

我正在寻找一种在adobe flex中做类似于ac/c ++ #define的方法.

我希望项目构建可以采用许多不同的路径,具体取决于枯萎或未定义的东西.flex中存在这样的东西吗?

我知道有办法设置全局变量,但这并不适合我的目的.能够拥有众多#ifndefined的结构,这就是我真正需要的东西.

谢谢!

apache-flex preprocessor flex3

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

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

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

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

language-agnostic preprocessor language-design

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

C++:静态分析代码(和/或预处理代码)的工具

通常我可以使用一些工具来静态分析我的代码,以帮助我使其更清洁.像编译器警告的东西,但这些还不够.我时不时地想要写一个(使用clang库或gccxml),但我想这需要太多的工作.

我想到的一些事情是:

  1. 寻找神奇的数字(即:不同于0的硬编码常数).

  2. 检查三个规则是否始终受到尊重(每个类必须定义所有析构函数,复制构造函数和赋值运算符,或者都不定义).


我也梦想(但这些东西都是纯粹的乌托邦)关于预处理器,它解析一些非标准代码并将其转换为有效的C++代码,这个工具能够:

  1. 扩展模板别名,以便我可以在C++中使用它们(好吧,使用C++ 0x不再需要它)

  2. 在文件末尾移动内联函数,这样我就不必遵守declare-before-use规则,并且能够像在Java中一样编写内联类.

  3. 提供扩展语法,如支持自定义运算符(将在函数调用中扩展),或一些特殊语法/关键字,以轻松实现某些模式.


有没有任何工具,能够做这些事情的一部分?

否则你会建议哪些库来实现这些任务(clang libs,gccxml,...),你认为需要做多少工作?

c++ parsing preprocessor

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

特殊使用C宏

阅读C库的套接字接口的代码,我发现了这个:

/* Types of sockets.  */
enum __socket_type
{
   SOCK_STREAM = 1,     /* Sequenced, reliable, connection-based
               byte streams.  */
#define SOCK_STREAM SOCK_STREAM
   SOCK_DGRAM = 2,      /* Connectionless, unreliable datagrams
               of fixed maximum length.  */
#define SOCK_DGRAM SOCK_DGRAM
...
Run Code Online (Sandbox Code Playgroud)

这个"成语"遍及bits/socket.h.我只是好奇,那些宏的目的是什么?

c enums preprocessor constants

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

在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编写一个库项目,可以使用或不使用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
查看次数

cpp和gcc -E之间的区别

我想这两个cpp foo.cgcc -E foo.c做预处理源文件相同的方式,但我得到了他们的输出为同一个文件的不同.

$ cat foo.c
#define VARIABLE 3
#define PASTER(x,y) x ## _ ## y
#define EVALUATOR(x,y)  PASTER(x,y)
#define NAME(fun) EVALUATOR(fun, VARIABLE)

extern void NAME(mine);
Run Code Online (Sandbox Code Playgroud)

结果cpp:

$ cpp foo.c
# 1 "foo.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 329 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "foo.c" 2





extern void mine ## _ ## 3;

$
Run Code Online (Sandbox Code Playgroud)

结果gcc -Eclang -E: …

c gcc preprocessor c-preprocessor

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

AFX_DESIGN_TIME的目的是什么?它在何处定义?

我在VS2015 MFC项目中找到了以下代码.

#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_DIALOG1 };
#endif
Run Code Online (Sandbox Code Playgroud)

我想了解这个预处理器的目的.谷歌没有给我任何足够的东西.如果你能对它有所了解,我将不胜感激.

mfc preprocessor dialog

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