GCC C 코드의 비정적 선언 다음에 정적 선언을 해결하려면 어떻게 해야 합니까?
같은 C파일을 다른 버전의 cc로 2개의 다른 머신으로 컴파일 하려고 합니다.
.2에서는 gcc 3.2.3이라고 되어 있습니다.warning: 'foo' was declared implicitly 'extern' and later 'static'
4.는 gcc "4.1.2"로 되어 있습니다.error: static declaration of 'foo' follows non-static declaration
양쪽 CFLAGS가 동일.gcc 4.1.2가 gcc 3.2.3처럼 동작하도록 하겠습니다.즉, 이 에러를 단순한 경고로 바꾸는 옵션을 찾습니다.
는 이 있었다.static
이치노함수 선언을 콜 위쪽으로 이동하면 문제가 해결되었습니다.
에러 메세지가 불만인 것을 보면, 소스코드를 수정하는 것이 좋을 것 같습니다.컴파일러는 선언의 차이에 대해 불평합니다.예를 들어 다음과 같습니다.
void foo(int i);
...
void foo(double d) {
...
}
이것은 유효한 C코드가 아니기 때문에 컴파일러가 불평합니다.
함수가 처음 사용되었을 때 사용할 수 있는 프로토타입이 없고 컴파일러가 암묵적으로 스태틱하지 않은 프로토타입을 만드는 것이 문제일 수 있습니다.그렇다면 시제품을 처음 사용하기 전에 어딘가에 추가하는 것이 해결책입니다.
★★를 해 보세요.-Wno-traditional
.
그러나 정적 함수에 대한 선언을 추가하는 것이 좋습니다.
static void foo (void);
// ... somewhere in code
foo ();
static void foo ()
{
// do sth
}
일부 파일에서는 함수를 nonstatic으로 선언하고 다른 파일이나 같은 파일에서는 static으로 구현한 경우에도 이 문제가 발생할 수 있습니다.예를 들어, 다음 코드가 이 오류를 생성합니다.
void inlet_update_my_ratio(object_t *myobject);
//some where the implementation is like this
static void inlet_update_my_ratio(object_t *myobject) {
//code
}
실장으로부터 스태틱을 삭제하면, 다음과 같이 에러가 해소됩니다.
void inlet_update_my_ratio(object_t *myobject) {
//code
}
이 에러는, 브래킷의 미닫힘이 원인일 가능성이 있습니다.
int main {
doSomething {}
doSomething else {
}
이 네 줄의 예에서도 쉽게 찾을 수 없습니다.
이 에러는, 150 행의 메인 함수에서는, 「savePair」의 스태틱 선언은, 비 스태틱 선언 후에 행해진다」라고 하는 곤란한 에러를 일으켰습니다.함수 savePair에 대한 정의에는 아무런 문제가 없었습니다.그것은 닫히지 않은 브래킷이었습니다.
gcc 3.2.3은 이 문제에 대해 더 관대하지만 gcc 4.1.2는 나중에 프로그램 링크에 심각한 문제가 발생할 수 있음을 강조하고 있습니다.에러를 억제하기 위해서가 아니라, 순방향 선언을 함수 선언과 일치시킬 필요가 있습니다.
(전송 선언에 따라) 함수를 글로벌하게 사용할 수 있도록 의도한 경우, 그 후에 스태틱으로 선언하지 마십시오.마찬가지로 로컬 범위로 들여쓰기된 경우 정방향 선언을 일치시키기 위해 정적으로 만듭니다.
I had a similar issue , The function name i was using matched one of the inbuilt functions declared in one of the header files that i included in the program.Reading through the compiler error message will tell you the exact header file and function name.Changing the function name solved this issue for me
ReferenceURL : https://stackoverflow.com/questions/3148244/how-to-solve-static-declaration-follows-non-static-declaration-in-gcc-c-code
'programing' 카테고리의 다른 글
Vue3에서 Vue2 컴포넌트를 사용할 수 있습니까? (0) | 2022.08.18 |
---|---|
Visual Studio에서 작동하는 TypeScript용 Vue.js 2.0 타이핑을 가져오려면 어떻게 해야 합니까? (0) | 2022.08.18 |
2의 다음 곱셈까지 반올림 (0) | 2022.08.17 |
$auth.get에 접속하는 방법서비스의 토큰('local')을 선택하십시오. (0) | 2022.08.17 |
nuxt 사용 시 핫 새로고침을 끌 수 있습니까? (0) | 2022.08.17 |