프로그래밍 관련 정보들
[ 관련 글 시리즈 보기 ]
상위 문서: [Software 개발] - 프로그래밍 관련 정보들
관련 문서:
배경화면용: 네덜란드
Visual Studio
경험상 win10와 vs깔려면 os공간 최소 41-56G는 필요하다
C#
Scope
웹폼과 MVC비교
http://blog.jakeymvc.com/five-reasons-to-use-mvc/
mvc는 10 December 2007에 등장했따 현재버전 MVC6
c#에서 public readonly fields가 가능하여
java처럼 getter만 추가하는식보다 쓰는면에서 간편할수있다.
그런데 client입자에서 이게 readonly 인지 아닌지가 명시가안되는 단점일지도?
C#의 경우 Private method naming convention처럼 public과 private을 구분하는 명명법은 바람직하다
delegate와 event
C#의 delegate와 event는 콜백 처리를 간단하게 포장한 것이며, 실체는 Observer 패턴을 활용하는 함수자다.
데이타 타입
http://www.csharpstudy.com/CSharp/CSharp-datatype.aspx
C# 데이타 타입은 컴파일 후 .NET 데이타 타입으로 변경하게 된다.
숫 자형 데이타 타입의 최대값 혹은 최소값을 알아내기 위해서는 .NET 데이타 타입 클래스들의 MaxValue, MinValue 프로퍼티를 사용한다. C# 데이타 타입 키워드 뒤에서도 이러한 프로퍼티를 직접 호출할 수 있다. 즉, int.MaxValue 혹은 Int32.MaxValue 처럼 사용할 수 있다.
ASP, ASP.net 차이점을 설명
이 둘은 완전히 다른언어임.. 이름으로 혼동하지 말자!
ASP는 인터프리터 방식.
ASP.net은 컴파일러 방식.
C/C++
C++가상함수
핵심은 이렇다.
Super클래스에서 가상함수를 호출하면 Sub클래스에서 오버라이딩했을때는 Sub클래스의 함수가 불려집니다.
즉, Super클래스가 Sub클래스의 함수를 부른다는 것이죠. 가상함수로 하지 않으면 Super클래스에서 새로 정의한 Sub클래스의 함수를 부를 방법이 없습니다.
class B : A 일때
즉 A aa = new B();
aa.print(); 하면
B의 print()가 불리는것임.
이렇게 하는 이유!는
factory pattern처럼 객체생성을 다른데 위임하거나 분기할경우이다.
new B로 할수도있고, new A(), new C()등 문맥에 맞게 일단 생성시킨후,
구현쪽에서는 그에 무관하게 다 aa.print()로 호출시키고 실제 내부 로직은 각 class에 맞게 내부적으로 분기되어 일을 수행하게끔하는것이다.
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=70009649
기타
디스크 용량 구하는 방법 API GetDiskFreeSpaceEx
VC 에서 extern "C"를 선언, 실행, 되는 예를 한번 들어주세요.
간단하게 아래와 같은 프로그램이 있다고 할 때
( 파일 확장자는 .cpp로 하여 CPP style로 compile 해야 합니다. )
add_1(), fadd_2(), add_3() 가 compile되어 어떻게 이름이 바뀌는지 보면
왜 extern "C" 가 필요한지 알 수 있습니다.
#include "stdio.h"
int add_1(int a, int b);
float fadd_2(int a, int b);
extern "C" int add_3(int a, int b);
int main()
{
int a = 2, b = 3;
int c;
float fc;
c = add_1(a, b);
fc = fadd_2(a, b);
c = add_3(a, b);
return 0;
}
/********* 시험삼아 여기를 막는다
int add_1(int a, int b)
{
return a + b;
}
float fadd_2(int a, int b)
{
return (float)(a + b);
}
int add_3(int a, int b)
{
return a + b;
}
********/
################### compile/link 결과 ###############################
naver.obj : error LNK2001: unresolved external symbol _add_3
naver.obj : error LNK2001: unresolved external symbol "float __cdecl fadd_2(int,int)" (?fadd_2@@YAMHH@Z)
naver.obj : error LNK2001: unresolved external symbol "int __cdecl add_1(int,int)" (?add_1@@YAHHH@Z)
compile/link 하면 위와 같이 link error가 발생합니다.
자세히 보면
add_1 -> ?add_1@@YAHHH@Z
fadd_2 -> ?fadd_2@@YAMHH@Z
add_3 -> _add_3
와 같이 compile과정에서 이름이 바뀌어집니다.
add_1(), fadd_2()는 CPP style의 decorated name(?) 으로 바뀐 것이며
add_3()는 prototype에서 extern "C" 를 주었으므로 C style로 '_'만 앞에
붙은 것이 차이점입니다.
이상의 실험에서
CPP는 argument, return value에 따라 이름을 바꾸게 하여 반드시 protype과 일치하는 function이 link되도록 합니다. argument가 틀린 경우에는 같은 이름의 function이 여러개 존재할 수 있으며 argument에 따라 적당한 function이 link됩니다.
C는 단순히 이름앞에 '_' 만 추가되므로 argument가 틀리던 return value type이 틀리던 link는 될 수 있습니다. 심하게 잘못되면 compile/link는 되는데 오동작을 할 수도 있겠지요.
이렇게 같은 이름의 function이라도 C style, CPP style로 compile되면서
이름이 바뀌므로 C에서 CPP로 작성된 function을 참조하거나 CPP에서 C로
작성된 function을 참조할 수가 없습니다.
이럴때 extern "C" 를 사용하여 CPP에서 정의/참조 되는 function 이름을 C style로 강제로 바꾸는 것입니다.
보통 *.h file에 아래와 같이 하여 *,c, *,cpp 에서 공용할 수 있는
protype 선언을 합니다.
#if defined(__cplusplus)
extern "C" {
#endif
int func1();
int func2();
.
.
.
#if defined(__cplusplus)
};
#endif
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=65467503
'IT > IT 일반' 카테고리의 다른 글
프로그래밍 관련 정보들 (개발환경 등) (0) | 2025.03.28 |
---|---|
a35 a13비교 (0) | 2024.12.06 |
3,4,12의 배수와 나머지 찾는법 (0) | 2024.11.30 |
면접에 자주 나오는 문제들 - OOP 및 순수 프로그래밍 (0) | 2023.11.03 |
[Social Media 관련 정보-1] Youtube (0) | 2023.06.14 |
리눅스 관련 정보 모음 (0) | 2022.08.25 |
Java 프로그래밍 (0) | 2022.04.09 |
[Social Media 관련 정보-2 그외] (0) | 2022.04.03 |
Hardware 관련 토막 정보들 (2) | 2022.01.17 |
게임이론 - 4/4* (4) | 2022.01.03 |