问题标签 [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 投票
4 回答
3076 浏览

c++ - 如何用#include 替换这个预处理器宏?

更新: 显然,您希望使用模板或基类而不是宏来执行此操作。不幸的是,由于各种原因,我不能使用模板或基类。


目前我正在使用宏在各种类上定义一堆字段和方法,如下所示:

FIELDS_AND_METHODS是一个使用字符串化和标记粘贴运算符的多行宏。

我想用下面的东西代替它

这里我#define类的名称(以前是宏的参数),FieldsNMethods.h文件包含原始宏的内容。但是,因为我是#include,所以在调试时我可以在运行时单步执行代码。

但是,我在“字符串化”和“标记粘贴”文件TYPE_NAME中的预处理器符号时遇到了麻烦FieldsNMethods.h

例如,我想在 中定义类的析构函数FieldsNMethods.h,所以这需要使用如下的值TYPE_NAME

但用TYPE_NAME它的价值代替。

我正在尝试的可能吗?我不能直接使用字符串化和标记粘贴运算符,因为我不在宏定义中。

0 投票
8 回答
104645 浏览

objective-c - 如何在 Xcode 中定义预处理器符号

是否可以通过在 Xcode 项目中设置属性来设置条件编译的符号?

我的目标是创建一个可用于所有文件的符号,而不必使用导入/包含,以便一组通用类在某些项目中具有特殊行为。如下所示,但带有我自己的符号。

0 投票
4 回答
59204 浏览

c - 宏名称的有效字符是什么?

C 风格的宏名称是否遵循与标识符相同的命名规则?编译器升级后,它现在针对旧版应用程序发出此警告:

这行代码为 & 符号定义了一个 ASCII 值常量。

我假设这个定义(据我所知,实际上并没有被任何代码引用)是错误的,应该更改为“CHAR_AMPERSAND”之类的东西?

0 投票
10 回答
57441 浏览

c++ - C 中的命名空间

有没有办法(ab)使用C预处理器来模拟C中的命名空间?

我在想一些事情:

这将被翻译成:

0 投票
13 回答
13384 浏览

objective-c - C 预处理器的替代品

我有兴趣使用C预处理器以外的东西来预处理我的C和 Objective-C 源代码。有没有好的选择?

一个例子是允许一个人在C代码中间逃逸到 python 或 perl 片段中,并且片段吐出C,然后按正常方式编译。

0 投票
5 回答
9496 浏览

c# - 条件编译取决于 C# 中的框架版本

是否有任何预处理器符号允许类似

或其他方式来做到这一点?

0 投票
21 回答
77964 浏览

c - "#include" C 程序中的文本文件作为 char[]

有没有办法在编译时将整个文本文件作为字符串包含在 C 程序中?

就像是:

  • 文件.txt:

    /li>
  • 主.c:

    /li>

获得一个在标准输出上打印的小程序“这是一个小文本文件”

目前我使用了一个 hackish python 脚本,但它很丑陋,并且仅限于一个变量名,你能告诉我另一种方法吗?

0 投票
5 回答
168 浏览

c# - 退出预处理器块时整数值更改

我有一段代码,其中似乎变量在预处理器代码块的末尾发生了变化。

在应该分配 20000 之后在调试器中执行此操作时,initialKeyCount = 19969。我已经玩了一点,发现在第一个预处理器块内分配给 initialKeyCount 是正确的,但是一旦代码离开第一个预处理器阻止值神奇地更改为 19969。

无论变量是在第一个预处理器块内部还是外部声明,此行为都是相同的。该值在第二个预处理器块内保持为 19969。

预处理器块中的分配是否在该块之外未定义?这似乎是错误的,但似乎就是这里发生的事情。

0 投票
7 回答
3714 浏览

c# - 如何从 C# 中的预编译器获取当前日期时间?

在 C# 3.0 中,我有一个属性,它应该包含类的版本。版本号只是编译的日期和时间。现在,我有以下代码:

显然,这是错误的,因为这个属性返回给我当前的日期和时间。那么,预编译器是否可以在编译时打印DateTime?在这种情况下,我可以做类似下面的事情。

0 投票
4 回答
3782 浏览

c++ - 这可能在宏中使用省略号吗?可以转成模板吗?

在实现了 CLogClass 以进行体面的日志记录之后,我还定义了宏,但它只适用于一个参数......

好吧,当使用超过 2 个参数调用时它会失败 :( ... 是否有可能避免它?可以以某种方式将其转换为模板吗?

编辑:可变参数宏是在 VS 2005 中引入的(但我目前在 VS 2003 中......)。有什么建议吗?