问题标签 [c-preprocessor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - _never_executed() 的目的是什么?
我以前见过这个宏定义,但从来没有真正知道它的用途。任何人都可以阐明这一点吗?
c - #undef-ing 在实践中?
我想知道#undef 在 C 中的实际用途。我正在研究 K&R,并且正在处理预处理器。其中大部分是我(或多或少)理解的材料,但第 90 页(第二版)的内容让我印象深刻:
名称可以用 未定义
#undef
,通常是为了确保例程确实是函数,而不是宏:
#undef getchar
int getchar(void) { ... }
这是防止某人#define
使用与您的函数同名的宏的常见做法吗?或者这真的更像是一个在现实中不会发生的样本?(EG,没有人在他的正确,错误或疯狂的头脑中应该重写getchar()
,所以不应该出现。)有了你自己的函数名,你觉得有必要这样做吗?如果您正在开发一个供其他人使用的库,这种情况会改变吗?
c - ## 预处理器运算符的应用和要考虑的问题是什么?
正如我之前的许多问题中提到的,我正在通过 K&R 工作,目前正在进入预处理器。更有趣的事情之一——我以前尝试学习 C 时从未知道的事情——是##
预处理器操作符。根据 K&R:
预处理器运算符
##
提供了一种在宏扩展期间连接实际参数的方法。如果替换文本中的参数与 a 相邻##
,则将参数替换为实际参数,##
并删除周围的空白,并重新扫描结果。例如,宏paste
连接它的两个参数:
#define paste(front, back) front ## back
所以
paste(name, 1)
创建了令牌name1
。
有人如何以及为什么会在现实世界中使用它?有哪些实际使用示例,是否有需要考虑的问题?
c - Fortran 数组到 C 数组。需要愚蠢的宏观技巧
我有这个“简化”的 fortran 代码
一位编程大师警告我,fortran 按列顺序有效访问数据,而 c 按行顺序有效访问数据。他建议我仔细查看代码,并准备好切换循环以保持旧程序的速度。
作为一个懒惰的程序员,我认识到所涉及的时间以及我可能犯的错误,我开始想知道是否有一种#define 技术可以让我安全、轻松地转换这段代码。
你有什么建议吗?
c - 在另一个中包含一个 C 源文件?
另一个文件中#include
的文件可以(甚至推荐/良好做法)吗?.c
.c
c - 将预处理器标记转换为字符串
我正在寻找一种将预处理器令牌转换为字符串的方法。
具体来说,我在某个地方得到了:
我想用它来防止缓冲区溢出:
我愿意接受其他方式来完成同样的事情,但仅限于标准库。
c++ - 构建相同 C/C++ 应用程序变体的最佳方法是什么
我有三个密切相关的应用程序,它们是从相同的源代码构建的——比如说 APP_A、APP_B 和 APP_C。APP_C 是 APP_B 的超集,而 APP_B 又是 APP_A 的超集。
到目前为止,我一直在使用预处理器定义来指定正在构建的应用程序,它的工作原理是这样的。
然后我的 IDE 构建选项指定(例如)
...在源代码中,我会有类似的东西
但是,今天早上我开枪打死了自己,只是从一个文件中省略了 #include "app_defines.h" 行,这浪费了很多时间。一切编译正常,但应用程序在启动时与 AV 一起崩溃。
我想知道处理这个问题的更好方法是什么。以前,这通常是我认为可以使用#define 的少数几次之一(无论如何,在 C++ 中),但我仍然搞砸了,编译器没有保护我。
c++ - 包含#include 指令的宏定义
有没有办法定义一个#include
在其主体中包含指令的宏?
如果我只是把“ #include
”,它给出了错误
因为在这里我不用#
来连接字符串。
如果我使用“ \# include
”,则会收到以下两个错误:
有什么帮助吗?