Questions tagged «c-preprocessor»

在编译C和C ++语言程序之前应用的文本宏处理器。此标记还可以用于有关其他衍生自或具有相同功能的编译器/语言的问题,例如Objective-C或C#中的#指令。

19
#ifdef vs #if-作为启用/禁用特定代码段编译的方法,哪种方法更好/更安全?
这可能是风格问题,但我们的开发团队存在一些分歧,我想知道是否还有其他人对此有任何想法... 基本上,我们有一些调试打印语句,这些语句在正常开发过程中会关闭。我个人更喜欢执行以下操作: //---- SomeSourceFile.cpp ---- #define DEBUG_ENABLED (0) ... SomeFunction() { int someVariable = 5; #if(DEBUG_ENABLED) printf("Debugging: someVariable == %d", someVariable); #endif } 但是,有些团队更喜欢以下内容: // #define DEBUG_ENABLED ... SomeFunction() { int someVariable = 5; #ifdef DEBUG_ENABLED printf("Debugging: someVariable == %d", someVariable); #endif } ...哪种方法对您听起来更好,为什么呢?我的感觉是第一个比较安全,因为总会定义一些东西,并且没有危险可以破坏其他地方的其他定义。

3
我可以使用哪个预定义的宏来检测clang?
我正在尝试检测用于编译我的源代码的编译器。我可以轻松地找到预定义的宏来检查MSVC或GCC(例如,请参阅http://predef.sourceforge.net/),但是我找不到任何要检查clang的宏。 有人知道clang是否定义了一个宏__CLANG__,以便知道当前正在编译我的代码吗?


10
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)

6
预处理后gcc可以输出C代码吗?
我正在使用一个开放源代码库,该库似乎具有很多预处理指令以支持除C之外的多种语言。因此,我可以研究该库的功能,希望看到预处理后要编译的C代码,更像是我写的东西。 gcc(或Linux中通常可用的任何其他工具)可以读取此库,但输出将预处理转换为人类可读性的C代码吗?

7
C / C ++宏中的逗号
说我们有一个这样的宏 #define FOO(type,name) type name 我们可以使用像 FOO(int, int_var); 但并非总是那么简单: FOO(std::map<int, int>, map_var); // error: macro "FOO" passed 3 arguments, but takes just 2 我们当然可以: typedef std::map<int, int> map_int_int_t; FOO(map_int_int_t, map_var); // OK 这不是很符合人体工程学。加上类型不兼容必须加以处理。任何想法如何解决宏?
103 c++  c  macros  c-preprocessor 


8
如何在Xcode中定义预处理器符号
通过在Xcode项目中设置属性,可以为条件编译设置符号吗? 我的目标是创建一个可用于所有文件的符号,而不必使用import / include,以便一组通用类在某些项目中可以具有特殊的行为。如下所示,但带有我自己的符号。 #if TARGET_IPHONE_SIMULATOR ... #endif

4
#ifdef和#ifndef的作用
#define one 0 #ifdef one printf("one is defined "); #ifndef one printf("one is not defined "); 在#ifdef和中的作用是#ifndef什么,输出是什么?

8
缩进#define
我知道#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 …

12
C ++预处理器__VA_ARGS__参数数量
我在网上找不到答案的简单问题。在可变参数宏中,如何找到参数个数?如果可以的话,我对Boost预处理器还可以。 如果有什么不同,我试图将可变数量的宏参数转换为增强预处理程序序列,列表或数组,以进行进一步的处理。


4
定义宏中的语法
有什么方法可以将pragma语句与其他语句一起嵌入宏中? 我正在尝试实现以下目标: #define DEFINE_DELETE_OBJECT(type) \ void delete_ ## type_(int handle); \ void delete_ ## type(int handle); \ #pragma weak delete_ ## type_ = delete_ ## type 如果存在的话,我可以使用增强解决方案(节省波动)。

14
Xcode 4(和依赖项)的编译,生成或存档问题
在过去的几周中,这个问题有所发展,涵盖了与 xcode4 (并且升级项目的时间较早 代码s)。 但是,通过遵循同一组说明可以解决许多问题。 如果您有以下任何问题,请尝试接受的答案中的方法: 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 …

7
为什么只定义一个尚未定义的宏?
在我们的C代码库中,我看到每个宏都以以下方式定义: #ifndef BEEPTRIM_PITCH_RATE_DEGPS #define BEEPTRIM_PITCH_RATE_DEGPS 0.2f #endif #ifndef BEEPTRIM_ROLL_RATE_DEGPS #define BEEPTRIM_ROLL_RATE_DEGPS 0.2f #endif #ifndef FORCETRIMRELEASE_HOLD_TIME_MS #define FORCETRIMRELEASE_HOLD_TIME_MS 1000.0f #endif #ifndef TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS #define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS 50.0f #endif 进行这些定义检查而不是仅仅定义宏的原理是什么? #define BEEPTRIM_PITCH_RATE_DEGPS 0.2f #define BEEPTRIM_ROLL_RATE_DEGPS 0.2f #define FORCETRIMRELEASE_HOLD_TIME_MS 1000.0f #define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS 50.0f 我在网上的任何地方都找不到这种做法的解释。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.