c – is this ok as a safer strcmp?

strcmp per se is not dangerous if used right. The code calling it might be. Limiting the opportunity for bugs I might in large teams “dictate” some kind of preemptive strike against bugs born out of wrong strcmp usage. It seems problem number one is comparing not zero-terminated strings. The core of my solution so far is this:

// safer strcmp
static int safer_strcmp_ (
   const size_t N, 
   const size_t M, 
   const char (*L)(N), 
   const char (*R)(M))
 assert( 0 == ((*L)(N)) );
 assert( 0 == ((*R)(M)) );
     return strcmp(*L,*R) ;

Basically just checking if both strings are properly terminated.

I have a function which eases the burden of calling it with

// not-a-macro front to the safer_strcmp_
 static int safer_strcmp ( 
    const char * s1, const char * s2 
 )  {
    const size_t s1_len = strlen(s1);
     const size_t s2_len = strlen(s2);
    return safer_strcmp_( 
      s1_len, s2_len, 
    ( const char (*)(s1_len) )s1,
    ( const char (*)(s2_len) )s2 
  ) ;

And a macro for calling it with literals

#undef  COMPARE
 #define COMPARE(A,B) 
 safer_strcmp_( COUNT_OF(A) - 1,COUNT_OF(B) - 1, &A, &B )

If that is all correct the next step might be some optimizations?