我正在尝试检测用于编译源代码的编译器.我可以很容易地找到预定义的宏来检查MSVC或GCC(例如参见http://predef.sourceforge.net/),但我找不到任何宏来检查clang.
有人知道clang是否定义了一个宏__CLANG__,以便知道当前正在编译我的代码的是什么?
#define STR1 "s"
#define STR2 "1"
#define STR3 STR1 ## STR2
Run Code Online (Sandbox Code Playgroud)
是否有可能连接STR3 =="s1"?您可以通过将args传递给另一个宏函数来完成此操作.但是有直接的方法吗?
在#include.c文件中,.c文件是否可以(或者甚至是推荐/良好实践)?将它们包含在项目文件中会发生什么?
c code-organization project-organization include c-preprocessor
出于调试目的,我可以在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) 是否可以通过在Xcode项目中设置属性来为条件编译设置符号?
我的目标是创建一个可供所有文件使用的符号,而不必使用import/include,这样一组公共类在某些项目中可能会有特殊行为.像下面这样,但用我自己的符号.
#if TARGET_IPHONE_SIMULATOR
...
#endif
Run Code Online (Sandbox Code Playgroud) 这个问题在过去几周内已经发展,以涵盖xcode4的更多一般性问题(以及从旧的xcode升级项目).
然而,许多问题可以通过遵循相同的指令集来解决.
如果您遇到以下任何问题,请尝试接受的答案中的方法:
标题: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
我知道#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) 有没有办法在宏中用其他语句嵌入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).
#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");
Run Code Online (Sandbox Code Playgroud)
在这个有什么作用#ifdef和#ifndef,什么是输出?
假设我们有这样的宏
#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-preprocessor ×10
c ×6
c++ ×3
clang ×2
macros ×2
objective-c ×2
coding-style ×1
include ×1
indentation ×1
line-numbers ×1
pragma ×1
xcode ×1
xcode4 ×1