programing

GCC C 코드의 비정적 선언 다음에 정적 선언을 해결하려면 어떻게 해야 합니까?

goodsources 2022. 8. 17. 23:59
반응형

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

반응형