मेरे पास कुछ सामान्य रूप से उपयोग किए गए मैक्रोज़ हैं जो मुझे लिखने वाली प्रत्येक सी फ़ाइल में सार्वभौमिक रूप से आवश्यक हैं। वर्तमान में मैं उन्हें प्रत्येक फ़ाइल में कॉपी कर रहा हूं जिसमें मुझे उनकी आवश्यकता है। यह संभवतः एक बुरा विचार है क्योंकि मुझे अंततः उनमें से एक को बदलने की आवश्यकता होगी और फिर मैं फ़ाइलों के बीच असंगत रूप से परिभाषित मैक्रोज़ के साथ समाप्त हो जाऊंगा।कई फ़ाइलों में सी मैक्रो का पुन: उपयोग करना
क्या मैक्रोज़ के लिए अनिवार्य रूप से हेडर फ़ाइल बनाने का कोई तरीका है? मैंने इसमें अपने सभी मैक्रोज़ के साथ हेडर बनाने की कोशिश की और इसमें शामिल है, लेकिन मुझे अभी भी कंपाइलर चेतावनियां मिलती हैं।
अद्यतन: मुझे प्राप्त होने वाली विशिष्ट चेतावनियां दूसरे उदाहरण से V4 जैसे कार्यों की निहित घोषणाएं हैं।
एक उदाहरण:
//file1.c
#define COMMON_NUMBER 1
//file2.c
#define COMMON_NUMBER 1
//...
//fileN.c
#define COMMON_NUMBER 1
//Oh wait, it should have been 2 all along..... *facepalm*
एक बेहतर उदाहरण:
//file1.c
#include "usefulmacros.h"
char* prog;
int optv;
int main(){
prog = strdup(argv[0]);
optv = 4; // This would be parsed from # of "-v" in argv[]
return 0;
}
void functionA(){
int dumberror = 1;
V4("This is a fairly verbose error: %d",dumberror);
}
//file2.c
#include "usefulemacros.h"
extern char* prog;
extern int optv;
void functionB(){
int differror = 2;
V4("This is a different error: %d",differror);
}
//usefulmacros.h
#ifndef USEFULMACROS
#define V4(str, ...) if(optv >= 4){printf("%s: "str,prog,__VA_ARGS__);}
#endif
चेतावनी आप किस तरह के बारे में यहाँ बात कर रहे हैं लाइन
जोड़ने के लिए है? क्या हम अनुमान लगाएंगे? –
यदि आपने सुना नहीं है, तो बहुत कम नौकरियां हैं जिनके लिए मैक्रोज़ सबसे अच्छा टूल हैं, और वे कई समस्याएं पैदा कर सकते हैं। उदाहरण के लिए, यह 'COMMON_NUMBER'' स्थिर 'वैश्विक चर (या बेहतर) हो सकता है। – Beta
@ जेफमर्काडो: मैंने अपने प्रश्न को एक बेहतर उदाहरण के साथ अपडेट किया जो दिखाता है कि एक और विशिष्ट अर्थ में क्या हो रहा है। – Huckle