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.
  1. static const int var = 5;
  2. #define var 5
  3. 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
블로그 이미지

란마12

,