标签: c-preprocessor

我可以用什么预定义的宏来检测clang?

我正在尝试检测用于编译源代码的编译器.我可以很容易地找到预定义的宏来检查MSVC或GCC(例如参见http://predef.sourceforge.net/),但我找不到任何宏来检查clang.

有人知道clang是否定义了一个宏__CLANG__,以便知道当前正在编译我的代码的是什么?

c macros clang c-preprocessor

107
推荐指数
3
解决办法
3万
查看次数

C/C++宏字符串连接

#define STR1      "s"
#define STR2      "1"
#define STR3      STR1 ## STR2
Run Code Online (Sandbox Code Playgroud)

是否有可能连接STR3 =="s1"?您可以通过将args传递给另一个宏函数来完成此操作.但是有直接的方法吗?

c c++ c-preprocessor

105
推荐指数
3
解决办法
17万
查看次数

在另一个中包含一个C源文件?

#include.c文件中,.c文件是否可以(或者甚至是推荐/良好实践)?将它们包含在项目文件中会发生什么?

c code-organization project-organization include c-preprocessor

102
推荐指数
6
解决办法
15万
查看次数

C/C++行号

出于调试目的,我可以在C/C++编译器中获取行号吗?(某些编译器的标准方式或特定方式)

例如

if(!Logical)
    printf("Not logical value at line number %d \n",LineNumber);
    // How to get LineNumber without writing it by my hand?(dynamic compilation)
Run Code Online (Sandbox Code Playgroud)

c c++ dynamic-compilation line-numbers c-preprocessor

102
推荐指数
8
解决办法
9万
查看次数

如何在Xcode中定义预处理器符号

是否可以通过在Xcode项目中设置属性来为条件编译设置符号?

我的目标是创建一个可供所有文件使用的符号,而不必使用import/include,这样一组公共类在某些项目中可能会有特殊行为.像下面这样,但用我自己的符号.

#if TARGET_IPHONE_SIMULATOR
    ...
#endif
Run Code Online (Sandbox Code Playgroud)

xcode objective-c c-preprocessor

98
推荐指数
4
解决办法
10万
查看次数

使用Xcode 4(和依赖项)编译,构建或存档问题

这个问题在过去几周内已经发展,以涵盖更多一般性问题(以及从旧的升级项目).

然而,许多问题可以通过遵循相同的指令集来解决.

如果您遇到以下任何问题,请尝试接受的答案中的方法:

  • Xcode 4无法存档应用程序
  • Xcode 4创建了一个不可用的存档
  • Xcode 4不会创建.ipa
  • 由于预处理器错误,Xcode 4无法编译
  • Xcode 4找不到标题
  • Xcode 4的代码完成无效
  • 项目依赖性不会编译
  • 添加依赖性会导致上述任何问题

原始问题

标题:Xcode 4中的"未找到词法或预处理器问题文件"

我在Xcode 4中有一个项目,可以在设备和模拟器上运行良好,但在寻找与静态库关联的头文件时尝试归档它时出错:

In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15:
In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23:
In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11:
In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10:
/Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file not found [1]
 #import "Merchant.h"
         ^
1 error generated. 
Run Code Online (Sandbox Code Playgroud)

Xcode给出了错误

lexical or preprocessor issue file not found 
Run Code Online (Sandbox Code Playgroud)

很多谷歌搜索显示很多人都有这个问题,但没有解决方案.任何人都得到了修复甚至线索.

更新:user header搜索路径设置为${BUILT_PRODUCTS_DIR}所有配置.除了归档时,它使用任何配置构建良好.

更新2: Merchant.h …

compiler-construction objective-c clang xcode4 c-preprocessor

96
推荐指数
4
解决办法
8万
查看次数

缩进#defines

我知道#defines等通常不会缩进.为什么?

我正在使用一些代码,其中包含#defines,#ifdefs,#elses,#endifs等的可怕混合.所有这些通常与正常的C代码混合在一起.#defines 的非缩进使它们难以阅读.缩进代码与非缩进#defines的混合是一场噩梦.

不缩进#define的好处是什么?如果我缩进它会不会让我成为一个坏人?这不是更好吗?

#ifdef SDCC
    #if DEBUGGING == 1
        #if defined (pic18f2480)
            #define FLASH_MEMORY_END 0x3DC0
        #elif defined (pic18f2580)
            #define FLASH_MEMORY_END 0x7DC0
        #else
            #error "Can't set  up flash memory end!"
        #endif
    #else
        #if defined (pic18f2480)
            #define FLASH_MEMORY_END 0x4000
        #elif defined (pic18f2580)
            #define FLASH_MEMORY_END 0x8000
        #else
            #error "Can't set  up flash memory end!"
        #endif
    #endif
#else
    #if DEBUGGING == 1
        #define FLASH_MEMORY_END 0x7DC0
    #else
        #define …
Run Code Online (Sandbox Code Playgroud)

c coding-style code-formatting indentation c-preprocessor

95
推荐指数
5
解决办法
2万
查看次数

Pragma在定义宏

有没有办法在宏中用其他语句嵌入pragma语句?

我正在努力实现以下目标:

#define DEFINE_DELETE_OBJECT(type)                      \
    void delete_ ## type_(int handle);                  \
    void delete_ ## type(int handle);                                                \
    #pragma weak delete_ ## type_ = delete_ ## type
Run Code Online (Sandbox Code Playgroud)

如果有的话,我可以使用提升解决方案(除了wave).

pragma stringification c-preprocessor

94
推荐指数
2
解决办法
4万
查看次数

#ifdef和#ifndef的作用

#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");
Run Code Online (Sandbox Code Playgroud)

在这个有什么作用#ifdef#ifndef,什么是输出?

c-preprocessor

94
推荐指数
2
解决办法
16万
查看次数

C/C++宏中的逗号

假设我们有这样的宏

#define FOO(type,name) type name
Run Code Online (Sandbox Code Playgroud)

我们可以使用哪个

FOO(int, int_var);
Run Code Online (Sandbox Code Playgroud)

但并不总是那么简单:

FOO(std::map<int, int>, map_var); // error: macro "FOO" passed 3 arguments, but takes just 2
Run Code Online (Sandbox Code Playgroud)

我们当然可以这样做:

 typedef std::map<int, int> map_int_int_t;
 FOO(map_int_int_t, map_var); // OK
Run Code Online (Sandbox Code Playgroud)

这不是非常符合人体工程学的.必须处理类型不兼容的问题.知道如何用宏来解决这个问题吗?

c c++ macros c-preprocessor

93
推荐指数
4
解决办法
3万
查看次数