问题标签 [preprocessor-directive]

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 投票
2 回答
501 浏览

objective-c - 宏编译器错误:当参数名称出现在别处时出现“解析问题”

我尝试制作一个简单的宏来在 iOS 中创建和显示一个简单的“ok”对话框:

如果我尝试在我的代码中使用它:

我得到错误:

解析问题。预期的 ']'

并且错误似乎指向第二个@之前"Message"

但是,如果我只是复制粘贴宏,我不会收到此错误:

是否反对在宏中使用 Objective-c 结构?或者那是别的什么?

0 投票
2 回答
3133 浏览

c++ - 在预处理器指令中使用变量

在预处理器指令 file.cpp 中可以使用哪个全局变量

或者

文件.cpp

或文件.cpp

在处理程序指令中使用变量的规则是什么?如果一个变量可以恒定折叠,它可以在#if/#elif#else 指令中使用吗?

0 投票
2 回答
54 浏览

c++ - 根据项目定义不同的功能

我目前有两个 c++ 项目,它们共享许多相同的源文件和头文件。其中一个是游戏服务器,另一个是客户端。我的一些类具有客户端或服务器独有的功能,因此只能为其中之一编译。但是,我不确定该怎么做。到目前为止,我的尝试是:

  1. 在Client.h #define IS_CLIENT(包括 main 函数)和#define IS_SERVERServer.h 中使用。这失败了,因为其他头文件必须使用#include它们(所以当我想编译某些东西时,我最终不得不修改所有头文件)

  2. 使用#include "CompileType.h"where CompileType.h 定义 IS_CLIENT 或 IS_SERVER。这是与以前的方法不同的一项重大改进,但仍然让我在想要编译时更改文件。

两种尝试都使用#ifdef#endif围绕 .cpp 文件中的选择函数定义。

如果可能的话,一个可能的解决方案是#define在全球范围内(因此它会影响所有源文件和头文件)。我的 IDE (Code::Blocks) 设置中可能还有一些我还没有看到的东西。

对此问题的任何见解将不胜感激。

0 投票
1 回答
239 浏览

c - 预处理阶段和多个文件(基础)

我有三个文件,想编译它。

第一个文件是 app.c

第二个文件是 sum.h

第三个文件 sum.c

我写下这些陈述:

防止内容的多重定义sum.h

在编译期间app.c会进入预处理阶段然后sum.c进入预处理阶段我的问题当sum.c进入预处理器时如何知道SUM_Hmyapp的最后一个文件中定义的?我认为每个源文件分别进入预处理阶段和编译阶段。

0 投票
3 回答
220 浏览

c-preprocessor - 编辑/重新定义常量字符串:是的,我知道矛盾

我正在尝试更改常量变量值,是的,我知道我正在做的事情的矛盾,但是有一种方法可以解决我的疯狂。

你看我正在用一种非常类似于C /C++ 的语言编写,称为 4dm,但它不允许函数之外的任何代码,所以我试图通过使用预处理器命令来克服这个问题。原因是我可以在语言中实现某种形式的专业化。第一步涉及能够编辑常量字符串。

尽管这是一种不同的语言,但预处理器的运行方式与 C 和 C++ 编译器完全相同:

以下是连接字符串的简单尝试,但我收到一个编译错误,说明MY_STR is not defined如何解决此问题?

0 投票
1 回答
10572 浏览

c-preprocessor - 预处理器指令:#elif 未定义?

是否有预处理器指令检查是否未定义常量。我知道该#ifndef指令,但我也在寻找#elif not defined指令。#elif not defined存在吗?

这就是我将如何使用它:

0 投票
0 回答
167 浏览

c-preprocessor - 允许 GUI 库扩展的预处理器宏功能

我正在尝试创建一个预处理器宏函数,为我正在制作的我自己的 GUI 库注册回调函数。该库旨在通过使用上述宏功能由第三方轻松扩展。

我的问题:我的宏函数包括我认为不允许的其他预处理器指令。我想对我的 REGISTER_CUSTOM_CALLBACK_FUNCTION 进行编码,以允许用户创建自己的小部件并使用主 GUI 库注册自己的回调函数。有什么想法我仍然可以实现我想要做的事情吗?

这是每个时钟步骤调用的主窗口回调:

有什么想法可以编写我的 REGISTER_CUSTOM_CALLBACK_FUNCTION 以允许用户创建自己的小部件并使用主 GUI 库注册自己的回调函数?

0 投票
2 回答
669 浏览

c# - 将这行 vb 代码转换为 C# 时遇到问题

我有一个正在尝试转换为 C# 的 vb.net 项目。我有一个名为 MyWebExtension.vb 的文件,其中有这行代码#If _MyType <> "Empty" Then

我试图转换成 C##if (_MyType != "Empty")

当我运行应用程序时,我收到以下错误:

无效的预处理器表达式。

我的转换做错了什么?

0 投票
4 回答
295 浏览

c++ - 对共享文件使用预处理器指令

我有一个带有以下预处理器指令的 .cpp 文件(我们称之为 check.cpp):

check.cpp 文件用于两个不同的项目。(项目在同一个文件夹中并共享同一个 check.cpp 文件,该文件也在同一个文件夹中)

我希望一个项目执行此代码,但另一个项目不执行此代码。

所以最后,对于 ProjectA,check.cpp 将具有:

对于 ProjectB,check.cpp 将具有:

是否可以使用预处理器指令,或者可能有更简单的方法?

我的想法是使用

并将其放在其中一个项目中而不是另一个项目中,但 .cpp 文件需要包含 #define 才能工作,并且该文件是共享的...

有任何想法吗?

0 投票
2 回答
4095 浏览

c# - 如何取消定义符号 CONTRACTS_FULL?

如果您在项目属性页面的代码合同选项卡中启用合同检查,Visual Studio 会自动定义CONTRACTS_FULL符号。

- C# 5.0 简而言之(第 518 页)

我想禁用/取消定义该符号,但它没有出现在项目设置Conditional compilation symbols的选项卡字段中。Build

(我对完全禁用代码合同不感兴趣!我只是说将合同检查设置None为不是解决方案)。

如果这很重要,我想这样做的原因是因为在我的发布版本中我只想抛出Contract.Requires<TException>,而我根本不想抛出ContractException

我发现的一个“解决方案”是放在#undef CONTRACTS_FULL每个文件的第一行,它修复了它,但实际上这样做会很糟糕。

(顺便说一句,到目前为止 VS 没有定义CONTRACTS_FULL,我必须自己定义它,但我猜有些设置不小心改变了)