c-preprocessor 相关问题

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

C 宏定义可以引用其他宏吗?

我想弄清楚是否是这样的(用C编写): #定义 FOO 15 #定义栏 23 #define MEH (FOO / BAR) 被允许?我希望预处理器替换每个瞬间...

回答 6 投票 0

基于 C++ 的 DSL,支持使用带有参数列表的运算符[]

我需要用 C++ 编写一个自定义 DSL,用于定义 Pokémon、能力、向特定 Pokémon 教授能力,然后模拟决斗。到目前为止,我已经成功地使用了 DSL 的大部分内容

回答 1 投票 0

为什么多次使用token粘贴操作符的包裹宏时,这个宏无法展开

我想在c++中实现一些与反射相关的功能,但是当我想扩展由两个宏连接而成的宏时,出现了一些问题。 我尝试重现这个问题...

回答 1 投票 0

'cpp' vs. “clang”预处理行为

a.txt 一段文字 #include“b.txt” b.txt 乙文本 如果我们使用 cpp -P a.txt 预处理上述文件,我们会在控制台中得到以下输出: 一段文字 乙文本 然而,如果我们尝试预先

回答 1 投票 0

C:在编译时构建和使用字符串文字的预处理器宏?

我有一个 C 函数,用于格式化具有以下签名的字符串: 整数 字符串格式 ( 字符* dst , 常量 char* fmt , ... ); 我通常这样称呼它: 字符缓冲区[20]; 常量...

回答 1 投票 0

C++ 宏标识符中的双冒号

我有一个用于我使用的 C++ 项目的日志库。它在名称空间记录器中工作:在其中我拥有所有必要的类定义和预定义的记录器; 命名空间记录器 { 班级

回答 1 投票 0

C 中的预处理翻译单元到底是什么?

我对C99标准草案中的描述感到困惑。第 5.1.1.1 节“程序结构”指出: 源文件以及通过

回答 1 投票 0

在keil ARM编译器中比较enum/define

我在使以下条件编译工作时遇到困难: 枚举 { MIDI_USB_DEV_MCU_IDX, MIDI_WC_BLE_IDX, MIDI_CONN_1_IDX, MIDI_CONN_2_IDX,MIDI_IN_OUT_UARTS_NB }; #定义

回答 1 投票 0

连接预处理器定义以形成字符串

我有这个: #define VERSION_MAJOR 1 #define VERSION_MINOR 0 #define 修订版 b #define VERSION VERSION_MAJOR.VERSION_MINOR REVISION #define _STRINGIFY(x) #x #定义 STRINGIFY(x) _STRINGIFY(x) INT...

回答 3 投票 0

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

我通常在头文件的开头看到这样的代码: #ifndef HEADERFILE_H #定义HEADERFILE_H 文件末尾是 #万一 这样做的目的是什么?

回答 5 投票 0

在 VS Code 中激活 ifdef 指令

大家好,Stackoverflow 社区, 我想知道如何在 VS Code 中激活 ifdef 指令。与tasks.json 或c_cpp_properties.json 文件有关吗? 以下是我的代码: #ifde...

回答 1 投票 0

是否有一个 C 预处理器可以替换连续的 else 和 ifdef 指令?

我有一段代码,看起来像这样, #ifdef A printf(“A”); #别的 #ifdef B printf(“B”); #万一 #万一 else 和 ifedef B 可以替换为 elif 定义 B as...

回答 1 投票 0

类似宏的函数,体内有宏

我正在尝试制作类似宏的函数,它将“创建”几行新宏。 ARM-GCC 预处理器对类似宏的函数不满意。任何想法如何实现相同的功能...

回答 1 投票 0

如何根据 bazel 中包含的源配置标头?

我想要一个目标,它具有这样的定义属性,该属性根据我所在的当前包而变化。大致如下: A.构建: cc_库( 名称=“A”, 人类发展报告 = ["

回答 1 投票 0

如何在 C 宏定义中包含双引号?

我有以下测试程序: #定义q“ int main() { printf(q 你好世界 q); } 使用 gcc 编译它(我在 Ubuntu 上尝试过版本 12.3 和 11.4)会产生以下错误: 错误...

回答 1 投票 0

在C++中使用宏实现带有自己的循环计数器的for语句

我的需求是统计程序整个运行过程中程序中每个for语句循环的总次数,例如: int for_counter_1 = 0; int for_counter_2 = 0; 沃...

回答 2 投票 0

C 或 C++ 代码中预处理前后行号与列号之间的映射

当 C 或 C++ 源文件中存在语法错误时,GCC 和 Clang 都会报告错误所在的确切行和列。例如,如果我们尝试编译以下代码片段: #包括<...

回答 1 投票 0

C# 预处理器区分操作系统

是否可以使用预处理器区分 C# 中的操作系统?喜欢 : #如果操作系统_WINDOWS // 窗口方法 #elif OS_MAC //mac方法 #elif OS_LINUX //Linux方法 #结束

回答 5 投票 0

C 宏获取大于给定数字的最小二的幂

我需要一个 C 宏来获取大于给定数字的 2 次方的最小值。 例如,FIRSTFREEBIT(0x16)(二进制 1_0110)必须等于 0x20。 我将把它用作: #包括 我需要一个 C 宏来获得比给定数字大 2 的最小幂。 例如,FIRSTFREEBIT(0x16)(二进制 1_0110)必须等于 0x20。 我将把它用作: #include <someheader.h> // defines SOME_X and SOME_Y enum { x = SOME_X, y = SOME_Y, z = FIRSTFREEBIT(x|y), t = z << 1, }; 一个类似但略有不同的SO问题: 查找大于或等于给定值的最小二幂的算法 这是我的代码,欢迎您发明更好的东西: #define __OR_RSHIFT__(n,x) ((x)|(x)>>n) #define FIRST_UNUSED_BIT(x) (1+__OR_RSHIFT__(16,__OR_RSHIFT__(8,__OR_RSHIFT__(4,__OR_RSHIFT__(2,__OR_RSHIFT__(1,x)))))) 查看 __builtin_clz GCC 内在函数。它将为您提供前导零位的数量,可用于确定第一个位集的位置。然后左移 1,乘以位置。 这是一个利用 GCC _builtin_clz 函数的编译时解决方案: // Lowest Power of 2 greater than or equal to x. Assumes integer x greater // than 0 #define LPO2(x) (1<<((sizeof(x)*8)-__builtin_clz(x-1))) int main() { printf("%d\n", LPO2(7)); // => 8 printf("%d\n", LPO2(8)); // => 8 printf("%d\n", LPO2(9)); // => 16 }

回答 3 投票 0

预处理器中的字符串文字和宏连接

最终更新: 在阅读了许多相关问题和答案后,在我看来,答案很简单,尽管令人失望:不可能在预处理器中连接字符串文字。添加 mac...

回答 2 投票 0

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