簡體   English   中英

我怎么知道c的版本?

[英]How can I know the version of c?

"\b"在我的 Mac 上不起作用。 所以我試圖找到原因。

我認為導致這個問題的原因可能是C的版本。

或者設備可能是。 如果你知道,你能幫幫我嗎? 謝謝你。

C有三個ISO標准版本:C90,C99和C11。 要知道您的程序正在運行哪個C版本,請檢查:

 __STDC_VERSION__

宏。

  • 對於C90:宏未定義。
  • 對於C99:宏定義為值199901L。
  • 對於C11:宏定義為值201112L。

另一方面,如果您想知道的不是C的版本,而是C編譯器的版本,如其他答案所示,請使用適當的選項運行編譯器(例如gccclang都使用--version )。

根據您的編譯器,它可以支持不同的C版本。 您可以要求使用帶有gccclang-std= 選項來更改用於編譯的編譯器默認C版本,例如: -std=c90-std=c99-std=c11

int main() { if (__STDC_VERSION__ >= 201710L) printf("We are using C18!\n"); else if (__STDC_VERSION__ >= 201112L) printf("We are using C11!\n"); else if (__STDC_VERSION__ >= 199901L) printf("We are using C99!\n"); else printf("We are using C89/C90!\n"); return 0; }

基於@chqrlie 添加的內容...

#include <stdio.h>

int main() {
  #if defined __STDC_VERSION__ 
    long version = __STDC_VERSION__;
    if ( version == 199901 ) {
      printf ("version detected : C99\n");
    }
    if ( version == 201112 ) {
      printf ("version detected : C11\n");
    }
    if ( version == 201710 ) {
      printf ("version detected : C18\n");
    }
  #else 
    printf ("version detected : C90\n");
  #endif
}

先決條件:應安裝gcc

您打開終端並粘貼此 bash 命令:

gcc -dM -E - < /dev/null | grep __STDC_VERSION__ | awk '{ print $2 " --> " $3 }'

對於我的情況,它返回__STDC_VERSION__ --> 201710L轉換為2017 C 標准 ( c17 )。 你的可以是c89 or c99 or c11

稍微更清潔和更完整的方法

#include <stdio.h>

int main(void) {

    #ifdef __STDC_VERSION__
        switch (__STDC_VERSION__) {
            case 199409:
                printf ("C version: C94 (%ld)", __STDC_VERSION__);
                break;
            case 199901:
                printf ("C version: C99 (%ld)", __STDC_VERSION__);
                break;
            case 201112:
                printf ("C version: C11 (%ld)", __STDC_VERSION__);
                break;
            case 201710:
                printf ("C version: C17 (%ld)", __STDC_VERSION__);
                break;
            default:
                printf ("C version: ?? (%ld)", __STDC_VERSION__);
                break;
        }
    #else
        printf ("C(89), C(90)");
    #endif

    #ifdef __STRICT_ANSI__
        printf (" (ANSI %d)\n", __STDC__);
    #else
        printf("\n");
    #endif


    return 0;
}

測試它:

gcc main.c -o main -std=c90 && main
gcc main.c -o main -std=c99 && main
gcc main.c -o main -std=c11 && main
gcc main.c -o main -std=c17 && main

gcc main.c -o main -std=gnu89 && main
gcc main.c -o main -std=gnu99 && main
gcc main.c -o main -std=gnu11 && main
gcc main.c -o main -std=gnu17 && main
#include <stdio.h> 
//What version of C language you're using
int main() {
  if(__STDC_VERSION__ >=201710L)
    printf("The version is c18!\n");
  else if(__STDC_VERSION__ >= 201112L)
        printf("The version is C11! \n");
        else if (__STDC_VERSION__ >=199901L)
             printf("The version is C99!\n");
              else 
             printf("The version you're using is C89/C90");
 return 0;
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM