标签: preprocessor

预处理器和编译器之间的边界究竟在哪里?

根据各种消息来源(例如,与Kevlin Henney的SE电台节目,如果我没记错的话),"C with classes"是用预处理器技术实现的(输出然后被输入到C编译器),而C++一直是用编译器实现(刚好在早期就吐出了C).这似乎引起了一些混乱,所以我想知道:

预处理器和编译器之间的边界究竟在哪里?你什么时候调用一个实现语言"预处理器"的软件,什么时候称它为"编译器"?

那么,"编译语言"是一个既定术语?如果是这样,究竟是什么意思?

c++ compiler-construction preprocessor terminology

8
推荐指数
1
解决办法
528
查看次数

Perl中的C代码预处理

我在C代码解析器上工作Perl.

目前我需要预处理代码.预处理的实现似乎需要做很多工作,所以我正在寻找一个允许预处理文件的脚本或库.

我发现了以下可能性:

  1. 文字:: CPP
  2. 过滤:: CPP

这两个都需要cpp我在Windows机器上没有的.还有其他选择吗?

c perl preprocessor

8
推荐指数
1
解决办法
1149
查看次数

反序列化marshmallow中的嵌套字段

我正在使用返回类似以下内容的API:

{'name': 'foo', 'start': {'date': '2016-06-19', 'time': '18:00'}}
Run Code Online (Sandbox Code Playgroud)

我想用棉花糖去除它,只获得名称和开始日期,所以期望的结果如下:

{'name': 'foo', 'date': '2016-06-19'}
Run Code Online (Sandbox Code Playgroud)

但我没有找到任何方法来获取日期,这是我尝试过的:

from marshmallow import Schema, fields, pprint

event = {'name': 'foo', 'start': {'date': '2016-06-19', 'time': '18:00'}}
class EventSchema(Schema):
    name = fields.Str()
    date = fields.Str(load_from='start.date')


schema = EventSchema()
result = schema.load(event)
pprint(result.data)
Run Code Online (Sandbox Code Playgroud)

python preprocessor transformation marshmallow

8
推荐指数
2
解决办法
5615
查看次数

Inno Setup:如何查看Inno Setup预处理器的输出(转换)?

