Может быть, вы ищете -E
переключатель?
// a.h
int a() {
return 1;
}
, а затем у нас есть
// main.c
#include "a.h"
int main() {
return a();
}
, а с -E
вы можете получить
> gcc -E main.c
# 1 "main.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 331 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "main.c" 2
# 1 "./a.h" 1
int a() {
return 1;
}
# 2 "main.c" 2
int main() {
return a();
}
Теперь, допустим, у нашего источника есть другой файл
// b.h
float a() {
return 1.0;
}
и main.c
немного отличается
#include "a.h"
#include "b.h"
int main() {
return a();
}
вы сможете увидеть последнее определение функции
gcc -c -E main.c
# 1 "main.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 331 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "main.c" 2
# 1 "./a.h" 1
int a() {
return 1;
}
# 2 "main.c" 2
# 1 "./b.h" 1
float a() {
return 1.0;
}
# 3 "main.c" 2
int main() {
return a();
}
Но я не уверен, что это то, что вы ищете;)
Хм ... если вы хотите остановиться в какой-то момент, возможно, этот поможет вам:
#include "a.h"
#include "b.h"
int main() {
a();
#error Quit!
printfun("aaa");
}
и, таким образом, компиляция не удастся: #error
> gcc -c -Wfatal-errors main.c
In file included from main.c:2:
./b.h:1:7: fatal error: conflicting types for 'a'
float a() {
^
./a.h:1:5: note: previous definition is here
int a() {
^
1 error generated.
Или вы можете просто ввести какой-то фальшивый тип
#include "a.h"
struct fake_type {
int fake_component;
};
struct fake_type *a();
int main() {
a();
}
иустановить ошибку
> gcc -c -Wfatal-errors main.c
main.c:7:19: fatal error: conflicting types for 'a'
struct fake_type *a();
^
./a.h:1:5: note: previous definition is here
int a() {
^
1 error generated.