Tôi đang cố tạo tài liệu bằng Doxygen cho các mẫu mô phỏng trong C mà không có nhiều thành công. Tôi hy vọng một người nào đó biết làm thế nào để làm cho công việc macro trickery trong preprocessor doxygen? Tôi đã thử bật "MACRO_EXPANSION" mà không có may mắn.Doxygen cho C thi đua Tempate
EDIT: Dạng biến dạng nhất của câu hỏi này sẽ là: "Làm thế nào tôi có thể làm cho Doxygen xử lý chỉ thị tiền xử lý #include theo cách tương tự mà bộ tiền xử lý C thực hiện?"
Tôi có đoạn code sau đây trong một thư mục "test" (một ví dụ rất giả tạo):
templates.h
#ifndef TEMPLATES_H_
#define TEMPLATES_H_
#define CAT(X,Y) X##_##Y
#define TEMPLATE(X,Y) CAT(X,Y)
#endif // TEMPLATES_H_
test.h
#ifndef TEST_H_
#define TEST_H_
#include "templates.h"
#ifdef TEST_T
#error "TEST_T cannot be defined prior to this compilation step"
#endif
#define TEST_T uint8_t
#include "test_template.h"
#undef TEST_T
#define TEST_T uint16_t
#include "test_template.h"
#undef TEST_T
#endif // TEST_H_
test_template.h
#ifdef TEST_T
#include "templates.h"
TEST_T TEMPLATE(sum,TEST_T)(TEST_T a, TEST_T b);
#endif // ifdef TEST_T
test.c
#include "test.h"
#ifdef TEST_T
#error "TEST_T cannot be defined prior to this compilation step"
#endif
#define TEST_T uint8_t
#include "test_template.c"
#undef TEST_T
#define TEST_T uint16_t
#include "test_template.c"
#undef TEST_T
test_template.c
#ifdef TEST_T
TEST_T TEMPLATE(sum,TEST_T)(TEST_T a, TEST_T b)
{
return a + b;
}
#endif // ifdef TEST_T
Trong doxygen tập tin cấu hình của tôi:
test.cfg
# Doxyfile 1.8.13
PROJECT_NAME = "Test"
OUTPUT_DIRECTORY = "docs_test"
TAB_SIZE = 3
OPTIMIZE_OUTPUT_FOR_C = YES
INPUT = "../test"
RECURSIVE = YES
MACRO_EXPANSION = YES
# Temporary to extract all without tags
EXTRACT_ALL = YES
Tuy nhiên, các phiên bản templated của hàm tổng * không có trong tài liệu doxygen (.h hoặc .c); ví dụ, test.h dưới (mặc dù tôi cũng sẽ rất vui nếu nó xuất hiện trong test_template.h thay):
Bất kỳ suy nghĩ?
Sidenote: [Hãy chắc chắn rằng bạn đã trailing dòng mới trên các tập tin] (http://stackoverflow.com/q/28499422/694733) khi thực hiện thủ đoạn gian trá vĩ mô. – user694733
Ghi chú có giá trị. Cá nhân tôi luôn luôn có một dòng mới ra khỏi thói quen (đặc điểm học được từ các hệ thống dài qua) nhưng nó sẽ không hiển thị trong đoạn mã ở trên. – Squirrel