Tôi có một vài macro thường được sử dụng phổ biến cần thiết chỉ trong mỗi tệp C tôi viết. Hiện tại tôi đang sao chép chúng vào mỗi tệp mà tôi cần chúng. Đây có thể là một ý tưởng tồi bởi vì cuối cùng tôi sẽ cần phải thay đổi một trong số chúng và sau đó tôi sẽ kết thúc với các macro không nhất quán giữa các tệp.Tái sử dụng macro C trong một số tệp
Có cách nào về cơ bản tạo tệp tiêu đề cho macro không? Tôi đã cố gắng làm cho một tiêu đề với tất cả các macro của tôi trong đó và bao gồm điều đó, nhưng tôi vẫn nhận được cảnh báo trình biên dịch.
CẬP NHẬT: Cảnh báo cụ thể mà tôi nhận được là khai báo tiềm ẩn các hàm như V4 từ ví dụ thứ hai.
Một ví dụ:
//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*
Một ví dụ tốt hơn:
//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
Những loại cảnh báo bạn đang nói về đây? Chúng ta sẽ đoán? –
Trong trường hợp bạn chưa từng nghe, có rất ít công việc mà macro là công cụ tốt nhất và chúng có thể gây ra nhiều vấn đề. Ví dụ, 'COMMON_NUMBER' này có thể là một biến toàn cầu' const' (hoặc tốt hơn). – Beta
@JeffMercado: Tôi đã cập nhật câu hỏi của mình với ví dụ tốt hơn minh họa điều đang xảy ra theo nghĩa cụ thể hơn. – Huckle