c-preprocessor 相关问题

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

类似宏的函数,体内有宏

我正在尝试制作类似宏的函数,它将“创建”几行新宏。 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

有任何实用程序可以测试扩展 C/C++ #define 宏吗?

看来我经常花费太多时间试图让 #define 宏完全按照我想要的方式去做。我将在下面发布我当前的困境,感谢任何帮助。但实际上更大的问题是...

回答 5 投票 0

C 预处理器宏定义宏

你能用C语言中的宏做这样的事情吗? #define SUPERMACRO(X,Y) #define X Y 然后 SUPERMACRO(A,B) 扩展为 #define A B 我有一种感觉,不是因为预处理器只做了一次......

回答 7 投票 0

结构内的通用函数指针,具有编译时验证

我有头文件String.h typedef 结构字符串字符串; typedef String* String_t; ... 结构字符串{ //...其他方法 void (*push_str)(String_t self, void *str); ??? } 无效

回答 1 投票 0

通过 Makefile 生成预处理的 C 文件时,让 CMake 使用 -dD -dI 开关?

考虑以下 CMake 示例: cmake_minimum_required(版本3.13) if (NOT(EXISTS "${CMAKE_SOURCE_DIR}/main.c" AND NOT IS_DIRECTORY "${CMAKE_SOURCE_DIR}/main.c")) 我...

回答 1 投票 0

C 宏展开顺序

我有一个宏来重复宏,我用它在编译时用默认值填充数组: 常量整型数组 [512] = { MACRO_REPEAT(512, -2) // 重复 -2, 512 次 [4] = 10, ...

回答 2 投票 0

C:如何屏蔽宏参数中的逗号?

C中有屏蔽宏参数注释的通用方法吗?我知道括号可以用于此目的,但在添加括号导致语法的情况下,这将不起作用......

回答 2 投票 0

是否有相当于 awk sprintf 的工具用于 C 编译器 #define 指令

对于上下文,我希望更加“包容”,而不仅仅是仅限于逐项列出该类型的所有实例 #define 西班牙语 'es_MX:es' #define FRENCH 'fr_CA:fr' #define ENGLISH 'en_CA:en' 哇...

回答 1 投票 0

C 宏对可变数量的参数进行按位或运算(没有 P99 的轻量级解决方案)

我需要一个宏,将其(可变数量的)参数按位或组合在一起: int main() { printf("%d ", BITWISE_OR_MULTIPLE_ARGS(1, 2, 4)); printf("%d ”,

回答 1 投票 0

如何将一个宏扩展为另一个宏的参数名称

例如: #定义 Y (b * 2) #定义X(b) Y int main() { printf("%d", X(4)); // 想要打印8,但是不行 } C 宏可以实现类似的功能吗?

回答 1 投票 0

将初始化列表传递给宏

为什么下面程序中注释掉的行无法编译? #包括 #包括 使用命名空间 std; #定义F1(a) 1 int F2(向量) { 返回 2; ...

回答 3 投票 0

标准库多次包含在多个文件中?

在K&R书(p59)(编辑:第二版,涵盖ANSI C)中,建议将较大的项目拆分为多个文件更容易。在每个文件中,都包含几个库...

回答 2 投票 0

C 宏预处理器在字符串中包含数字

我想将控制代码 x 插入字符串中,但使用十进制数字而不是十六进制 (\ux) 或八进制 (x)。我很高兴有一个宏,比如 CC,这样我就可以将字符串形成为: // 德...

回答 1 投票 0

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