标签: preprocessor

gfortran:非法预处理器指令和无效字符/非数字字符编译错误

因此,我尝试使用 NAS 基准测试对特定 MPI 实现进行性能测试。所以我去编译 Fortran 代码,但遇到了障碍。每当我输入此命令进行编译时:

gfortran -O0 -Wall -I/home/stephen/trunk/include -I.  -c ./TestData/common/timers.f
Run Code Online (Sandbox Code Playgroud)

我收到这些编译器错误:

Warning: mpif.h:2: Illegal pdreprocessor directive
Warning: mpif.h:3: Illegal preprocessor directive
Warning: mpif.h:4: Illegal preprocessor directive
Warning: mpif.h:5: Illegal preprocessor directive
Warning: mpif.h:6: Illegal preprocessor directive
Warning: mpif.h:7: Illegal preprocessor directive
Warning: mpif.h:8: Illegal preprocessor directive
Warning: mpif.h:9: Illegal preprocessor directive
Warning: mpif.h:12: Illegal preprocessor directive
Warning: mpif.h:13: Illegal preprocessor directive
Warning: mpif.h:14: Illegal preprocessor directive
Warning: mpif.h:2: Illegal preprocessor directive
Warning: mpif.h:3: Illegal preprocessor directive …
Run Code Online (Sandbox Code Playgroud)

preprocessor fortran compilation directive gfortran

3
推荐指数
1
解决办法
1万
查看次数

在 pascal 定义中传递参数

我试图用帕斯卡(freepascal)定义一些东西。与在 C++ 中一样,您可以像这样传递变量定义宏:

#define REP(i,k) for(int i=0; i<k; i++)
Run Code Online (Sandbox Code Playgroud)

你怎么能用帕斯卡做到这一点?

我在第一行添加了{$MACRO ON}命令,因此它可以运行正常的定义,而不会出现类似{$define lala:='hello world'}.

但是当我尝试{define lala(i):=i}该程序时出现错误。

如何在 Pascal 定义中传递变量参数?

macros preprocessor pascal freepascal

3
推荐指数
1
解决办法
1101
查看次数

Jmeter中预处理时如何进行HTTP-Request?

在实际测试执行之前,我想调用一些 HTTP API 并从中解析响应,然后再将其处理到我的 SSH 命令采样器。在 Jmeter 中最好的方法是什么?就像 JDBC 请求有一个预处理器一样,为什么 HTTP 请求没有预处理器呢?

preprocessor http jmeter

3
推荐指数
1
解决办法
3634
查看次数

C++:宏参数中可以有空格吗?

如果我定义一个带有参数的宏,如下所示。

#define define_int(a) int a;
Run Code Online (Sandbox Code Playgroud)

并提供一个参数,中间有空格,如下所示

define_int(* a)
Run Code Online (Sandbox Code Playgroud)

并得到输出?

int * a;
Run Code Online (Sandbox Code Playgroud)

有可能的使用

#define ASSIGN(A,B) B=A;
Run Code Online (Sandbox Code Playgroud)

我想直接使用这个宏从函数返回

ASSIGN(A, return B)
Run Code Online (Sandbox Code Playgroud)

这样它就会输出,

return B = A;
Run Code Online (Sandbox Code Playgroud)

c++ macros preprocessor

3
推荐指数
1
解决办法
5583
查看次数

根据是否定义了另一个宏来评估宏

以下基于预处理器的标识符到字符串查找表:

#include <iostream>

// included generated file
#define KEY_a valueA
#define KEY_b valueB
///////

#define LOOKUP_(_key_) KEY_ ## _key_
#define QUOTE_(_str_) #_str_
#define EXPAND_AND_QUOTE_(_str_) QUOTE_(_str_)

#define LOOKUP(_key_) EXPAND_AND_QUOTE_(LOOKUP_(_key_))

