Which one is better to use among the below statements in c:
static const int var=5;
or
#define var 5
It depends on what you need the value for.
static const int var = 5;
#define var 5
enum { var = 5 };
Ignoring issues about the choice of name, then:
- If you need to pass a pointer around, you must use (1).
- Since (2) is apparently an option, you don't need to pass pointers around.
- Both (1) and (3) have a symbol in the debugger's symbol table - that makes debugging easier. It is more likely that (2) will not have a symbol, leaving you wondering what it is.
- (1) cannot be used as a dimension for arrays at global scope; both (2) and (3) can.
- (1) cannot be used as a dimension for static arrays at function scope; both (2) and (3) can.
- Under C99, all of these can be used for local arrays. Technically, using (1) would imply the use of a VLA (variable-length array), though the dimension referenced by 'var' would of course be fixed at size 5.
- (1) cannot be used in places like switch statements; both (2) and (3) can.
- (2) can change code that you didn't want changed because it is used by the preprocessor; both (1) and (3) will not have unexpected side-effects like that.
- You can detect whether (2) has been set in the preprocessor; neither (1) nor (3) allows that.
So, in most contexts, prefer the 'enum' over the alternatives. Otherwise, the first and last bullet points are likely to be the controlling factors - and you have to think harder if you need to satisfy both at once.
If you were asking about C++, then you'd use option (1) - the static const - every time.
http://stackoverflow.com/questions/1674032/static-const-vs-define-in-c
'language > C/C++' 카테고리의 다른 글
클래스내의 배열변수의 크기를 상수로 지정하고 싶을 때 (0) | 2014.12.11 |
---|---|
const (0) | 2012.05.21 |
2차원 배열이 더블포인터인가? (0) | 2010.11.10 |
메모리오류 시 디버거가 설정해 주는 값 (0) | 2010.09.17 |
지침 (0) | 2010.09.17 |