标签: preprocessor

在 gfortran 中预处理 !DEC$ 指令

我有一个最初针对英特尔编译器的大型 Fortran 代码库。我现在正准备用 gfortran 进行编译。不幸的是,代码中充斥着 Intel 风格的预处理指令,例如:

!DEC$ IF DEFINED (MYDIRECTIVE)
   REAL, DIMENSION(:,:,:), ALLOCATABLE :: my_real_var
!DEC$ ENDIF
Run Code Online (Sandbox Code Playgroud)

从我通过谷歌搜索和 gfortran 文档可以看出,除了 C 风格的预处理之外,没有内部 gfortran 支持,例如:

#if defined MYDIRECTIVE
   REAL, DIMENSION(:,:,:), ALLOCATABLE :: my_real_var
#endif
Run Code Online (Sandbox Code Playgroud)

有没有其他人遇到过这个问题并提出了一个优雅的解决方案?显然,我可以编写一个 shell 脚本,在将代码传递给 gfortran 进行编译之前调用外部预处理器,但这对我来说似乎不是一个很好的解决方案。

有什么想法吗?谢谢大师!

preprocessor fortran gfortran intel-fortran

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

在 Xcode 构建期间预处理字符串文件

我知道有一种方法可以预处理我的 info.plist 文件,但是是否有类似的方法来处理我的 Settings.bundle 中的字符串文件?

我的问题:我有一个 iPhone 应用程序,我希望用户知道当前安装的版本。我通过在应用程序设置中显示它来做到这一点。现在,每当我在我的info.plist改变捆绑版本时我也有更改的版本Root.stringsSettings.bundle。我可以运行一个脚本操作来更新它,但是使用预处理器会很好,因为我可以用它做更多有趣的事情。

谢谢!

iphone xcode cocoa-touch preprocessor

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

在 Pandoc 中编号和引用图像

我想在 Pandoc 中的图像中添加诸如“图 1:废话”之类的标题,并能够像查看@Figure1 一样引用它们。我正在使用 gpp(一个预处理器)为我的图像添加标题并执行各种奇特的操作,例如更改大小、格式等。但是,我无法为图 1、图 2 等图像实现计数器。

我在我的 gpp 脚本中定义了以下函数:

\define{\counter}{0}