int main() {
    std::cout << LOOKUP(a) << std::endl;
    std::cout << LOOKUP(b) << std::endl;
    std::cout << LOOKUP(c) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:

valueA
valueB
KEY_c
Run Code Online (Sandbox Code Playgroud)

第一个#defines 来自编译前外部脚本生成的#included 标头。

LOOKUP宏正确处理表中的现有键,并将给定值替换为字符串文字。

但对于不存在的键,它会将键替换为字符串文字。

有没有办法让它用给定的常量替换不存在的键,而不会导致编译时错误,并且全部在预处理阶段进行?

例如,LOOKUP(c)LOOKUP(whatever)应该全部替换为"undefined", 而不出现cwhatever出现在包含的生成文件中。

键的名称不应输出到编译的二进制文件中,因此理想情况下编译器永远不会看到它们。

c++ preprocessor c-preprocessor

3
推荐指数
1
解决办法
403
查看次数

AttributeError:模块“预处理器”没有属性“clean”

我正在尝试使用预处理器库来清理存储在 Pandas 数据框中的文本。我已经安装了最新版本(https://pypi.org/project/tweet-preprocessor/),但收到以下错误消息:

import preprocessor as p
#forming a separate feature for cleaned tweets
for i,v in enumerate(df['text']):
    df.loc[v,'text'] = p.clean(i)

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-183-94e08e1aff33> in <module>
      1 #forming a separate feature for cleaned tweets
      2 for i,v in enumerate(df['text']):
----> 3     df.loc[v,'text'] = p.clean(i)

AttributeError: module 'preprocessor' has no attribute 'clean'
Run Code Online (Sandbox Code Playgroud)

python preprocessor attributeerror

3
推荐指数
1
解决办法
6559
查看次数

C# 中的高级元编程是否有一些行业“标准”?

在各种项目中,我时不时地会遇到 C# 项目中无法使用泛型解决的元编程情况,并且会受益于更强大的元编程工具。我通常采用的解决方案是通过反射解决问题、使用 C++/cli,或者引入自定义 xml/xslt 编译器步骤。

这是否反映了 C# 社区普遍采用的方法,或者是否存在我不知道的有价值的方法,例如广泛使用的第 3 方预处理器?

我不是在要求产品推荐,而是在询问针对这个常见问题的既定通用解决方案。“不,没有”可能是有效且正确的答案。

.net c# preprocessor metaprogramming

3
推荐指数
1
解决办法
501
查看次数

我的分号怎么了?(gcc 预处理器)

我想我会很聪明,围绕禁用/启用中断编写一个小的预处理器包装器,如下所示:

#define WITH_INTERRUPTS_DISABLED(_body)                                        \
  do {                                                                         \
    uint32_t primask = DisableGlobalIRQ();                                     \
    do {                                                                       \
      _body                                                                    \
    } while (0);                                                               \
    EnableGlobalIRQ(primask);                                                  \
  } while (0)
Run Code Online (Sandbox Code Playgroud)

GCC 预处理器,当出现此源时:

WITH_INTERRUPTS_DISABLED(
  i += 2; 
  quux();
);
Run Code Online (Sandbox Code Playgroud)

...生成此输出(重新格式化以提高可读性):

do {
  uint32_t primask = DisableGlobalIRQ();
  do {
    i += 2;
    quux();
  } while (0);
  EnableGlobalIRQ(primask);
} while (0)
Run Code Online (Sandbox Code Playgroud)

根据Godbolt 先生的说法,所有 GCC 变体的行为都如上,省略了结束分号。同时,所有clang变体的输出都包含分号。

有没有办法说服 GCC 包含分号?

c gcc preprocessor clang

3
推荐指数
1
解决办法
52
查看次数

C# 预处理器根据环境变量定义符号

我有一些这样的逻辑:

#define MYVAR
...
#if MYVAR
[Attribute1]
#else
[Attribute2]
#endif
Run Code Online (Sandbox Code Playgroud)

我希望能够根据环境变量切换应用于方法的属性,就像MYVAR设置环境变量一样,然后实际定义符号“MYVAR”,反之亦然。

老实说,我不知道这是否可能。如果没有任何想法如何克服这个问题?我当然可以将其添加到方法本身中 - env. 变量检查,但由于正在执行反射,我需要属性。我可以创建自定义MyAttrbute(int mode),但无法在其构造函数中添加逻辑来提取环境。变量,因为它必须是常量表达式。

可能的解决方案:

  • 就像第一条评论所暗示的那样,我可以阅读环境。自定义属性中的变量。仍然会有一些令人讨厌的反思要做。

  • 因为我使用 dotnet 命令在 Linux 上工作,所以我实际上可以将构建命令与 pre-step 命令捆绑在一起,并在文件顶部sed添加一个虚拟占位符,并将其替换为空字符串或基于 env 的完整字符串。变量。这里没有反射,但不是很优雅。{{define_myvar}}.cs

c# attributes preprocessor

3
推荐指数
1
解决办法
2437
查看次数

预处理器算法是否应该与编译的目标架构相匹配?

假设我有这个预处理器检查:

#if(-6 & 5)
    #error "No 2's complement signed int"
#endif
Run Code Online (Sandbox Code Playgroud)

如果我从二进制补码机交叉编译到二进制补码机,会发生什么情况。编译器会使用目标机器的算术,还是编译机器的算术?

谢谢

c preprocessor language-lawyer

3
推荐指数
1
解决办法
151
查看次数