Tag: 扩展

像宏这样的函数是否需要强制括号? 在参考GCC cpp手册后我很困惑

这让我感到困惑: 要定义类似函数的宏,可以使用相同的’#define’指令,但是在宏名称后面紧跟一对括号。 我相信这是为了让代码脱颖而出,而不是该程序的作者。 像宏名称的其他CAPS规则一样。 但以下是我感到困惑的地方: 类似函数的宏只有在其名称后面带有一对括号时才会展开。 如果你只写这个名字,那就不管它了。 我读完之后立刻就不同意了。 并且gcc -Evalidation了以下代码 #define FUNC display() void display() { printf(“Display\n”); } int main() { FUNC; return 0; } 预处理的输出按预期显示main()函数的内容: int main() { display(); return 0; } 那我在这里错过了什么? 预处理器用于标记源,宏扩展是一个令牌,上面的代码以这种方式处理,预处理器不应该检查任何东西或validation任何东西,它只是转储令牌。 在那种情况下,gcc手册试图传达什么。 我正在学习C编程,所以我可能会经常发生误解,我搜索了一个正确的解释,最后在这里求助。 请帮我解决一下这个。

扩展动态链接共享库?

我是C的新人,很抱歉我缺乏知识(我的C-book非常庞大:) 我想扩展一个共享库(libcustomer.so)与封闭源,但公众已知api。 这样的事情可能吗? 将libcustomer.so重命名为liboldcustomer.so 创建一个扩展的共享库libcustomer.so(所以其他人隐式使用扩展的共享库) 通过-loldcustomer将liboldcustomer.so链接到我的扩展libcustomer.so中 将任何不是额外实现的方法直接转发给旧的“liboldcustomer.so” 我认为它不会那样工作(名称被编译成.so,不是吗?)。 但是替代方案是什么? 对于#4:是否有一般的方法来做到这一点,或者我是否必须编写一个名为旧的方法并转发呼叫(如何?)? 因为原始的libcustomer.so(= liboldcustomer.so)可能会不时发生变化,所有这些东西都应该动态地工作。 出于安全原因,我们的系统没有LD_PRELOAD(否则我会接受:()。 考虑扩展validation检查和一些更好的NPE处理。 在此先感谢您的帮助! 编辑: 我正在实现我的扩展,如答案中所示,但我目前有一个未处理的案例: 如何从扩展库“代理”结构? 例如我有这个: customer.h: struct customer; customer.c: struct customer { int children:1; int age; struct house *house_config; }; 现在,在我的customer-extension.c中,我正在编写customer.c的所有公共方法,但是如何“传递”结构? 非常感谢您的时间和帮助!

有没有办法控制宏扩展顺序

我希望有人可能知道如何控制/指定宏扩展的顺序。 以下是上下文: // 32 bit increments, processor has registers for set, clear and invert #define CLR_OFF 1 #define SET_OFF 2 #define INV_OFF 3 #define SET(reg,bits) *((volatile unsigned long*)(& reg+SET_OFF)) = bits //Now if I use this I can do it quite nicely with #define STATUS_LED 0x0040; SET(LATB, STATUS_LED); // LATB is port of the LED. […]

在Code 128条形码中编码扩展的ASCII字符

我想在Code 128条形码中对字符串“QuiÑones”进行编码。 是否可以在Code 128编码中包含扩展的ASCII字符? 。 我对谷歌进行了一些研究,表明可以使用FNC4,但我没有找到确切的方法。 如果有人可以帮我解决C语言的解决方案,那将会很有帮助。

C预处理器宏是否可以包含预处理程序指令?

我想做相同的以下内容: #define print_max(TYPE) \ # ifdef TYPE##_MAX \ printf(“%lld\n”, TYPE##_MAX); \ # endif print_max(INT); 现在,只要我在函数宏中看到,就不允许使用#ifdef或任何嵌套的预处理器指令。 有任何想法吗? 更新:所以看起来这是不可能的。 即使是在运行时检查的黑客也无法实现。 所以我想我会选择以下内容: #ifndef BLAH_MAX # define BLAH_MAX 0 #endif # etc… for each type I’m interested in #define print_max(TYPE) \ if (TYPE##_MAX) \ printf(“%lld\n”, TYPE##_MAX); print_max(INT); print_max(BLAH);