2013-12-13 2 views
1

다음 함수 선언은 gcc에서 허용하지만 g ++에서는 허용되지 않습니다. g의 ++에 의해 주어진알 수없는 배열의 포인터?

void do_something(char (*)[]); 

오류 :

error: parameter '<anonymous>' includes pointer to array of unknown bound 'char []' 

나는 C에서, 매개 변수가 숯불로 변환하고 있다고 생각 ** GCC 잘 그것을 받아들이는 이유입니다.

g ++이 어떻게 든이 함수를 허용 할 수 있습니까? http://ideone.com/yqvqdB :

감사 :

예를 참조하십시오!

+0

실제로 작동하려고하는 'do_something'은 무엇입니까? 'char **'또는'char *'를 사용하려고합니까? –

+0

장기적으로 사용할 컴파일러에 따라 다릅니 까? 아니면 둘 다 사용 하시겠습니까? – Sash

+2

컴파일하는 정확한 코드가 맞습니까? 실제로'char ** '와 동등해야하고, g ++은 그것을 받아들입니다 : http://ideone.com/njdwyc. 배열에 대한 포인터는'char (*) []'처럼 보일 것입니다. –

답변

1

GNU GCC 컴파일러는 비표준 컴파일러를 사용하여 프로그램을 컴파일합니다. 이 플래그를 -std=c99 또는 -std=iso9899:1999에 추가하여 프로그램을 표준 입력으로 컴파일하면 오류가 발생합니다.

표준 적으로 이것은 항상 포인터에 대한 포인터로 받아 들여 지므로 포인터의 방정식에 필요한만큼 배열의 길이를 제공해야합니다.

+0

그건 거짓입니다. 표준 C 언어에서'char (*) []'는 완벽하게 유효한 매개 변수 선언입니다. – AnT

관련 문제