Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(ab)使用C预处理器的合法用途?_C - Fatal编程技术网

(ab)使用C预处理器的合法用途?

(ab)使用C预处理器的合法用途?,c,C,在和许多类似的问题中,最终有一个类似的查询,“如何使用预处理器生成{code}?” 上面链接的问题中的代码非常适合GNU AutoGen,或者更简单的东西,比如对XML、YAML、JSON或其他格式进行解组,然后封送到所需的代码 简单化是生成代码的一种方法,在简单的情况下,它可能会很有用。然而,有些人似乎希望将类似的思维方式应用于更复杂的问题,这些问题需要不明显地使用预处理器,而简单地自己生成代码要比等待特定情况的答案快得多 是否有理由增加预处理时间(以及编译时间)?或者,在开发过程中,依赖外部

在和许多类似的问题中,最终有一个类似的查询,“如何使用预处理器生成{code}?”

上面链接的问题中的代码非常适合GNU AutoGen,或者更简单的东西,比如对XML、YAML、JSON或其他格式进行解组,然后封送到所需的代码

简单化是生成代码的一种方法,在简单的情况下,它可能会很有用。然而,有些人似乎希望将类似的思维方式应用于更复杂的问题,这些问题需要不明显地使用预处理器,而简单地自己生成代码要比等待特定情况的答案快得多

是否有理由增加预处理时间(以及编译时间)?或者,在开发过程中,依赖外部工具(无论是完整的模板处理工具、在主机系统上编译和执行的小型助手C程序,甚至是生成代码的简单shell脚本)不那么有利,这有什么原因吗

是否有理由增加预处理时间(以及编译时间)

实际上,预处理器速度很快。但是它不是很强大,像这样的技巧也不是很可读

或者,在开发过程中,依赖外部工具(无论是完整的模板处理工具、在主机系统上编译和执行的小型助手C程序,甚至是生成代码的简单shell脚本)不那么有利,这有什么原因吗

我相信大多数人认为依靠外部工具是不够的。但它们有几个缺点;首先,外部工具添加了一些外部依赖项。然后,许多外部工具无法生成可靠的
#line
指令,因此错误消息的可读性较差。最后,一些工具很难为外部工具配置:在
Makefile
中添加
make
规则很容易,但为它们配置一些IDE可能会更难

(你的问题很有意见基础)

是否有理由增加预处理时间(以及编译时间)

实际上,预处理器速度很快。但是它不是很强大,像这样的技巧也不是很可读

或者,在开发过程中,依赖外部工具(无论是完整的模板处理工具、在主机系统上编译和执行的小型助手C程序,甚至是生成代码的简单shell脚本)不那么有利,这有什么原因吗

我相信大多数人认为依靠外部工具是不够的。但它们有几个缺点;首先,外部工具添加了一些外部依赖项。然后,许多外部工具无法生成可靠的
#line
指令,因此错误消息的可读性较差。最后,一些工具很难为外部工具配置:在
Makefile
中添加
make
规则很容易,但为它们配置一些IDE可能会更难


(你的问题很有意见基础)

答案/权衡不是不言而喻的吗?构建/维护自定义生成器的成本与它生成的代码的质量(如性能)相比。这是基于意见的,可能会得到更好的答案。答案/权衡不是不言而喻的吗?构建/维护自定义生成器的成本与它生成的代码的质量(例如性能)相比。这是基于意见的,可能会得到更好的答案。感谢您的回答。事实上,我知道Boost预处理器库,但在询问之前没有找到它存在的原因。最初我认为包含C++作为我的问题也适用于它,但是它会邀请与C++相关的答案,阻止适用于两种语言的答案。但是,您提供的许多答案也在中表达。如果我昨晚发现的话,我就不会问了。再次感谢你的回答。事实上,我知道Boost预处理器库,但在询问之前没有找到它存在的原因。最初我认为包含C++作为我的问题也适用于它,但是它会邀请与C++相关的答案,阻止适用于两种语言的答案。但是,您提供的许多答案也在中表达。如果我昨晚发现的话,我就不会问了。再次感谢