c-preprocessor 相关问题

C和C ++计算机编程语言的宏预处理步骤。此标记还可用于有关源自或具有相同功能的其他编译器/语言的问题,例如Objective-C或C#中的#directives。

如何防止C++宏替换类成员?

我正在构建一个Linux内核模块,源代码是基于C++的。 名为 A.cpp 的 src 文件之一始终生成失败。 A.cpp间接包含两个头文件:asm/current.h和bits/

回答 1 投票 0

如何防止C++宏被替换

我正在构建一个linux内核模块,源代码是基于C++的。 名为 A.cpp 的 src 文件之一始终构建失败。 A.cpp间接包含两个头文件:asm/current.h和bits/stl_iter...

回答 1 投票 0

如何检查(通过预处理器)C 源文件是否正在编译为 C++ 代码

问题标题应该说明一切,但这里有一个例子说明我正在寻找什么样的东西: #ifndef THE_IDENTIFIER_THAT_WOULD_INDICATE_BEING_COMPILED_AS_CPLUSPLUS /* * 一些例子...

回答 6 投票 0

你能在C预处理器中比较两个常量指针吗?

假设我的代码如下所示: GPIO.h: #定义GPIO_BASE 0x08000100 #define GPIOA ((GpioRegs *) (GPIO_BASE + 0x04)) #define GPIOB ((GpioRegs *) (GPIO_BASE + 0x0C)) #define GPIOC ((GpioRegs *) (GPIO...

回答 1 投票 0

某人如何定义数据类型,然后在数据类型定义之后在同一文件中包含的其他文件中使用它

