c++ - 我可以在使用前定义吗

标签 c++ visual-c++ include

我有类文件的cpp和h。类实现包含 wcsncpy 函数,只有在定义 _CRT_SECURE_NO_WARNINGS 时才可以使用。如果我将 #define _CRT_SECURE_NO_WARNINGS 放在所有标题包含之前,它就会起作用。但为什么我不能将这一行放在 header 之后或事件之后,就在 wcsncpy 使用之前?

更新

根据我的理解,我可以在代码中执行#define:

int _tmain(int argc, _TCHAR* argv[])
{

#define a

#ifdef a
    std::wcout << _T("hello") << std::endl;
#endif

}

为什么下面的定义不起作用?

int main(void)
{
 ...
    #define _CRT_SECURE_NO_WARNINGS
    wcsncpy(dest, src, 4); 

 ...
}

最佳答案

您可以使用 pragma warning 在本地抑制警告(默认情况下即使这个警告被视为错误) :

#pragma warning(push)
#pragma warning(disable: 4996) // 'wcsncpy': This function or variable may be unsafe.
    wcsncpy(dest, src, 4); 
#pragma warning(pop)

甚至可以使用 Microsoft 特定的 __pragma keyword 将其包装在更具可读性的宏中:

#define DISABLE_CRT_SECURE_WARNINGS() \
    __pragma(warning(push))           \
    __pragma(warning(disable: 4996))

#define RESTORE_CRT_SECURE_WARNINGS() \
    __pragma(warning(pop))

...
DISABLE_CRT_SECURE_WARNINGS();
wcsncpy(dst, src, 4);
RESTORE_CRT_SECURE_WARNINGS();

关于c++ - 我可以在使用前定义吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48266139/

相关文章:

c++ - 包括 2 个类的 .h 文件

c++ - 为什么 sleep_for 调用 FreeLibrary?

c++ - Oracle 是否正式支持动态记录集?

c++ - STL 容器库 - 在分配器类的不同实例上调用分配/解除分配是否合法?

c++ - 在模板实例化期间重载查找

C++ 构造函数、常量、继承和避免重复

c++ - 如何使用可变模板参数保存可变数量的参数?

c++ - 从同一项目中的两个 C++ 文件调用同一头文件中的函数

PHP 包含在 Cron 作业中不工作

c++ - 打印对象数组