it depends on the compiler & the optimization level of course.
A dumb compiler/low optimization level when it sees:
  u32 extvalue = NULL;
  extvalue = value;
could set to NULL then to value in the next line.
Since extvalue isn't used in-between, the NULL initialization is useless and most compilers directly set to value as an easy optimization
Note that declaring a variable isn't really an instruction per se. The compiler just allocates auto memory to store this variable.
I've tested a simple code with and without assignment and the result is diff
erent when using gcc compiler 6.2.1 with -O0 (don't optimize anything) flag:
 #include <stdio.h>
 void foo(int value) {
      int extvalue = 0;
      extvalue = value;
      printf("%d",extvalue);
    }
disassembled:
Disassembly of section .text:
00000000 <_foo>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   83 ec 28                sub    $0x28,%esp
   6:   c7 45 f4 00 00 00 00    movl   $0x0,-0xc(%ebp)  <=== here we see the init
   d:   8b 45 08                mov    0x8(%ebp),%eax
  10:   89 45 f4                mov    %eax,-0xc(%ebp)
  13:   8b 45 f4                mov    -0xc(%ebp),%eax
  16:   89 44 24 04             mov    %eax,0x4(%esp)
  1a:   c7 04 24 00 00 00 00    movl   $0x0,(%esp)
  21:   e8 00 00 00 00          call   26 <_foo+0x26>
  26:   c9                      leave
  27:   c3                      ret
now:
 void foo(int value) {
      int extvalue;
      extvalue = value;
      printf("%d",extvalue);
    }
disassembled:
Disassembly of section .text:
00000000 <_foo>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   83 ec 28                sub    $0x28,%esp
   6:   8b 45 08                mov    0x8(%ebp),%eax
   9:   89 45 f4                mov    %eax,-0xc(%ebp)
   c:   8b 45 f4                mov    -0xc(%ebp),%eax
   f:   89 44 24 04             mov    %eax,0x4(%esp)
  13:   c7 04 24 00 00 00 00    movl   $0x0,(%esp)
  1a:   e8 00 00 00 00          call   1f <_foo+0x1f>
  1f:   c9                      leave
  20:   c3                      ret
  21:   90                      nop
  22:   90                      nop
  23:   90                      nop
the 0 init has disappeared. The compiler didn't optimize the initialization in that case.
If I switch to -O2 (good optimization level) the code is then identical in both cases, compiler found that the initialization wasn't necessary (still, silent, no warnings):
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   83 ec 18                sub    $0x18,%esp
   6:   8b 45 08                mov    0x8(%ebp),%eax
   9:   c7 04 24 00 00 00 00    movl   $0x0,(%esp)
  10:   89 44 24 04             mov    %eax,0x4(%esp)
  14:   e8 00 00 00 00          call   19 <_foo+0x19>
  19:   c9                      leave
  1a:   c3                      ret