我有一个带有预处理程序指令(#defines,#ifs等)的Inno Setup脚本

我想在我的脚本上运行Inno Setup预处理器并查看预处理器的输出(Inno-Setup中的翻译).也就是说,我想查看它通常提供给Inno Setup Compiler的预处理器的结果,其中所有引用{#something}都被更改为something定义为的内容.

我查看命令行选项(of iscc.exe)和#pragma指令,但没有找到我正在寻找的内容.我看到我可以指定不运行编译器(#pragma -c- | /$c-)但我没有找到一种方法来查看预处理器的输出.

简而言之,我如何看待Inno Setup预处理器的输出?

preprocessor inno-setup

7
推荐指数
1
解决办法
1271
查看次数

是否可以防止在Visual C++中删除空__VA_ARGS__的逗号?

在Visual Studio 2005上,我有一个看起来像这样的宏(例如!!):

#define MY_CALL(FUN, ...) \
  if(prepare(x, y)) {     \
    FUN(__VA_ARGS__);     \
  }
/**/
Run Code Online (Sandbox Code Playgroud)

只要函数至少有一个参数,我就没事了.

当函数接受零参数时,预处理器"帮助"删除"尾随逗号",扩展如下:

if(prepare(x y)) { funct(); }
Run Code Online (Sandbox Code Playgroud)

太棒了,不是吗?

我该如何修复这个宏,以便__VA_ARGS__在Visual C++(VS 2005)上使用零?


显然这是VS2005中的一个错误.

macros preprocessor visual-c++ variadic-macros

7
推荐指数
1
解决办法
1245
查看次数

如何预处理机器学习数据?

我只是想要一些关于如何在将数据输入机器学习算法之前对其进行预处理的一般提示.我正在努力进一步理解为什么我们在预处理时做出不同的决定,如果有人可以通过我们在清理数据时需要考虑的所有不同的事情,删除多余的数据等等.我会发现它非常有用.我在网上搜索了一些规范的答案或经验法则,但似乎没有.

我在这里有.tsv文件中有一组数据.训练集总计7,000行,测试集为3,000行.如果100行不可读,我应该使用哪些不同的策略来处理格式错误的数据?500?1000?任何帮助我理解这一点的指导都将非常感激.

示例代码很好看,但如果您不喜欢它,则没有必要,我只想了解我应该做什么!:)

谢谢

python preprocessor artificial-intelligence machine-learning scikit-learn

7
推荐指数
1
解决办法
4727
查看次数

D编程lnaguage中"#ifdef","#ifnf","#else","#elif","#define","#undef"的类似物是什么?

在C/C++中,我们有预处理程序指令(参见问题的标题).D语言中它们的类比是什么?如何在编译时检测操作系统类型(Windows,Linux,Mac OS X,FreeBSD,...)和处理器类型(例如:32位或64位)?

preprocessor d

7
推荐指数
2
解决办法
473
查看次数

为什么我的cocoapods post_install挂钩不更新我的预处理器宏?

我已经四处转转了几天,现在试图找出为什么我的post_install挂钩没有产生我期待的输出.这是我的Podfile:

source 'https://github.com/CocoaPods/Specs.git'

target "SCCommon" do
  platform :ios, "6.0"
  pod 'AFNetworking', '~> 1.2.1'
  pod 'Mantle', '~> 1.3'
  pod 'PubNub', '3.5.5'
end

target "SCCommon-TestHarness" do
  platform :ios, "6.0"
# inhibit_all_warnings!
  pod 'SCCommon', :path => '../SCCommon.podspec'
end

target "SCCommon-UnitTests" do
  platform :ios, "6.0"
# inhibit_all_warnings!
  pod 'OCMock', '2.2.3'
  pod 'SCCommon', :path => '../SCCommon.podspec'
end

post_install do |installer_representation|
  installer_representation.project.targets.each do |target|
    if target.name == 'Pods-SCCommon-UnitTests'
      puts "Setting preprocessor macro for #{target.name}..."
      target.build_configurations.each do |config|
        puts "#{config} configuration..."
        config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)','SC_DEBUG_SCCOMMON=1','FOOBAR']
        puts config.build_settings['GCC_PREPROCESSOR_DEFINITIONS']
        puts …
Run Code Online (Sandbox Code Playgroud)

ruby macros preprocessor cocoapods xcode-project

7
推荐指数
1
解决办法
4336
查看次数

使用 GNU gfortran 将宏字符串化

如何使用 GNU gfortran 对预处理器宏进行字符串化?我想将宏定义传递给 GNU gfortran,然后将其用作代码中的字符串。

实际上,我想这样做:

program test
implicit none
character (len=:), allocatable :: astring
astring = MYMACRO
write (*, *) astring
end program test
Run Code Online (Sandbox Code Playgroud)

然后构建:

gfortran -DMYMACRO=hello test.F90
Run Code Online (Sandbox Code Playgroud)

我尝试创建各种宏,例如:

#define STRINGIFY_(x) #x
#define STRINGIFY(x) STRINGIFY_(x)
...
astring = STRINGIFY(MYMACRO)
Run Code Online (Sandbox Code Playgroud)

但这不适用于 gfortran 预处理器。

我还尝试使用不同风格的宏:

#define STRINGIFY(x) "x"
...
astring = STRINGIFY(MYMACRO)
Run Code Online (Sandbox Code Playgroud)

但这只会创建一个包含文本“MYMACRO”的字符串。

然后我尝试将宏定义更改为:

-DMYMACRO=\"hello\"
Run Code Online (Sandbox Code Playgroud)

但这在构建过程中导致了无关的问题。

感谢您的帮助

preprocessor fortran gfortran stringification stringify

7
推荐指数
1
解决办法
1583
查看次数

如何将C中的多行宏与行尾的注释结合起来

我有脑痉挛... C中是否有一种方法可以将多线宏与每条线上的注释结合起来?

例如

#define MYARRAY { \
  0.001,   //  5 mV \
  0.002,   // 10 mV \
  0.004,   // 20 mV \
  0.007,   // 35 mV \
  0.013    // 65 mV \
}
Run Code Online (Sandbox Code Playgroud)

我需要在头文件中定义一个注释数组值列表,这些值在其他地方使用,并使其非常易读.

c preprocessor comments

7
推荐指数
2
解决办法
652
查看次数