मैं एक एम्बेडेड गिरी स्रोत के साथ काम कर रहा था जब मैं कुछ इस तरह देखा में: औरसी संकलन त्रुटि: आवारा '##' कार्यक्रम
#define OMAP_SYS_TIMER_INIT(name, clkev_nr, clkev_src, clksrc_nr, clksrc_src) \
static void __init omap##name##_timer_init(void) \
{ \
omap2_gp_clockevent_init((clkev_nr), clkev_src); \
omap2_gp_clocksource_init((clksrc_nr), clksrc_src); \
}
जब मैं एक प्रोग्राम है जो इस ## बात के लिए इस्तेमाल किया बनाने के लिए tryed (कि मुझे नाम पता नहीं है) यह देखने के लिए कि यह वास्तव में क्या कर सकता है मुझे इसे काम करने के लिए नहीं मिला। नीचे मैंने अपने कार्य का परीक्षण करने के लिए किया है। मैं तो बस देखना चाहते हैं ## के अंदर तर्क शाब्दिक है या नहीं, लेकिन कुछ स्पष्ट रूप से यह संकलन करने के लिए मेरे कोड में याद आ रही है ...
#include <stdio.h>
#include <stdlib.h>
#define DEFINE_1 2
#define DEFINE_2 4
#define DEFINE_3 6
#define DEFINE_i 9
int main(void)
{
int i;
for(i=1;i<4;i++) {
printf("numero %d = %d\n",i,DEFINE_##i##);
}
return EXIT_SUCCESS;
}
जीसीसी के उत्पादन होता है:
test.c: In function ‘main’:
test.c:14:5: error: stray ‘##’ in program
test.c:14:33: error: ‘DEFINE_’ undeclared (first use in this function)
test.c:14:33: note: each undeclared identifier is reported only once for each function it appears in
test.c:14:42: error: expected ‘)’ before ‘i’
test.c:14:42: error: stray ‘##’ in program
कोई भी जानता है कि क्या गलत है? धन्यवाद
प्रीप्रोसेसर के पास कोई संकेत नहीं है कि 'i' क्या है और इसके साथ DEFINE_ को कैसे सम्मिलित किया जाए - प्रीप्रोसेसर ने अपना काम पूरा करने के बाद ही इसे संकलन के बाद और बाद में पहचाना जाएगा। तो आप प्रोग्राम चर का उपयोग ## concatenation के टुकड़ों के रूप में नहीं कर सकते ... –