에 경고/오류가 발행되지 않습니다컴파일러는 내가 다음 코드가 불일치 함수 매개 변수
TEST.C을
#include "a1.h"
int main() {
int a = 8;
foo(a);
return a;
}
a1.h
void foo (int a);
a1.c
int f = 0;
void foo (int a, int b){
f=5+a+b;
return;
}
a1.c에서 foo가 1 개월 있음에 유의하십시오. re 매개 변수는 a1.h에 정의 된 프로토 타입보다 큽니다.
make all
Building file: ../src/a1.c
Invoking: GCC C Compiler
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/a1.d" -MT"src/a1.d" -o "src/a1.o" "../src/a1.c"
Finished building: ../src/a1.c
Building file: ../src/test.c
Invoking: GCC C++ Compiler
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/test.d" -MT"src/test.d" -o "src/test.o" "../src/test.c"
Finished building: ../src/test.c
Building target: test
Invoking: GCC C++ Linker
gcc -o "test" ./src/a1.o ./src/test.o
Finished building target: test
가 어떻게 자신이 이러한 경우에 방어 할 수 컴파일러는 경고 또는 오류 등 커버 리티로 발행되지 않는 이유는 무엇입니까? 나는 a1.c 파일에 #include "a1.h"를 추가하면 에러가 발생하지만 "include"없이 에러를 얻는 방법이 있는지 알고있다.
마침내 링커 오류가 발생합니까? –
여기서 컴파일러/링커를 호출하는 방법은 무엇입니까? 정의되지 않은 함수에 대한 링커 오류가 발생했습니다. –
또한 이것은 SCA에 의해 감지되는 것이 아닙니다. –