Tag:

C调试打印宏

在C中,定义类似printf的宏的正确方法是什么,只有在定义了DEBUG符号时才会打印? #ifdef DEBUG #define DEBUG_PRINT(???) ??? #else #define DEBUG_PRINT(???) ??? #endif 哪里??? 是我不知道该填写什么的地方

C中的宏和函数有什么区别?

C中的宏和函数有什么区别? 请告诉我一个可以使用宏和function的应用程序?

用于设置和清除位的宏

我试着写一些简单的宏来简化设置和清除位的任务,这应该是一个简单的任务,但我似乎无法使它们正常工作。 #define SET_BIT(p,n) ((p) |= (1 << (n))) #define CLR_BIT(p,n) ((p) &= (~(1) << (n)))

C宏 – 检查变量是否为指针

刚开始考虑这一点,并想知道是否有一些“好”的方法来检查传递给c中的宏的变量是否是一个指针? 即: #define IS_PTR(x) something int a; #if IS_PTR(a) printf(“a pointer we have\n”); #else printf(“not a pointer we have\n”); #endif 这个想法并不是说这是在运行时完成而是编译时间,如下所示:我们根据变量是否为指针得到不同的代码。 所以我希望IS_PTR()以某种方式评估某种常量表达式。 我是怎么回事这个想法的? 这一切都有可能吗?在这种情况下会怎样做? 提前致谢!

检查是否用C预处理器声明了函数?

是否可以告诉C预处理器检查是否声明了函数(不是宏)? 我尝试了以下方法,但它似乎不起作用: #include int main(void) { #if defined(printf) printf(“You support printf!\n”); #else puts(“Either you don’t support printf, or this test doesn’t work.”); #endif return 0; }

什么是内联函数的概念以及它与宏的不同之处?

可能重复: c ++内联函数? 内联函数的真正概念是什么? 我真的无法理解内联函数。 为什么我应该使用内联函数? 它与正常function有何不同? Edit: what is difference between macro & inline function?

是否有C宏来生成重复字符串?

假设我想生成—— ,只有- ,是否有一个C宏来生成重复的字符串?

我们可以删除C宏定义中参数周围的括号吗?

从http://c-faq.com/style/strcmp.html ,我学到了以下便利宏: #define Streq(s1, s2) (strcmp((s1), (s2)) == 0) 我想知道为什么在这个宏中使用了这么多括号。 每个括号是用于某个目的还是使用冗余括号的宏,这些括号没有用处? 我们可以删除s1和s2周围的括号并制作这样的宏吗? #define MyStreq(s1, s2) (strcmp(s1, s2) == 0) MyStreq宏对我来说似乎和Streq一样Streq 。 #include #include #define Streq(s1, s2) (strcmp((s1), (s2)) == 0) #define MyStreq(s1, s2) (strcmp(s1, s2) == 0) int main() { printf(“%d %d\n”, Streq(“foo”, “foo”), MyStreq(“foo”, “foo”)); printf(“%d %d\n”, Streq(“fox”, “foo”), MyStreq(“fox”, “foo”)); printf(“%d %d\n”, Streq(“foo”, […]

C宏:#if检查是否相等

有没有办法检查宏中的数字相等性? 我想做点什么 #define choice 3 #if choice == 3 …. #endif #if choice == 4 … #endif C宏是否支持这样的事情?

将__func__视为字符串文字而不是预定义的标识符

我正在使用gcc编译C99代码。 我想写一个宏,它将返回一个包含函数名和行号的字符串。 这就是我所拥有的: #define INFO_MSG __FILE__ “:”__func__”()” 但是,当我编译试图使用此字符串的代码时,例如: char buff[256] = {‘\0’} sprintf(buff, “Something bad happened here: %s, at line: %d”, INFO_MSG, __LINE__); printf(“INFO: %s\n”, buff); 我收到以下错误消息: error: expected ‘)’ before ‘__func__’ 我已将问题跟踪到宏。 当我从宏中删除__func__时,代码正确编译。 如何修复宏,以便我可以在字符串中包含预定义的__func__宏?