2

任何人都可以告诉如何编写一个程序,该程序在编译时使用gccprintscg++printsc++吗?

4

5 回答 5

9
#ifdef __cplusplus
    printf("c++\n");
#else
    printf("c\n");
#endif

如果您的文件扩展名不正确,您可能会遇到问题。

于 2012-09-24T14:28:22.690 回答
7

像这样的东西:

#if __cplusplus
    printf("c++");
#else 
    printf("c");
#endif

除非您使用它进行编译,否则g++ -x c即使使用 g++ 编译它仍会打印 C。这是一个问题。

于 2012-09-24T14:28:04.823 回答
5

C 和 C++对标签的处理方式struct不同

#include<stdio.h>

typedef int T;

int main(void) {
  struct T { int a[2]; };
  puts((sizeof(T) > sizeof(int)) ? "C++" : "C");
  return 0;
}
于 2012-09-24T15:15:29.460 回答
3

使用 C 和 C++ 之间的差异之一。(在 sizeof(int) == 1 的实现上会做错事)

#include <stdio.h>

int main()
{
   printf("c%s\n", (sizeof('a') == 1 ? "++" : ""));
   return 0;
}
于 2012-09-24T14:43:35.263 回答
0

您的问题有点含糊,我认为您的意思不是字面意思how do you print 'C' or 'C++';但我正在阅读它how do you execute a print in either C or C++ depending on the compiler

假设这就是您要问的,您可以尝试一下:

#ifdef __cplusplus                //If you compiled with g++
#include <iostream>                 //include c++ headers and namespace
using namespace std;
#define PRINT(str)  cout << str;    //print the message with cout
#else                             //If you compiled with gcc
#include <stdio.h>                  //include c headers 
#define PRINT(str)  printf(str);    //print using printf
#endif 

int main(int argc, char *argv[])
{
    PRINT("Hello\n");            //Whatever you compiled with, this now works
    return 0;
}
于 2012-09-24T14:44:50.670 回答