Tag: c预处理器

#define Square(x)(x *(x))

可能重复: 使用#define定义的数字的平方 你能解释为什么以下代码输出“29”? #define Square(x) (x*(x)) void main() { int x = 5; printf(“%d”, Square(x+3)); }

这个#define语法是什么意思?

我遇到过这一个,不明白。 #define IDEBUG(a…) “(a …)”是什么意思?

更改提供给C预处理器宏的参数的大小写

我是C预处理器的新手。 是否有可能改变提供给类似函数#define的参数的大小写? 例如,我想编写test(size) ,然后在结果替换中涉及“大小”。

C预处理器有多少次传递?

C预处理器对代码进行了多少次传递? 我在gcc 4.7.2上测试了以下代码 #define a 5 #define ba #define cb #define dc #define ed #define fe #define gf #define hg #define jh #define kj #define lk #define ml int main(void) {return d;} 没有错误: $ gcc -E 1.c # 1 “1.c” # 1 “” # 1 “1.c” # 14 “1.c” int main(void) {return 5;} 这是标准行为吗?

包含路径的预处理器并置

我有一组包含在远离目录中的包含,这意味着包含它们需要长包含,例如: #include “../../Path/to/my/file.h” 我有多个这样的东西变得有点不方便所以我想我可以使用#define作为目录路径,然后连接我需要的文件名,即 #define DIR “../../Path/to/my/” #define FILE1 “file.h” #define FILE2 “anotherFile.h” #include DIR FILE1 // should end up same as line in first example after pre-proc 然而,这不起作用…无论如何在C预处理器的工作中连接适合这个?

C宏可以包含临时变量吗?

我有一个我需要宏function的function。 该函数包含临时变量,我不记得是否有关于在宏替换中使用临时变量的规则。 long fooAlloc(struct foo *f, long size) { long i1, i2; double *data[7]; /* do something */ return 42; } MACRO表格: #define ALLOC_FOO(f, size) \ {\ long i1, i2;\ double *data[7];\ \ /* do something */ \ } 这个可以吗? (即没有令人讨厌的副作用 – 除了通常的:不是“类型安全”等)。 顺便说一句,我知道“宏是邪恶的” – 在这种情况下我只需要使用它 – 没有多少选择。

C中宏的范围?

如何评估这些宏? # define i 20 void fun(); int main(){ printf(“%d”,i); fun(); printf(“%d”,i); return 0; } void fun(){ #undef i #define i 30 } 给出产量为2020但是, # define i 20 void fun(){ #undef i #define i 30 } int main(){ printf(“%d”,i); fun(); printf(“%d”,i); return 0; } 输出为3030.请解释。 谢谢。

#ifdef(或其他预处理器指令)是否适用于函数声明(以测试函数存在性)?

为什么以下代码不能按预期工作? void foobar(int); #ifndef foobar printf(“foobar exists”); #endif 它总是打印信息; 它显然无法检测到一个函数作为一个实体的存在。 (这是一个过载的问题吗?) 为什么#ifdef (或其变体)不能检测函数声明? 声明应该在预处理时可用,所以它应该有效,不应该吗? 如果没有,是否有替代方案或解决方法?

在定义预处理器语句中使用括号

所以我想知道什么时候使用 #define xxx (yyy) VS #define xxx yyy 我的项目包含一个在AD0_ADMD_CT上有自己定义的文件,如果我想重新定义它们,我需要在定义中使用(AD0_ADMD_CT)或AD0_ADMD_CT吗? AD0_ADMD_CT定义为 #define AD1_ADMD_CT (IO_AD1.ADMD.bit.CT) 所以它也是 #define AD0_COMPARETIME (AD0_ADMD_CT) 要么 #define AD0_COMPARETIME AD0_ADMD_CT

宏和预处理器之间的区别

根据我的理解,# #define blah 8是一个宏。 而#是预处理器指令。 我们可以说#include,#if,#ifdef等。 也是宏,或者他们被称为其他东西? 或者,宏只是用于#define语句的术语? 如果我错了,请纠正我。