\defeval{count}{\eval{\counter+ 1}
Run Code Online (Sandbox Code Playgroud)

我在我的脚本中这样称呼它: \count

但是,\counter在我的 gpp 脚本中没有得到评估,我看到以下内容error: unfinished macro

我应该如何实现这个计数器?我在 gpp 中使用 -T (tex) 模式

html latex preprocessor pandoc

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

xcconfig:用于调试/发布的不同预处理器宏

我创建并应用了一个简单的 .xcconfig 文件,其中包含

GCC_PREPROCESSOR_DEFINITIONS[config=Debug] = FOODEBUG
GCC_PREPROCESSOR_DEFINITIONS[config=Release] = FOORELEASE
Run Code Online (Sandbox Code Playgroud)

和 main.cpp 包含

#include <iostream>

// This warning IS shown
#if DEBUG
#warning DEBUG is set to 1
#endif

// This warning IS NOT shown
#ifdef FOODEBUG
#warning FOODEBUG is set
#endif

// This warning IS NOT shown
#ifdef FOORELEASE
#warning FOORELEASE is set
#endif

int main(int argc, const char * argv[])
{
    // insert code here...
    std::cout << "Hello, World!\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在我想知道为什么在 main.cpp 中,既没有定义 FOODEBUG 也没有定义 FOORELEASE ??! …

xcode preprocessor xcconfig

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

在 CUDA NVRTC 代码中包含 C 标准头文件

我正在编写一个在运行时使用 NVRTC(CUDA 9.2 版和 NVRTC 7.5 版)编译的 CUDA 内核,它需要stdint.h头文件,以便拥有int32_t等类型。

如果我编写没有包含的内核源代码,它可以正常工作。例如内核

extern "C" __global__ void f() { ... }
Run Code Online (Sandbox Code Playgroud)

编译为 PTX 代码,其中 f 定义为.visible .entry f.

但是如果内核源代码是

#include <stdint.h>
extern "C" __global__ void f() { ... }
Run Code Online (Sandbox Code Playgroud)

它报告A function without execution space annotations (__host__/__device__/__global__) is considered a host function, and host functions are not allowed in JIT mode.(也没有extern "C")。

传递-default-device使 PTX 代码.visible .func f,因此无法从主机调用该函数。

有没有办法在源代码中包含标题,并且仍然具有__global__入口功能?或者,一种知道 …

preprocessor cuda stdint nvrtc

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

使用 sci-kit learn 仅输入数值

因此,我有一个 DataFrame,其中包含当前12345按行排列的分类值和数值值171

我在分类变量和数值变量中都缺少值,我想在其中估算值。对于数字列,我正在执行以下操作;

import pandas as pd
import numpy as np

data = pd.read_csv('filepath')

from sklearn.preprocessing import Imputer
imp = Imputer(missing_values=np.nan, strategy='mean', axis=0)
data = imp.fit_transform(data)
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误

ValueError:无法将字符串转换为浮点数:'USD'

我理解这是因为我使用的 sci-kit learns imputer 与strategy='mean'分类变量不兼容。我宁愿不必遍历每一列并手动提取数值,因此我正在寻找一种只能在数值列上执行此插补的方法。

python preprocessor scikit-learn

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

导出 .h 文件中的定义

我必须在 .S 文件中包含 .h 中的一些宏。.h 还包含 c 声明。因此我使用了定义

gcc -E -dM header.h > generated_header.h

generated_header.h还具有所有预定义的宏和标准符号。

现在 gcc -Iinclude/ asm.S -o asm.o 给出以下警告的数量

warning: "__GCC_ATOMIC_LLONG_LOCK_FREE" redefined warning: "__GCC_ATOMIC_SHORT_LOCK_FREE" redefined warning: "__STDC__" redefined ETC...

这是因为我们通过在asm.S中包含generated_header.h再次重新定义相同的宏

我检查了所有预处理器选项以仅提取本地定义。但没有任何帮助。有没有其他方法可以解决这个问题。有没有其他方法可以让 asm.S 知道这些宏?

c assembly preprocessor

5
推荐指数
0
解决办法
425
查看次数

在 C++20 中实现无预处理器的断言

C++ 知道assert()哪个允许运行时检查,根据NDEBUG.

我想使用编译器代码替换该宏并避免使用预处理器。我需要执行以下操作:

  • 如果表达式的计算结果为,则中断或终止false
  • 记录调用断言的代码行
  • NDEBUG放弃构建的检查和传递的表达式

中断/终止应用程序很容易。

在 C++20 中,std::experimental::source_location我可以使用它来获取断言的代码位置。

编译时条件可以使用requires或完成constexpr if

但是我不知道如何避免对表达式的求值。当myAssert(expression)作为函数实现时,我需要将表达式结果作为函数参数传递,这意味着即使该参数未在函数内部使用,它仍然会被计算。

C++20 有没有办法解决这个问题?

编辑:模板化示例:

template <typename T> requires (gDebug)
void assertTrue(const T& pResult, const std::experimental::source_location& pLocation) noexcept
{
   if (!static_cast<bool>(pResult))
   {
      // error handling
   }
}

template <typename T> requires (!gDebug)
void assertTrue(const T&) noexcept
{
}
Run Code Online (Sandbox Code Playgroud)

c++ preprocessor assertion c++20

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

替换所有连续重复的字母,忽略特定单词

我看到很多建议使用 re (正则表达式)或 python 中的 .join 删除句子中连续重复的字母,但我想对特殊单词有例外。

例如:

我想要这句话>sentence = 'hello, join this meeting heere using thiis lllink'

像这样>'hello, join this meeting here using this link'

知道我有这个单词列表要保留并忽略重复的字母检查:keepWord = ['Hello','meeting']

我发现有用的两个脚本是:

我有一个解决方案,但我认为还有一个更紧凑、更高效的解决方案。我现在的解决方案是:

import itertools

sentence = 'hello, join this meeting heere using thiis lllink'
keepWord = ['hello','meeting']

new_sentence = ''

for word in sentence.split():
    if word not in keepWord:
        new_word = …
Run Code Online (Sandbox Code Playgroud)

python regex text preprocessor

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

预处理常量数的指数

我的问题:我想获得一个带有 N_DIGITS 数字的 id,并且我希望 N_DIGITS 在预处理时可以自定义。我的 id 是一个整数,所以我想定义 10^N_DIGITS 作为这个数字的最大值。

换句话说:是否可以用宏作为指数预处理数字?

这是我的终极尝试:

#include <stdio.h>

#define N_DIGITS 5
#define MAX_N    10e ## N_DIGITS

int main()
{
    printf("%d\n", MAX_N);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,错误是error: exponent has no digits. 我不明白为什么这个原则不能实现,因为编译器知道一切,但我可​​能是错的。

无论如何我的语法不正确,我可以在这里得到一些帮助吗?

c preprocessor

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