首页 > TAG信息列表 > c-preprocessor

c#-为常量定义,如在C中

假设我有一个文件,该文件从dll导入了许多功能,在我必须输入的每个功能之前: [DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl)] 但这很无聊,代码变得更长->很难理解,在C语言中我可以使用如下定义: #define DLL_IMPORT [DllImport(...)] 我可以在C#中做什么?解

c-Lib文件和定义

我正在使用几个外部库,而不必在主源目录或项目文件中包含所有它们的源文件和头文件.一种选择是将库编译为lib文件,然后像这样链接它们.但是我不确定在创建lib文件之前或之后对定义进行评估(是哪个?).如果在此之前,显然我不能打包它们,因为它们可能无法在不同的编译器或系统上正常工

C宏中“ ##”是什么意思?

这个问题已经在这里有了答案:            >            What are the applications of the ## preprocessor operator and gotchas to consider?                                    13个 >            T

c-如何逐步查看宏扩展?

好像是Eclipse allows user to “see the expansion Step-by-Step” by pressing F2. 我喜欢这个很棒的功能.但是我可以只用gcc或clang(或任何工具)做同样的事情吗? -E选项使所有宏完全扩展.因此,我没有找到任何其他逐步扩展宏的方法. Eclipse很大.我希望我不需要到处都安装它并一直