我需要asn1 BER编码器/解码器,并发现它是“asn1c”编译器的一部分(这里是链接http://lionet.info/asn1c/blog/)。 我使用“配置、制作、...

回答 2 投票 0

我可以将自己的程序挤在预处理器和编译器之间吗?

这是一个愚蠢的问题,还是我可以指定 g++ 在预处理器和编译器之间使用程序? 或者,我知道我可以只在文件上运行预处理器(因此是所有文件)。 ...

回答 2 投票 0

如果你只有一个标识符,#define 会做什么

通常#define 用于定义常量或宏。 但是,按以下方式使用 #define 是有效的代码。 #define MAX // 这有什么作用吗? #define MAX 10 // 我知道怎么做

回答 5 投票 0

忽略丢失的.obj文件或“/P开关+外部工具+链接器=地狱”

我正在尝试按照上一个问题中所述进行设置:在编译之前有什么方法可以通过外部工具解析预处理源吗? 我所有的 .cpp 文件都设置为使用 /p 进行编译,wh...

回答 2 投票 0

调试和预处理器指令

为了调试,我在应用程序中多次调用调试日志函数。当然,在生产版本中,需要跳过这些调试调用。而不是写: #如果开发== 1 日志:...

回答 3 投票 0

Qt 的 pragma 指令 [已关闭]

有人可以给我指出一篇文章,其中将讨论 Qt 环境中可用的 pragma 指令吗?

回答 2 投票 0

pragma代码段和数据段有什么用?

如果我在我的c源代码文件中使用以下两行,数据段和文本段到底会发生什么? #pragma CODE_SECTION(func1, "Sec1") #pragma DATA_SECTION(globalvar1, "Sec2")

回答 2 投票 0

C++ 预处理器意外编译错误

请看以下文件:(这是一个完整的文件) #ifndef TEES_ALGORITHM_LIBRARY_WRAPPER_H #定义TEES_ALGORITHM_LIBRARY_WRAPPER_H #ifdef _TEES_COMPILE_AS_LIB #包括 请看以下文件:(这是一个完整的文件) #ifndef TEES_ALGORITHM_LIBRARY_WRAPPER_H #define TEES_ALGORITHM_LIBRARY_WRAPPER_H #ifdef _TEES_COMPILE_AS_LIB #include <dfa\Includes\DFC_algorithms.hpp> #include <DFA\FuzzyClassifier\FuzzyAlgorithmIntialization\InitFuzzyAlgorithm.hpp> typedef teesalgorithm::tees_fuzzy_algorithms algorithms_switchyard_class; #else #include <DFA\Includes\commercial_algorithms.hpp> //An incomplete class to hide implementation class algorithms_switchyard_class; #endif class AlgorithmLibraryWrapper { algorithms_switchyard_class * algorithmPtr_; typedef teesalgorithm::tees_paramObj paramObj_type; typedef teesalgorithm::tees_errorObj errorObj_type; typedef teesalgorithm::tees_statusObj statusObj_type; typedef teesalgorithm::tees_dataObj dataObj_type; typedef teesalgorithm::tees_outputObj outputObj_type; public: AlgorithmLibraryWrapper(const std::string& sAlgName, paramObj_type& paramObj, errorObj_type& errObj, statusObj_type& statusObj, const char* sFilePath); static bool dataReader(const std::string& sFileName, dataObj_type& dataObj, errorObj_type& errObj, statusObj_type& statusObj); bool runalgorithm(const dataObj_type& dataObj, outputObj_type& outObj, errorObj_type& errObj, statusObj_type& statusObj); ~AlgorithmLibraryWrapper(); }; #ifdef _TEES_USE_COMPILED_ALGORITHM_LIB # ifdef _MSC_VER #if _MSC_VER < 1400 // If VC 2003 #ifdef _DEBUG #error No AlgorithmLibWrapper libraries compiled for this version of VC #else #error No AlgorithmLibWrapper libraries compiled for this version of VC #endif #elif defined(UNDER_CE) // Win CE #ifdef _DEBUG #pragma comment( lib, "AlgorithmLibWrapperCEd" ) #else #pragma comment( lib, "AlgorithmLibWrapperCE" ) #endif #else // If VC 2005 #ifdef _DEBUG #pragma comment( lib, "AlgorithmLibWrapperd" ) #else #pragma comment( lib, "AlgorithmLibWrapper" ) #endif #endif #endif #endif #endif //TEES_ALGORITHM_LIBRARY_WRAPPER_H 我收到以下错误;我不知道为什么。我还手动计算了预处理器指令。 AlgorithmLibraryWrapper.hpp:10:1:未终止#ifdef AlgorithmLibraryWrapper.hpp:7:1:未终止#ifndef 我正在使用糟糕的 vxWorks gcc 编译器。请告诉我问题是我的还是编译器的。 问题可能出在包含的文件中(如果实际上存在不平衡的#if/#endifs。 我会尝试使用另一个编译器进行预处理。你可以使用 gcc 来实现这一点,没关系,它不会编译。只需获取 gcc(或 MinGW,如果您使用的是 Windows)并运行 cpp -Iinclude_direcories your_file 或者,如果您不喜欢 gcc,请获取 MSVC Express 版本。同样,您可以预处理甚至无法编译的代码,因此对于非工作库等没有问题。 大多数编译器都有一个选项,可以为您提供预处理器的输出,以便您可以检查它正在做什么。例如, gcc -E file.c >file.preproc 将为您提供预处理的源代码,以便您可以检查 #if 与 #endif 的平衡。 据猜测,您从该文件中 #include 的文件之一具有不匹配的 #ifdef/#endif 对。您需要查看所有文件(正如预处理器所做的那样),而不仅仅是这个文件。 正如其他人所指出的,这很可能是由于包含守卫不匹配造成的。 如果您包含的文件在您的控制之下(即不属于第 3 方闭源库的一部分),您可以考虑替换 #ifndef et。等人。使用 #pragma 一次进行防护(用于防止多重包含)。 这将消除预处理器指令不匹配的可能性。 需要注意的是 pragma Once 是非标准的,因此只有当您的编译器支持它时它才有效。 我尝试使用 vs 6.0 编译您的源代码,但没有收到您提到的错误。正如其他人所说,错误可能来自包含的头文件。为了让我编译你的代码,我需要评论上面的标题。 请检查一次以上标题。 我会通过逐一注释掉各个部分并尝试找出导致错误的部分来调试此问题。 可能是您的编译器不喜欢嵌套的 #ifdefs 或无法正确解释语法。也许它不喜欢#pragmas。 这是一个远景,但在你的源文件中你有以下行: # ifdef _MSC_VER “#”字符和指令名称 (ifdef) 之间有空格。 这在 C/C++ 中有效;然而,它并不常见,所以如果奇怪的编译器被它卡住了,我不会感到非常惊讶。

回答 6 投票 0

在C中定义宏两次

我正在开发嵌入式系统项目,我不知道为什么我现在注意到了这一点,但是如果我定义一个变量两次,编译器不会给我任何警告或错误,这很奇怪,因为. ..

回答 4 投票 0

获取可变参数宏参数列表中每个参数的类型?

我有一个这样的宏: #define ptapply(pt, ret_type, 标识符, ...) ((ret_type (*)()) pget(pt, 标识符))(pt __VA_OPT__(,) __VA_ARGS__) pget 返回一个 void *,我将其转换为函数 po...

回答 1 投票 0

C 预处理器语句是 C 语言的一部分吗?

我记得我的一位教授在 C 入门课程中提出的一个主张。他表示,#define 预处理器命令使程序员能够创建一个常量以在以后的代码中使用,并且......

回答 3 投票 0

在编译期间忽略具有运算符的 C++ 函数的使用<<

我正在开发一个类似于 GLib 日志记录的 API。 当标志 -DDEBUG 未传递给 GCC 时,我的 API 还可以禁用这些函数。 这意味着,二进制文件中没有任何残留物,所有这些调试

回答 1 投票 0

如何在 Meson 中定义 C/C++ 预处理器变量?

我想有条件地定义一个变量,然后可以在 C/C++ 源代码中使用该变量来有条件地编译一些代码,如下所示: #ifdef MY_MESON_VARIABLE // 一些代码 #endif 我该怎么办

回答 1 投票 0

库文件和定义

我正在使用几个外部库,我不想将它们的所有源文件和头文件包含在我的主源目录或项目文件中。一种选择是编译

回答 2 投票 0

_WIN32、__linux__...预处理器宏如何工作?

像GCC这样的C编译器如何定义预处理器宏来检测当前操作系统? 我查看了GCC的源代码,发现了这个builtin_define("_WIN32");但我不确定这是否是......

回答 1 投票 0

如果定义了两个或多个定义,是否可以触发#if宏?

例如,假设您只想启用一个编译目标,因此您可以执行以下操作: // 取消注释其中一个 #define 以针对特定目标进行编译 #定义TARGET_1 #定义 TARG...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.