问题标签 [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++ - 如何在 cpp 宏中生成换行符?
如何编写扩展以包含换行符的 cpp 宏?
c# - 在 C# 代码中重用 .h 文件中的定义语句
我有 C++ 项目(VS2005),它在#define 指令中包含带有版本号的头文件。现在我需要在双 C# 项目中包含完全相同的数字。最好的方法是什么?
我正在考虑将此文件作为资源包含在内,然后在运行时使用正则表达式对其进行解析以恢复版本号,但也许有更好的方法,你觉得呢?
我不能将版本移到 .h 文件之外,构建系统也依赖于它,而 C# 项目是一个应该适应的项目。
c++ - 我应该使用#define、枚举还是常量?
在我正在处理的 C++ 项目中,我有一个标志类型的值,它可以有四个值。这四个标志可以组合。标志描述数据库中的记录,可以是:
- 新纪录
- 删除记录
- 修改记录
- 现有记录
现在,对于我希望保留此属性的每条记录,我可以使用枚举:
但是,在代码的其他地方,我需要选择哪些记录对用户可见,所以我希望能够将其作为单个参数传递,例如:
所以,似乎我有三种可能的方法:
或者
或者
空间要求很重要(字节与整数),但并不重要。使用定义我失去了类型安全性,并且enum
我失去了一些空间(整数)并且当我想要进行按位运算时可能不得不强制转换。我const
认为我也失去了类型安全性,因为随机uint8
可能会错误地进入。
还有其他更清洁的方法吗?
如果没有,你会用什么,为什么?
PS 其余的代码是相当干净的没有#define
s 的现代 C++,而且我在少数空间中使用了命名空间和模板,所以这些也不是没有问题的。
c++ - 仅包括操作系统上的某些库
在编写一个想要在 mac、linux 和 windows 上编译的应用程序时,管理需要包含在各种操作系统中的不同库的最佳方法是什么。例如,使用 glut opengl 工具包需要在每个操作系统上使用不同的包含。
c - 将某些东西同时作为 C 标识符和字符串?
假设您要生成匹配的标识符和字符串列表
..无需重复,无需自动生成代码,使用 C/C++ 宏
初步猜测:
您可以添加一个 #include 文件,其中包含
然后像这样使用它两次:
但是#define 不允许您将参数放在字符串中?
c - 在 C 中查找变量的名称
昨晚有人问我一个 C 的问题,我不知道答案,因为我从大学开始就没有经常使用 C,所以我想也许我可以在这里找到答案,而不是忘记它。
如果一个人有一个定义,例如:
该人可以使用其中的 1 找到变量名称count
吗?
我不这么认为,因为我认为计数会指向 1,但看不到 1 如何指向计数。
c++ - #ifdef 与 #if - 作为启用/禁用特定代码部分编译的方法,哪个更好/更安全?
这可能是风格问题,但我们的开发团队中存在一些分歧,我想知道是否其他人对此事有任何想法......
基本上,我们有一些在正常开发过程中关闭的调试打印语句。就个人而言,我更喜欢执行以下操作:
不过,一些团队更喜欢以下内容:
...哪种方法听起来更好,为什么?我的感觉是第一个更安全,因为总是有一些定义,并且没有危险它可以破坏其他地方的其他定义。
c++ - 枚举和定义语句之间的区别
在 C/C++ 中使用 define 语句和 enum 语句有什么区别(在 C 或 C++ 中使用它们时有什么区别)?
例如,什么时候应该使用
超过
c - 可以使用宏对变量进行只读访问吗?
你能定义一个访问普通变量的宏,但是以只读方式(除了将其定义为对函数的调用)吗?例如,以下代码中的 VALUE 宏是否可以定义为使 dostuff() 函数导致编译错误?
c - 如何在 C 预处理器标记中转义下划线?
下面的代码片段应该采用 PROJECT 的值(在 Makefile 中定义)并创建一个包含文件名。例如,如果 PROJECT=classifier,那么它应该在最后为 PROJECTINCSTR 生成classifier_ir.h
我发现只要我不尝试在后缀中使用下划线,这段代码就可以工作。然而,下划线的使用不是可选的——我们的代码库在任何地方都使用它们。我可以解决这个问题,因为 PROJECT 的值数量有限,但我想知道如何使用下划线使以下代码段实际工作。能逃脱吗?
编辑:编译器应该尝试包含classifier_ir.h,而不是PROJECT_ir.h。