c-如何仅将C预处理程序应用于某些(#if /#endif)指令?

我想知道是否有可能,如果可以,我是否可以在计算机上运行像cpp这样的C预处理程序 C源文件,仅处理条件指令#if #endif等.我希望其他指令在输出文件中保持完整. 我正在对C#代码进行一些分析,没有C#预处理程序.我的想法是在C#文件上运行C预处理程序,并且仅处理条件语句.这样,例如#regio

c – 在struct中使用typedef来命名和索引文本命令

我正在使用一个简单的命令行应用程序,它接收ASCI文本并将其解释为命令. 我试图通过http://gcc.gnu.org/onlinedocs/cpp/Concatenation.html的示例来最小化此应用程序中的冗余. 例如: 考虑一个解释命名命令的C程序.可能需要一个命令表,可能是一个声明如下的结构数组: struct command

c – Codeblocks调试预处理器

我正在编写一个带有Codeblocks的C程序,出于调试目的,我需要知道Codeblocks的Building-Target是设置为“DEBUG”还是“RELEASE”. 我已经尝试过了: #ifdef DEBUG printf("Debug-Message"); #endif 和这个 #ifdef _DEBUG printf("Debug-Message"); #endif 但这些词都没有

c – 如何在两个单独的步骤中运行MSVC预处理器和编译器?

我想在不调用预处理器的情况下运行Microsoft Visual Studio Compiler cl.exe.这可能吗?我认为简单地编译预处理的源代码(使用/ c标志)会使预处理器运行为无操作,但显然情况并非如此.我做了一些基准测试.这是一个小源文件(main.cpp),它只包含一些代码: #include <iostream> #include

c – C宏以启用和禁用代码功能

我之前使用过代码库,它有一个宏系统,用于启用和禁用代码段.它看起来像下面这样: #define IN_USE X #define NOT_IN_USE _ #if defined( WIN32 ) #define FEATURE_A IN_USE #define FEATURE_B IN_USE #define FEATURE_C NOT_IN_USE #elif defi

c#ifndef包含文件,为什么所有大写都用于头文件?

我想知道为什么#ifndef指令之后的名字总是全部大写并且似乎与实际头文件的名称不匹配?这有什么规则?我一直在寻找网络,但我没有找到任何解释.如果我的头文件名为myheader.h,那么可以使用: #ifndef MYHEADER 如果是这样,为什么?规则是什么?解决方法:这些是预处理程序符号,没有这样的规

c – 为什么编译器没有定义__ARM_FEATURE_CRC32?

我已经在这个问题上工作了一段时间,我希望有人可以指出我的错误.我想我再也看不到穿过树林的森林了. 我有一个用于测试的LeMaker HiKey开发板.它的AArch64,所以它有NEON和其他cpu功能,如AES,SHA和CRC32: $cat /proc/cpuinfo Processor : AArch64 Processor rev 3 (aarch64) ...

c – 有没有办法在每个源文件中自动重现#define

我希望以下内容出现在我的Visual C 2005解决方案中的每个源文件中: #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__) #define new DEBUG_NEW 有没有办法在不手动复制的情况下执行此操作?编译选项?解决方法:命令行选项/D可用于定义预处理程序符号.但是,我不知道它是否

c – Qt宏关键字导致名称冲突

我正在为我的Qt项目构建一个NCurses接口.我想使用CDK,但我认为这个结构的信号成员与Qt signals关键字冲突. /usr/include/linux/cdk.h:411: error: expected unqualified-id before 'protected' 我怎样才能让CDK与Qt一起工作?解决方法:您可以定义QT_NO_KEYWORDS宏,禁用“信号”和

c – #include任何地方

是#include< file>意味着仅用于标题或者它只是一个机械的“在这里注入此代码”,可以在代码中的任何地方使用? 如果我在cpp函数中使用它来从单个源“注入”代码怎么办?这会有用吗还是编译器会为此尖叫?解决方法:这是一个机械注入代码的设备.如果您愿意,可以包含一个包含Goethe’s Faust

是否有独立的C源预处理器?

是否有独立的C预处理器?我不需要编译器/链接器,我无法安装完整的工具包. 我希望能够获得一些标题的预处理版本,使用一些定义和包含我提供的路径. 编辑:我不能依赖任何可用的东西.没有cl,没有gcc,没什么.至少我需要做的是处理宏(特别是#ifdef和#if). 编辑:我在Windows XP计算机上使用它

c – 可以将此宏转换为函数吗?

在重构代码并摆脱我们现在被教导讨厌的所有#defines时,我偶然发现了这个用于计算结构中元素数量的美: #define STRUCTSIZE(s) (sizeof(s) / sizeof(*s)) 非常有用,但是它可以转换为内联函数或模板吗? 好的,ARRAYSIZE会是一个更好的名字,但这是遗留代码(不知道它来自哪里,至少15年)

c – 命名包含警卫

C如何包括通常命名的警卫?我倾向于看到这么多: #ifndef FOO_H #define FOO_H // ... #endif 但是,我认为这不是很直观.在没有看到文件名的情况下,很难分辨出FOO_H的用途及其名称所指的内容. 什么是最佳做法?解决方法:根据我自己的经验,惯例是在包含它们的头文件之后命名包含保护,

c – 通过CMake定义预处理器宏?

如何通过CMake定义预处理器变量? 等效的代码是#define foo.解决方法:很长一段时间,CMake为此目的使用了add_definitions命令.但是,最近该命令已被更精细的方法取代(编译定义,包含目录和编译器选项的单独命令). 使用新add_compile_definitions的示例: add_compile_definitions(OPENCV

c – C的公共数组长度宏?

参见英文答案 > Is there a standard function in C that would return the length of an array?                                    6个 >            Array-size macro that rejects pointers               

重新定义C关键字是否合法?

在本周的Guru的this article中,有人说:#define保留字是违法的.这是真的?我找不到常规,我已经看过程序员重新定义新的,例如.解决方法:17.4.3.1.1宏名[lib.macro.names] 1 Each name defined as a macro in a header is reserved to the implementation for any use if the translati

C宏何时有益?

C预处理器有理由被C社区所害怕和避开.内联函数,函数和模板通常是#define的更安全和更好的替代品. 以下宏: #define SUCCEEDED(hr) ((HRESULT)(hr) >= 0) 绝不是优于安全类型: inline bool succeeded(int hr) { return hr >= 0; } 但宏确实有它们的位置,请列出您为宏找到的用途,

为什么#ifndef和#define在C头文件中使用?

我一直在头文件的开头看到这样的代码: #ifndef HEADERFILE_H #define HEADERFILE_H 并在文件的最后是 #endif 这样做的目的是什么?解决方法:这些被称为#include guards. 包含标头后,它会检查是否定义了唯一值(在本例中为HEADERFILE_H).然后,如果未定义,则定义它并继续到页面的其

c – #include和#include“filename”有什么区别?

在C和C编程语言中,使用尖括号和在include语句中使用引号有什么区别,如下所示? > #include< filename> > #include“filename”解决方法:实际上,差异在于预处理器搜索包含文件的位置. 对于#include< filename>预处理器以依赖于实现的方式搜索,通常在编译器/ IDE预先指定的搜索目录中.

c – 为什么在宏中使用明显无意义的do-while和if-else语句?

在许多C/C++宏中,我看到宏的代码包含在看似无意义的while循环中.这是一些例子. #define FOO(X) do { f(X); g(X); } while (0) #define FOO(X) if (1) { f(X); g(X); } else 我无法看到他们在做什么.为什么不在没有它的情况下写这个? #define FOO(X) f(X); g(X) 解决方法:do …

c – 使用来自其他定义的部分定义字符串(非字符串)

我正在尝试创建一个版本字符串,在使用时将其视为char *. 我正在使用 #define VERSION_MAJOR @cmakeproject_VERSION_MAJOR@ #define VERSION_MINOR @cmakeproject_VERSION_MINOR@ #define VERSION_PATCH @cmakeproject_VERSION_PATCH@ #define VERSION_STRING "" VERSION_MAJOR ".