Подтвердить что ты не робот

Различные выходные данные для разных компиляторов - C и С++

Можете ли вы подумать о "программе", которая дает "разные выходы для C и компиляторов С++" (но дает согласованный вывод на одном языке)?

4b9b3361

Ответ 1

Эта программа создает 12 в С++ или C99 и 6 в C89:

#include <stdio.h>

int main()
{
    int a = 12//**/2;
    ;

    printf("%d\n", a);
    return 0;
}

Ответ 2

Несовместимость между ISO C и ISO С++

Общим примером является sizeof('A'), который обычно 4 в C, но всегда 1 в С++, потому что символьные константы, такие как 'A', имеют тип int в C, но тип char в С++:

#include <stdio.h>

int main(void)
{
    printf("%d\n", sizeof('A'));
}

Ответ 3

int main() { return sizeof 'a'; }

Ответ 4

typedef char X;
int main() {
    struct X { double foo; }
    printf("%d\n", sizeof(X));
    return 0;
}

Ответ 5

Из wikipedia, измененный для получения согласованного вывода на каждом языке:

extern int T;

int size(void)
{
    struct T {  int i;  int j;  };

    return sizeof(T) == sizeof(int);
    /* C:   return 1
    *  C++: return 0
    */
}

Ответ 6

int class;

Не компилируется в С++ и будет компилироваться в C.

Ответ 7

#include <stdio.h>
int main(void)
{
#ifdef __cplusplus
    puts("C++");
#else
    puts("C");
#endif
    return 0;
}