标签: preprocessor

我的用于Lua的DSL会工作吗?(这似乎太简单了)

我真的很喜欢Lua作为一种编程语言,但令人难以置信的是,我必须经常local为所有局部变量键入" ".

它只是让我的代码看起来更混乱.

所以我想知道,我可以在Lua之上创建一个域特定语言(DSL)来简单地使用以下变量命名约定.

  1. 如果变量名称在所有大写字母中,那么它是一个全局变量
  2. 否则,变量是local变量

问题:这是否有效 - 是或否?

换一种说法:

-- In Lua 5.2
isGlobalinLua  = "is global in default Lua"
GLOBALVAR      = "is global var in default Lua"
local localvar = "is local var in default Lua"

-- In my DSL Lua language
isLocalinDSLLua = "is local in DSL Lua"  -- translates to: local isLocalinDSLLua = ...
GLOBALVAR       = "is global DSL Lua"
localvar        = "is local var in DSL Lua"  -- …
Run Code Online (Sandbox Code Playgroud)

dsl lua preprocessor luajit

5
推荐指数
2
解决办法
716
查看次数

如何计算我的处理器的MIPS?

我有一台旧电脑.
我想精确计算MIPS(每秒百万指令)和处理器的DMIPS.
我能为此做些什么?

architecture performance x86 preprocessor performance-testing

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

检查iso_c_binding在编译时是否可用

在混合C/Fortran应用程序的上下文中,有没有办法检查编译器是否知道"iso_c_binding"(例如GCC 4.1.2不知道它,而4.3.4确实如此),就像预处理指令一样或者其他的东西?我不能简单地检查GCC的版本,因为我可能会使用其他编译器.

谢谢

c preprocessor fortran fortran-iso-c-binding

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

具有绝对路径的 C++ __FILE__ 宏

我试图在 C++ 编译时获取编译文件的绝对路径。我知道该__FILE__宏 - 但是,该宏可以计算为绝对路径或相对路径,具体取决于预处理器的参数。

我想确保我的__FILE__(或任何其他宏)计算结果为文件的完整绝对路径。有没有办法可靠地跨平台做到这一点?(我正在为 VS2013、VS2015、ubuntu 上的 GCC、MinGW 上的 GCC 进行编译)

c++ gcc preprocessor visual-studio

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

预处理如何在此代码段中工作?

#include<stdio.h>
#define A -B
#define B -C
#define C 5

int main() {
  printf("The value of A is %dn", A); 
  return 0;
} 
Run Code Online (Sandbox Code Playgroud)

我遇到了上面的代码.我认为在预处理之后,它会被转换为

// code from stdio.h

int main() {
  printf("The value of A is %dn", --5); 
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这应该导致编译错误.但是,代码编译良好并产生输出5.

在这种情况下如何对代码进行预处理,以免导致编译器错误?

PS:我在Linux x86-64上使用gcc版本8.2.0.

c macros preprocessor

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

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

最近,我一直在处理一些同事的一些遗留代码,使用 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
查看次数

使用 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
查看次数