@bhagyesh: все, что сказал M.M правильно и если вы видите блеск/ldlm/ldlm_resource.c, В строке 74 вы имеете
74 #ifdef LPROCFS
.......
.......
385 #undef MAX_STRING_SIZE
386 #else /* LPROCFS */
387
388 #define ldlm_namespace_proc_unregister(ns) ({;})
389 #define ldlm_namespace_proc_register(ns) ({0;})
390
391 #endif /* LPROCFS */
Так вот эти функции становятся манипулируют в зависимости от Defination от LPROCFS. Думаю, теперь это видно.
А про ваш вопрос ..
Спасибо @ M.M, еще один вопрос, так ли он связан каким-либо образом к возвращаемому значению функции? -
Вот небольшой эксперимент, в котором ясно ...
#include<stdio.h>
#ifdef LPROCFS
int my_register(int x)
{
int y = x*x;
printf("In my_register val=%d\n", x);
return y;
}
void my_unregister(int x)
{
printf("In my_unregister val=%d\n", x);
}
#else
#define my_register(x) ({0;})
#define my_unregister(x) ({;})
#endif
int main()
{
printf("In main\n");
int rc = my_register(2);
my_unregister(3);
printf("after returning rc=%d\n", rc);
return 0;
}
Когда LPROCFS не определен ..
[[email protected] lustre-wc-rel]# ./test_directives
In main
after returning rc=0
Когда LPROCFS определяется ...
[[email protected] lustre-wc-rel]# ./test_directives
In main
In my_register val=2
In my_unregister val=3
after returning rc=4
[[email protected] lustre-wc-rel]#
Макросы - это простая замена текста. Этот макрос означает, что фрагмент кода 'ldlm_namespace_proc_register (x)' будет преобразован в '({0;})'. Не больше, не меньше. –
@ M.M Вам нужно сделать ответ. –
@CareyGregory OK, хотя я подозреваю, что это проблема XY, и OP действительно хочет знать, что '({0;})' делает –