问题标签 [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.

0 投票
7 回答
39321 浏览

c++ - 如何在 cpp 宏中生成换行符?

如何编写扩展以包含换行符的 cpp 宏?

0 投票
7 回答
11174 浏览

c# - 在 C# 代码中重用 .h 文件中的定义语句

我有 C++ 项目(VS2005),它在#define 指令中包含带有版本号的头文件。现在我需要在双 C# 项目中包含完全相同的数字。最好的方法是什么?

我正在考虑将此文件作为资源包含在内,然后在运行时使用正则表达式对其进行解析以恢复版本号,但也许有更好的方法,你觉得呢?

我不能将版本移到 .h 文件之外,构建系统也依赖于它,而 C# 项目是一个应该适应的项目。

0 投票
15 回答
67084 浏览

c++ - 我应该使用#define、枚举还是常量?

在我正在处理的 C++ 项目中,我有一个标志类型的值,它可以有四个值。这四个标志可以组合。标志描述数据库中的记录,可以是:

  • 新纪录
  • 删除记录
  • 修改记录
  • 现有记录

现在,对于我希望保留此属性的每条记录,我可以使用枚举:

但是,在代码的其他地方,我需要选择哪些记录对用户可见,所以我希望能够将其作为单个参数传递,例如:

所以,似乎我有三种可能的方法:

或者

或者

空间要求很重要(字节与整数),但并不重要。使用定义我失去了类型安全性,并且enum我失去了一些空间(整数)并且当我想要进行按位运算时可能不得不强制转换。我const认为我也失去了类型安全性,因为随机uint8可能会错误地进入。

还有其他更清洁的方法吗?

如果没有,你会用什么,为什么?

PS 其余的代码是相当干净的没有#defines 的现代 C++,而且我在少数空间中使用了命名空间和模板,所以这些也不是没有问题的。

0 投票
8 回答
496 浏览

c++ - 仅包括操作系统上的某些库

在编写一个想要在 mac、linux 和 windows 上编译的应用程序时,管理需要包含在各种操作系统中的不同库的最佳方法是什么。例如,使用 glut opengl 工具包需要在每个操作系统上使用不同的包含。

0 投票
2 回答
8395 浏览

c - 将某些东西同时作为 C 标识符和字符串?

假设您要生成匹配的标识符和字符串列表

..无需重复,无需自动生成代码,使用 C/C++ 宏

初步猜测:

您可以添加一个 #include 文件,其中包含

然后像这样使用它两次:

但是#define 不允许您将参数放在字符串中?

0 投票
18 回答
680 浏览

c - 在 C 中查找变量的名称

昨晚有人问我一个 C 的问题,我不知道答案,因为我从大学开始就没有经常使用 C,所以我想也许我可以在这里找到答案,而不是忘记它。

如果一个人有一个定义,例如:

该人可以使用其中的 1 找到变量名称count吗?

我不这么认为,因为我认为计数会指向 1,但看不到 1 如何指向计数。

0 投票
20 回答
106220 浏览

c++ - #ifdef 与 #if - 作为启用/禁用特定代码部分编译的方法,哪个更好/更安全?

这可能是风格问题,但我们的开发团队中存在一些分歧,我想知道是否其他人对此事有任何想法......

基本上,我们有一些在正常开发过程中关闭的调试打印语句。就个人而言,我更喜欢执行以下操作:

不过,一些团队更喜欢以下内容:

...哪种方法听起来更好,为什么?我的感觉是第一个更安全,因为总是有一些定义,并且没有危险它可以破坏其他地方的其他定义。

0 投票
18 回答
38551 浏览

c++ - 枚举和定义语句之间的区别

在 C/C++ 中使用 define 语句和 enum 语句有什么区别(在 C 或 C++ 中使用它们时有什么区别)?

例如,什么时候应该使用

超过

0 投票
5 回答
883 浏览

c - 可以使用宏对变量进行只读访问吗?

你能定义一个访问普通变量的宏,但是以只读方式(除了将其定义为对函数的调用)吗?例如,以下代码中的 VALUE 宏是否可以定义为使 dostuff() 函数导致编译错误?

0 投票
3 回答
1679 浏览

c - 如何在 C 预处理器标记中转义下划线?

下面的代码片段应该采用 PROJECT 的值(在 Makefile 中定义)并创建一个包含文件名。例如,如果 PROJECT=classifier,那么它应该在最后为 PROJECTINCSTR 生成classifier_ir.h

我发现只要我不尝试在后缀中使用下划线,这段代码就可以工作。然而,下划线的使用不是可选的——我们的代码库在任何地方都使用它们。我可以解决这个问题,因为 PROJECT 的值数量有限,但我想知道如何使用下划线使以下代码段实际工作。能逃脱吗?

编辑:编译器应该尝试包含classifier_ir.h,而不是PROJECT_ir.h。