algospot   8년 전

변수 선언을 할때 2008 visual은 몽땅 선언을 하고 도중에 선언을 하면 에러로 인식하더라고욤

근데 저는 습관상 쓸 변수를 최대한 가까이 두고 있거든요

요즘의 g++ 4.8.3는 이를 에러로 인식하지 않겠죠? 백준온라인이든 모든 저지에서 제대로 통과는 하는데

막상 시험같은데 가서 그 컴파일러는 에러로 인식하는 그런 불상사가 생기지 않게 묻습니다.

....

int a

//for, if, 함수 등등의 수행

int b,c,d

//for, if, 함수 등등의 수행


algospot   8년 전

덧붙여서

저는 구조체를 다음과 같이 선언합니다.

typedef struct Q {

int x,y;

int time;

};

Q q[11111]; //전역으로 선언하거나

....

....

void bfs() {

Q temp; //지역으로 선언하거나

}

내가 하고싶은대로 선언하고 싶을때 선언하는데,

삼성코드그라운드에서 g++ 4.8.3에 제출하니

typedef는 빼라고 하더라고요

그래서 typedef 만 빼고 하니깐 제대로 되더라고요

그 차이를 알고싶고,

더불어 예전에는 

struct Q {
int x,y;

int time;

}q[1111];

....

void bfs() {

struct Q temp; //struct 를 붙여주는 ;;

}


이렇게 작성한 시대가 있었는데

요즘은 안그래도 되죠?

ntopia   8년 전

첫번째 글은

코드에 다른 문법 오류가 있었던게 아닐까 싶네요.

변수를 함수 첫머리에 몽땅 선언하는 문법은 ANSI C 에 나와있는 표준입니다. 아주 오래된 표준이죠. (이것도 C99 부터는 없어졌습니다.)

C++에선 당연히 중간에 선언해도 됩니다.

Visual C++ 2008 을 말씀하시는 것 같은데 거기서도 당연히 되죠.

ntopia   8년 전

두번째 글

struct 선언할 때 typedef를 붙이는 것도 옛날 ANSI C 표준과 관련이 있습니다.

ANSI C 에선 구조체 변수를 선언할 때

struct SomeStruct {

};

이런 구조체가 있으면

struct SomeStruct a;

이런 식으로 선언해야 했었습니다.

이런 귀찮음을 피하고자 typedef 를 쓴건데요

typedef struct SomeStruct {

} StructNameAlias;

라고 해주면

StructNameAlias a;

라고 선언할 수 있게 됩니다.


하지만 이건 전부 ANSI C 얘기니까

C++에선 그냥

struct SomeStruct {

};

이렇게 만들고

SomeStruct a;

이렇게 하면 됩니다.

algospot   8년 전

그리고 전 g++ 4.8.3 같은게 C보다 더 범용적인 느낌이라

작성은 C코딩스타일로 하고(#inclue <iostream>이 아닌 #include <stdio.h> 이런식)

제출은 C++로하는데 상관없는거죵?

namnamseo   8년 전

stdio.h 같은것도 원래는 비표준일거에요... 언제 지원이 끊겨도 뭐라 할 수 없는...

댓글을 작성하려면 로그인해야 합니다.