Tag: c preprocessor

C预处理器定义生成的函数名称

我有一种情况,我有很多生成的函数,并希望将它们指向我创建的一些通用函数(允许我在生成的函数名称更改时重用基本代码)。 基本上,我有一个函数名列表如下: void Callback_SignalName1(void); void Callback_SignalName2(void); …etc 一旦生成了这些,我想定义一个宏来允许它们被一般地调用。 我的想法是这样,但我没有任何运气实现它…因为C预处理器采用宏的名称而不是宏定义为: #define SIGNAL1 SignalName1 #define SIGNAL2 SignalName2 #define FUNCTION_NAME(signal) (void Callback_ ## signal ## (void)) … … FUNCTION_NAME(SIGNAL1) { .. return; } 问题是我收到了 void Callback_SIGNAL1(void) 代替 void Callback_SignalName1(void) 这有什么好方法吗?

C预处理器宏用于返回重复一定次数的字符串

有人知道任何C99预处理器魔法允许创建一个由另一个重复N次的字符串组成的字符串吗? 例如 STRREP( “%s “, 3 ) 变 “%s %s %s ” 经过预处理。 我能想到的唯一一件事就是这样 #define STRREP( str, N ) STRREP_##N( str ) #define STRREP_0(str) “” #define STRREP_1(str) str #define STRREP_2(str) str str #define STRREP_3(str) str str str … 哪个效果很好,但是很难看,因为我必须手动为每个重复长度定义一个宏。 我想与variadic宏和宏一起使用它返回此处显示的宏参数的数量。

程序执行总是从C中的main开始吗?

必须从main开始执行程序,还是可以修改起始地址? #include void fun(); #pragma startup fun int main() { printf(“in main”); return 0; } void fun() { printf(“in fun”); } 这个程序in main之前打印出来。

#if定义的MACRO是否相当于#ifdef MACRO?

我有代码,我想有两种模式, debug和verbose 。 我在我的头文件中定义它们, #define verbose TRUE #define debug TRUE 到目前为止,在我的代码中,我刚刚使用过 #if(debug) //code #endif 但使用起来更合适 #ifdef debug // code #endif 我读了一些关于预处理器宏的内容,但当时没有意义。 所以,我有疑问, #if defined MACRO相当于#ifdef MACRO ? 哪个更好地启用/禁用特定代码段?

C中的宏常量和常量变量有什么区别?

可能重复: C中的“static const”vs“#define” 我开始学习C并且无法清楚地理解宏和常量变量之间的差异。 我写的时候有什么变化 #define A 8 和 const int A = 8 ?

函数调用中的参数前双重哈希

我在C中看到这一行: #define log(format, args…) snprintf(buffer + strlen(buffer), 1023 – strlen(buffer), format, ##args); 双击/哈希在snprintf()的最后一个参数之前是什么意思?

我可以用宏的一些技巧?

在我们的遗留代码中,以及我们的现代代码中,我们使用宏来执行代码生成等的漂亮解决方案。我们使用#和##运算符。 我很好奇其他开发人员如何使用宏来做很酷的事情,如果他们根本使用它们的话。

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);

迭代变量宏观参数

我正在以编程方式生成一堆仿函数,以保持生成的代码更具可读性我试图想出一个宏将扩展以下行, SET_STATE(FunctorA,a,b); ref a; ref b; FunctorA(ref a, ref b){ this->a = a; this->b = b; } 基本上它将扩展到第一个参数构造函数。 可变参数部分是构造函数的参数数量。 是否有可能在宏内部循环并在预处理期间生成此代码,即使它对这个特定情况没有意义但我有一些具有20个左右变量的仿函数,他们可以访问它将清理我生成的代码很多。 所有参数都是相同的类型,只有名称会有所不同。

#define中的##是什么意思?

这条线是什么意思? 特别是, ##是什么意思? #define ANALYZE(变量,标志)((Something。## variable)&(flag)) 编辑: 有点困惑。 没有##会有什么结果?