According to assert document, if NDEBUG
is defined, assert
actually does nothing:
#ifdef NDEBUG
#define assert(condition) ((void)0)
#else
#define assert(condition) /*implementation defined*/
#endif
So if your program doesn’t trigger assert
as you expected, please check whether NDEBUG
is defined or not. E.g., if you use cmake
to manage the build process, set CMAKE_BUILD_TYPE
‘s value as Release
will define NDEBUG
:
# cmake -DCMAKE_BUILD_TYPE=Release ..
# make VERBOSE=1
......
/opt/cuda/bin/nvcc ...... \"-Wall\",\"-fPIC\",\"-O3\",\"-DNDEBUG\" ......
Warning: don’t put statements in assert
, like this:
assert(in >> n);
This will incur the “in >> n
” only be executed in debug mode, not release mode.