C和C ++计算机编程语言的宏预处理步骤。此标记还可用于有关源自或具有相同功能的其他编译器/语言的问题,例如Objective-C或C#中的#directives。
是否有一个 C 预处理器可以替换连续的 else 和 ifdef 指令?
我有一段代码,看起来像这样, #ifdef A printf(“A”); #别的 #ifdef B printf(“B”); #万一 #万一 else 和 ifedef B 可以替换为 elif 定义 B as...
我正在尝试制作类似宏的函数,它将“创建”几行新宏。 ARM-GCC 预处理器对类似宏的函数不满意。任何想法如何实现相同的功能...
我想要一个目标,它具有这样的定义属性,该属性根据我所在的当前包而变化。大致如下: A.构建: cc_库( 名称=“A”, 人类发展报告 = ["
我有以下测试程序: #定义q“ int main() { printf(q 你好世界 q); } 使用 gcc 编译它(我在 Ubuntu 上尝试过版本 12.3 和 11.4)会产生以下错误: 错误...
我的需求是统计程序整个运行过程中程序中每个for语句循环的总次数,例如: int for_counter_1 = 0; int for_counter_2 = 0; 沃...
当 C 或 C++ 源文件中存在语法错误时,GCC 和 Clang 都会报告错误所在的确切行和列。例如,如果我们尝试编译以下代码片段: #包括<...
是否可以使用预处理器区分 C# 中的操作系统?喜欢 : #如果操作系统_WINDOWS // 窗口方法 #elif OS_MAC //mac方法 #elif OS_LINUX //Linux方法 #结束
我需要一个 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 }
最终更新: 在阅读了许多相关问题和答案后,在我看来,答案很简单,尽管令人失望:不可能在预处理器中连接字符串文字。添加 mac...
有任何实用程序可以测试扩展 C/C++ #define 宏吗?
看来我经常花费太多时间试图让 #define 宏完全按照我想要的方式去做。我将在下面发布我当前的困境,感谢任何帮助。但实际上更大的问题是...
你能用C语言中的宏做这样的事情吗? #define SUPERMACRO(X,Y) #define X Y 然后 SUPERMACRO(A,B) 扩展为 #define A B 我有一种感觉,不是因为预处理器只做了一次......
我有头文件String.h typedef 结构字符串字符串; typedef String* String_t; ... 结构字符串{ //...其他方法 void (*push_str)(String_t self, void *str); ??? } 无效
通过 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")) 我...
我有一个宏来重复宏,我用它在编译时用默认值填充数组: 常量整型数组 [512] = { MACRO_REPEAT(512, -2) // 重复 -2, 512 次 [4] = 10, ...
C中有屏蔽宏参数注释的通用方法吗?我知道括号可以用于此目的,但在添加括号导致语法的情况下,这将不起作用......
是否有相当于 awk sprintf 的工具用于 C 编译器 #define 指令
对于上下文,我希望更加“包容”,而不仅仅是仅限于逐项列出该类型的所有实例 #define 西班牙语 'es_MX:es' #define FRENCH 'fr_CA:fr' #define ENGLISH 'en_CA:en' 哇...
C 宏对可变数量的参数进行按位或运算(没有 P99 的轻量级解决方案)
我需要一个宏,将其(可变数量的)参数按位或组合在一起: int main() { printf("%d ", BITWISE_OR_MULTIPLE_ARGS(1, 2, 4)); printf("%d ”,
例如: #定义 Y (b * 2) #定义X(b) Y int main() { printf("%d", X(4)); // 想要打印8,但是不行 } C 宏可以实现类似的功能吗?
为什么下面程序中注释掉的行无法编译? #包括 #包括 使用命名空间 std; #定义F1(a) 1 int F2(向量) { 返回 2; ...
在K&R书(p59)(编辑:第二版,涵盖ANSI C)中,建议将较大的项目拆分为多个文件更容易。在每个文件中,都包含几个库...