Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Globally defined variables as function return

Tags:

c

I have function that returns pointer to day of week name when pass day of week number. I have feeling I do something illegal by using globally defined strings as function return. Is such style acceptable?

const char* const SUN_NAME = "Sun";
const char* const MON_NAME = "Mon";
const char* const TUE_NAME = "Tue";
const char* const WED_NAME = "Wed";
const char* const THU_NAME = "Thu";
const char* const FRI_NAME = "Fri";
const char* const SAT_NAME = "Sat";


    char* dayOfWeekToChar(int day)
    {
        switch (day)
        {
            
        case SUN_NR :
            return SUN_NAME;
            break;
        case MON_NR :
            return MON_NAME;
            break;
        case TUE_NR :
            return TUE_NAME;
            break;
        case WED_NR :
            return WED_NAME;
            break;
        case THU_NR :
            return THU_NAME;
            break;
        case FRI_NR :
            return FRI_NAME;
            break;
        case SAT_NR :
            return SAT_NAME;
            break;
            
        default:
            break;
        }
    };
like image 781
vico Avatar asked May 04 '26 18:05

vico


2 Answers

To elaborate on what Eugene Sh said:

  1. It is legal and acceptable.

  2. I'd put them in array though:

EXAMPLE:

   const char * DaysOfWeekNames[] = {
     "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
   };

   enum DaysOfWeek {
     SUN_NR, MON_NR,TUE_NR, WED_NR, THU_NR, FRI_NR, SAT_NR
   };

   const char * dayOfWeekToChar(enum DaysOfWeek day)
   {
     return DaysOfWeekNames[day];
   }
like image 138
paulsm4 Avatar answered May 06 '26 19:05

paulsm4


What you do is OK, but it should be const char* dayOfWeekToChar(int day), because you return a pointer to a const char* and not a pointer to char*.

You could do this which is more or less the same as you do:

const char* dayOfWeekToChar(int day)
{
  static const char* days[] =
  {
    "Sun",
    "Mon",
    ...
  };

  return days[day];
}

However you should probably add some checks to make sure day is within the range [0..6] .

like image 24
Jabberwocky Avatar answered May 06 '26 19:05

Jabberwocky



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!