markyang92.log
로그인
markyang92.log
로그인
pointer, assert
markyang92
·
2023년 2월 20일
0
0
주소에 저장된 자료형은?
char
로 읽으면
char
고
int
로 읽으면
int
고
float
로 읽으면
float
고
pointer to an
int
(
int
로의 포인터)
pointer to an
int
num_address
포인터 return
지역 변수 주소 반환은 매우 위험
지역 변수의가 사용한 '주소' 자체가 사라지는 것은 아님
WARNING!
은 뜸
dangling
pointer
포인터 return이 가능한 경우
전역 변수
파일속
static
전역 변수
함수 내
static
변수
힙
메모리에 생성한 데이터
일단은
stack 할당 반환 XXX
assert
DCL-03. 상수 수식의 값을 테스트할 때는 static assertion을 사용해라
dynamic assert: assert()
dynamic assert(동적 assert)
기능으로
assert()
함수가 있다.
assertion
은 취약성이 될 수 있는 소프트웨어의 결점을 찾아 제거하는데 사용되는 효과적인 진단 도구이다.
다만,
assert()
을 사용하는 것은 몇 가지 제약이 존재한다.
일반적인 assertion 도구는 프로그램이 구동 중에 동작하므로
런타임 오버헤드
존재
일반적인 assertion 도구의 마지막 동작은
abort()
를 호출하는 것이므로
서버
,
embedded
에서는 사용하기 어렵다.
assert()
는 프로그램을 구동 중 강제 종료 시키기 때문에, 서버나 임베디드(e.g. 차)에서 사용하긴 힘듬
그럼에도 불구하고
assert()
는 엄청 써야한다
편리하기 때문!!
assert의 side effect
assert
와 함께 사용되는 표션식은
side effect
를 가지면 안된다.
이는
assert
함수가 매크로이기 때문
매크로 함수
내에서 값의 할당, 증가, 감소, 메모리 접근, 함수 호출등은
unexpected behaviour
assert
내에서 증감 금지
1. 부적절한 코드
assert
내에서 증감 금지
1. 해결방법
임시 변수를 따로 두거나 하여
assert
내에서 증감 방지
static assert: _Static_assert()
Static assert(정적 assert)
기능으로
_Static_assert()
를
C11
에서 지원
1. 해결방법
static assertion(C11)
을 사용한다.
markyang92
pllpokko@alumni.kaist.ac.kr
이전 포스트
c의 링킹, 헤더, 전역변수 extern static
다음 포스트
bool 형, 참조(Reference), 코딩 표준
0개의 댓글
댓글 작성