No, you don't always have to do `return 0;` in C. The `main()` function in C has a return type of `int`, so it must return a value. The value of `0` is conventionally used to indicate that the program terminated successfully. However, you can also return other values, such as `-1` to indicate an error.

If you don't explicitly return a value from `main()`, the compiler will automatically insert a `return 0;` statement at the end of the function.

Here is an example of a `main()` function that returns `-1`:

```c
int main() {
  // Do some stuff
  if (something_went_wrong) {
    return -1;
  }

  // Program terminated successfully
  return 0;
}
```

In this example, if the `something_went_wrong` variable is `true`, the `main()` function will return `-1` to indicate an error. Otherwise, it will return `0` to indicate that the program terminated successfully.

You can also use the `EXIT_SUCCESS` and `EXIT_FAILURE` macros instead of `0` and `-1`. These macros are defined in the `stdlib.h` header file. For example, the following code is equivalent to the previous example:

```c
#include <stdlib.h>

int main() {
  // Do some stuff
  if (something_went_wrong) {
    return EXIT_FAILURE;
  }

  // Program terminated successfully
  return EXIT_SUCCESS;
}
```

The `EXIT_SUCCESS` and `EXIT_FAILURE` macros are useful because they allow you to write portable code that can be compiled and run on different platforms.
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence